このページの本文へ

Windows Info 第117回

RS4のWindows Subsystem for Linuxでのwsl.confによる初期設定

2018年02月18日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

 Windows Insider PreviewのBuild 17093では、Windows Subsystem for Linux(WSL)で起動時に簡易な設定を変更できる「wsl.conf」がサポートされた。

 WSLの問題点の1つは、通常のLinuxディストリビューションのようにシステム起動時のスクリプト実行(rcスクリプト)をサポートしていないことだ。一般にLinuxシステムでは、起動時にスクリプトを使い、さまざまなデーモン(Windowsでいうサービス)を起動したり、ストレージデバイスのマウントなどができる。今回搭載されたwsl.confは、wslの初期設定を指定するためのもので、スクリプトではないが、ストレージデバイスのマウントと、hosts、resolv.confの自動生成といったWSL固有の動作を制御するものだ。

wsl.confを用いて起動時にWSLの設定をする

 wsl.confは、「INI」形式と呼ばれるテキストの設定ファイル。WSL側の/etcディレクトリに配置される。WSLでは、起動時にこの/etc/wsl.confファイルを読み、初期設定をする。

 このファイルは設定対象を指定するセクション行と設定値を示す設定行から構成されている。レジストリが導入される以前、Windowsの設定ではこのINI形式がよく使われていた。拡張子が「.INI」であり、現在でもWindowsディレクトリ以下にまだファイルがある。

 セクションは起動時のDrvfsを制御する“[automount]”と、ネットワーク関連の“[network]”の2つ。これまでのWSLでは、Windowsが管理するドライブはすべて自動的にDrvfsでマウントされてきたが、このwsl.confを使うことで、それが制御できるようになる。

 Drvfsを制御する設定値は、「enabled=」「root=」「options=」の3つ。これにLinux/Unix系で使われるfstabによるマウントの制御を許可するかどうかの「mountFsTab=」がある。

設定行 設定可能値 省略値 意味
enabled true/false true trueのときにWindows管理のドライブをDrvfsでマウントする
root 文字列 /mnt/ Drvfsのマウントポイント
options カンマ区切りのオプション値 なし Drvfsのマウントオプション値
mountFsTab true/false true trueで/etc/fstabによる自動マウントを行なう

 「enabled=」は、Windows側のドライブをDrvfsで自動マウントするかどうかの設定。Build17093以前は、Windows側で管理している固定ドライブはすべてDrvfsで自動的にマウントされていた。この設定により自動マウントの可否を制御できるようになる。

 「options=」は、このときに指定するマウントオプション。前々回で解説したDrvfs固有のオプションやLinuxのmountオプションが指定できる。ただし、このオプションは、Drvfsの自動マウント時にすべてのドライブに対して適用され、ドライブ個別にオプションを指定することはできない。

 「root=」は、自動Drvfsマウント時のマウントポイントを指定する。Build 17093以前は、/mnt/に固定されていて、変更するには、コマンドラインからの再マウントが必要だった。

 「mountFsTab」は、/etc/fstabによる起動時の自動マウントを有効/無効にする設定。Linux/Unix系のOSでは、/etc/fstabにマウントコマンドのオプションを記述しておくと、システムの起動時に自動的にマウントされる。WSLでは、起動はマイクロソフトの用意したinitプロセスが行ない、これまでのWSLでは、fstabによる自動マウントはなされていなかった。

 enable=falseにすることで、drvfsの自動マウントはオフになる。

wsl.confによりDrvfsの自動マウントをオフに設定し、WSLを再起動すると、Cドライブがマウントされなくなる

 しかし、「mountFsTab」によるfstabの自動マウントは動作しなかった。手動で“mount -a”とすると正しくマウントされたため、記述は間違っていないと思われる。プレビュー版なのでなんらかの不具合があるのかもしれない。

ただし、mountFsTabによる自動マウントは動作しなかった

 Linux側の慣習からみれば、Drvfsの自動マウントをやめてfstabを有効にすればいいのだが、すでにRS3で正式版としてWSLをリリースした手前、過去との互換性を取らざるをえず、結果的にRS3までの自動Drvfsマウントと/etc/fstabによる自動マウントの両方を可能にするという折衷案になったと考えられる。

ネットワークの設定

 WSLでは、起動時にWin32側のhostsファイル(C:\Windows\System32\Drivers\etc)とresolv.confが自動生成されて、/etcディレクトリに書き込まれる。hostsは、IPアドレスとホスト名の対応表で、DHCP普及以前にサイト内でホスト名とIPアドレスを定義するために使われていた。

 現在では、DHCPとDNSサーバーの連携により、IPアドレス割り当てと名前解決が行なわれるため、ほとんど使われることはないが、唯一「localhost」とIPアドレスである「127.0.0.1」の対応だけが定義されていることが多い。

 resolv.confは、DNSによる名前解決の設定ファイルで通常は、サイト内のDNSサーバーなどのアドレスが定義されているもの。Windowsには、これに相当するファイルはなく、レジストリなどに情報が記録されるが、これもWSLの起動時に生成されて書き込まれる。

 これにより、WSLではWin32側と同じDNSサーバーを使って名前解決ができる。Windowsドメイン環境では、名前解決にDNSを使うため、WSL側でも同じDNSサーバーを使えるようにすることでWin32側と同じように名前解決ができるようになる。

 これらのファイルは、静的な情報ではあるが、Win32側で利用している場合にWSL側からファイルを見る以外に名前解決を同じようにはできない。このため、WSLでは起動時にWin32側の情報を元に2つのファイルを自動生成させている。

WSLでは、Win32側のhostsファイルを元に/etc/hostsが自動生成されていたが、wsl.confではこれを制御できるようになった

 wsl.confの“[network]”セクションで指定するのは、この2つのファイルの自動生成の有無。特にhostsファイルの場合、ユーザーがWSLのセッション内で書き換えても、次回起動時には、Win32側のhostsで上書きされ、設定が無効になっていた。簡易な解決方法としてWin32側のhostsを書き換えるものがあるが、同一のホスト名をWin32側とWSL側で別のものにしておきたいような場合、問題が出る可能性があった。

 設定行はどちらも“true”か“false”を指定するもので、“true”の場合に自動生成が有効になる。

fstabの書き方

 fstabは、起動時にシステム(systemd)が自動マウントするためのもので、mountコマンドのオプションに準じたパラメーターを記述する。ここでは、Drvfsの設定についてのみ簡単に解説する(manコマンドでfstabについて調べることができる)。

 fstabは、6つのフィールドをスペース(あるいはタブ)で区切ったもの。フィールドは順に

ファイルシステム(file system)
マウントポイント(dir)
ファイルシステムタイプ(type)
オプション(options)
ダンプ(dump)
パス(pass)

となっている。「ファイルシステム」は、マウント対象となるデバイスやパーティションを指定する。Drvfsでは、「C:」や「D:」などのドライブ文字とコロンを指定する。「マウントポイント」は、マウント先となる空のディレクトリを指定し、cドライブなら「/mnt/c」などと指定する。なお、「/mnt」部分は、空であれば、ほかのディレクトリでもかまわない。

 ファイルシステムタイプには「drvfs」を指定する。オプションは前々回で解説したように、「metadata」「uid」「gid」といったオプションをカンマで区切って指定する。ここでは、一般的なマウントオプション(たとえばリードオンリーを表すroなど)を指定することも可能。詳しくはmanコマンドでmountコマンドを調べてほしい。

 ダンプは、バックアップ用ツールdumpが処理のときに対象とするかどうかの指定で通常は0を指定しておく。次のパスは、fsckがファイルシステムをチェックするときの順番を指定するものだが、drvfsはfsckによるチェックは不要であるため0を指定する。以上をまとめると

c: /mnt/c drvfs metadata,noatime,uid=1000,gid=1000,defaults 0 0

のようになる。

fstabの例。6つのフィールドをスペースやタブで区切った1行で1つのマウントを指定

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン