WSL起動時の処理を指定する/etc/wsl.confファイル
WSLで動作するLinuxディストリビューションは、起動時の処理が通常のLinuxディストリビューションと少しだけ異なっている。この”異なる動作”をサポートする方法として、2018年春のWindows 10アップデートでは新たに、/etc/wsl.confファイルが追加された。
このファイルはWSL起動時の処理を設定するというもので、ちょっとした設定を行うことができる。起動後に手動で実施することもできる内容ではあるが、起動時に自動的に処理できるとかなりスッキリする。今回はこのファイルの使い方を紹介する。
起動時のC:ドライブのマウント先変更など
Windows 10のC:ドライブやD:ドライブは自動的に/mnt/cや/mnt/dにマウントされる仕組みになっている。
■Windows 10のC:ドライブは/mnt/cにマウントされる
daichi@DESKTOP-DVVLKV9:~$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 58G 25G 33G 43% /
none 58G 25G 33G 43% /dev
none 58G 25G 33G 43% /run
none 58G 25G 33G 43% /run/lock
none 58G 25G 33G 43% /run/shm
none 58G 25G 33G 43% /run/user
C: 58G 25G 33G 43% /mnt/c ← ここに注目
daichi@DESKTOP-DVVLKV9:~$
ここで次のように/etc/wsl.confファイルを作成し、一旦システムを再起動してみよう。
■/etc/wsl.confファイルの編集とマウント先変更の準備
daichi@DESKTOP-DVVLKV9:~$ sudo vi /etc/wsl.conf
daichi@DESKTOP-DVVLKV9:~$ sudo mkdir /DRIVE
daichi@DESKTOP-DVVLKV9:~$
■/etc/wsl.confファイルの内容
[automount]
enabled = true
root = /DRIVE/
options = "metadata,umask=22,fmask=11"
mountFsTab = false
システムを起動すると次のようにマウント先が/DRIVE/cに変更されたことを確認できる。
daichi@DESKTOP-DVVLKV9:~$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 58G 25G 34G 43% /
none 58G 25G 34G 43% /dev
none 58G 25G 34G 43% /run
none 58G 25G 34G 43% /run/lock
none 58G 25G 34G 43% /run/shm
none 58G 25G 34G 43% /run/user
C: 58G 25G 34G 43% /DRIVE/c ← ここに注目
daichi@DESKTOP-DVVLKV9:~$
例えば、/etc/wsl.confファイルを次のような内容に変更してみよう。
[automount]
enabled = true
root = /DISK/
options = "metadata,umask=22,fmask=11"
mountFsTab = false
すると当然、マウント先は/DISK/cに変更される。
daichi@DESKTOP-DVVLKV9:~$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 58G 25G 34G 43% /
none 58G 25G 34G 43% /dev
none 58G 25G 34G 43% /run
none 58G 25G 34G 43% /run/lock
none 58G 25G 34G 43% /run/shm
none 58G 25G 34G 43% /run/user
C: 58G 25G 34G 43% /DISK/c ← ここに注目
daichi@DESKTOP-DVVLKV9:~$
さらに、mountコマンドでマウントオプションを確認すると、以下のように、/DISK/cのマウントオプションに「rw,noatime,uid=1000,gid=1000,umask=22,fmask=11,metadata」が指定されていることも確認できる。
daichi@DESKTOP-DVVLKV9:~$ mount
rootfs on / type lxfs (rw,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
none on /dev type tmpfs (rw,noatime,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,gid=5,mode=620)
none on /run type tmpfs (rw,nosuid,noexec,noatime,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime)
none on /run/shm type tmpfs (rw,nosuid,nodev,noatime)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,noatime,mode=755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noatime)
C: on /DISK/c type drvfs (rw,noatime,uid=1000,gid=1000,umask=22,fmask=11,metadata) ← ここに注目
daichi@DESKTOP-DVVLKV9:~$
/etc/wsl.confファイルはINIファイル形式になっており、次のような内容を指定できる。
キー | デフォルト | 意味 |
---|---|---|
enabled | true | C:やD:といったWindowsドライブを自動的に/mnt/以下にマウントするかどうか |
mountFsTab | true | WSL開始時に/etc/fstabの内容に従ってマウントを実施するかどうか |
root | /mnt/ | ドライブのマウント先 |
options | カンマ区切りでオプションを指定 |
ファイル共有のマウントやデフォルトパーミッションなど、WSLを使い込んでいくとoptionsに指定する内容をいろいろ変更したくなってくるかもしれない。本連載の趣旨からするとそこまで設定することはあまりないような気もするが、/etc/wsl.confファイルでそういったオプションが指定できるということだけは覚えておいていただきたい。
ネットワークファイル生成の変更など
/etc/wsl.confファイルでは、[network]というセクションも指定できるようになっている。次のような感じだ。
[network]
generateHosts = true
generateResolvConf = true
このセクションで指定できるキーは、次のように/etc/hostsや/etc/resolv.confファイルを自動生成するかどうかの設定になっている。
キー | デフォルト | 意味 |
---|---|---|
generateHosts | true | /etc/hostsを自動生成するかどうか |
generateResolvConf | true | /etc/resolv.confを自動生成するかどうか |
例えば「DNSとしてWindows 10と違うものを使いたい」といった場合、「generateResolvConf」を「false」に設定しておいて、自前で/etc/resolv.confファイルを書けばよい。これも本連載の趣旨から考えるとやや突っ込みすぎた設定ではあるものの、もしかすると必要になる日が来るかもしれない。こういった指定ができることを知っていて損はないだろう。
* * *
WSLの環境は少々特殊だ。最初の利用時にはシステム起動に相当する処理が走ることになるが、LinuxをPCや仮想マシンで実行するときのようなフルでの起動処理が走るわけでもない。しかし、処理がまったく走らないわけではない。
/etc/wsl.confは、そんな起動時の動作を指定できる設定ファイルだ。用意されているデフォルト設定のなかで使う限り、この設定ファイルを使う機会はない気もするが、そうした機能があることだけは覚えておきたいところだ。