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は、そんな起動時の動作を指定できる設定ファイルだ。用意されているデフォルト設定のなかで使う限り、この設定ファイルを使う機会はない気もするが、そうした機能があることだけは覚えておきたいところだ。