WSLで自動マウントされている/mnt/c下のディレクトリをバインドマウントする。

現在のWindowsバージョン:

エディション      Windows 10 Pro
バージョン        21H1
インストール日    2020/11/14
OS ビルド         19043.1052
エクスペリエンス  Windows Feature Experience Pack 120.2212.2020.0

使用しているディストリビューション:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.5 LTS"

wsl.confの[automount]は、enabled (自動マウントの有効化)、 mountFsTab (fstabの有効化) がデフォルトでtrueとなっているので、 /etc/fstabに記載すれば、NASのNFSやSambaの共有ドライブが利用可能です。

参照: 「WSLコマンドと起動構成」の構成オプション > automount

/mnt/cのバインドマウント

“/mnt/c”には母艦となっているWindowsのシステムがまるごとマウントされていますし、 そもそもアクセスの度、”/mnt/c/User/xxx/…“と指定するのは面倒です。 Windowsボリュームの中で使用頻度の高いディレクトリだけを$HOME下にマウントして、 “/mnt/c/…“へのアクセスはできる限り避けたいところです。

“/mnt/c”は自動でマウントされているので、 下記のようにすればマウントできそうなものですが、 下記の場合、mount -aとすればマウントされるものの、 起動時にはマウントされません。

# /etc/fstab
/mnt/c/User/xxx/linux_documents  /home/xxx/win_documents  none  bind  0  0

WSLはWindowsボリュームを自動マウントする前に/etc/fstabの内容を処理する為、 バインドマウントする前に下記のエントリーが必要になります。

# /etc/fstab
C:\  /mnt/c  drvfs  noatime,uid=1000,gid=1000  0  0

WSL2であればWindowsパスを使うことでマウントできます。

# /etc/fstab
C:/Users/xxx/linux_docs  /home/xxx/win_docs  drvfs  noatime,uid=1000,gid=1000  0  0

推奨されているのは、C:をマウントしてから、バインドマウントする 方法のようです。1

# /etc/fstab
C:\  /mnt/c  drvfs  noatime,uid=1000,gid=1000  0  0
/mnt/c/User/xxx/linux_docs  /home/xxx/win_docs  none  bind  0  0

二重にマウントしているようで気持ち悪かったので、 wsl.confにenabled = falseを記載しました。

# /etc/wsl.conf
[automount]
enabled = false
mountFsTab true

念のため、以下にNFSとCIFSの利用例を記載しておきます。

NFSの利用例

Ubuntu / Debianの場合:

sudo apt install nfs-common

使用しているディストリビューションにより、導入方法やパッケージ名が異なる場合が あります。

# /etc/fstab
192.168.0.1:/srv/data  /mnt/data  nfs4  rsize=8192,wsize=8192,timeo=14,_netdev,nolock  0  2

NFSの利用にはnolockオプションが必要です。

Samba / CIFSの利用例

Ubuntu / Debianの場合:

sudo apt install cifs-utils

使用しているディストリビューションにより、導入方法やパッケージ名が異なる場合が あります。

//OTHER_WIN/Data  /home/xxx/Data  cifs  credentials=/home/xxx/.credentials,_netdev,vers=3.0,uid=1000,gid=1000,ip=192.168.0.1  0  0
# ~/.credentials (chmod 600 .credentials)
username=xxx
password=xxx