DebianをWindows10上で動かす その10: ネットワークドライブを自動マウントする

前回はWSL(Windows Subsystem for Linux)上にインストールしたDebianのSSHサーバを自動起動する方法を紹介しました。

今回はWindowsのネットワークドライブをWSLで自動マウントする方法を調査します。

WSLとネットワークドライブ

LinuxやNAS等のストレージをWindowsのネットワークドライブとして利用されている方も多いと思います。

私もファイルサーバとして動かしているLinuxがあり、Windows10からネットワークドライブとして見えるようにしています。

現時点でのネットワーク構成

今回はこのファイルサーバのLinuxをWSLから利用したいという話です。

実現したいネットワーク構成

かつてはWSLはネットワークドライブをマウントすることができなかったのですが、Windows10 April 2018アップデートあたりからネットワークドライブのマウントもできるようになりました。

今回はWindows Subsystem for Linuxとネットワーク上にあるLinuxファイルサーバ間でファイルを共有する方法を紹介します。本当はWSLからファイルサーバのディスクをマウントして使う方法を模索していたのですが、残念ながら今のWSLでは見つけることができませんでした。現時点ではscpを使うのが現実的と思います。

ただ、毎回mountコマンドを入力するのが面倒なので、これをなんとかしたいというのが今回のネタです。

/etc/fstabを使った自動設定

WSLの/etc/fstabというファイルにマウントしたいファイルシステムの情報を書いておくと、WSL起動時に自動的にマウントしてくれます。

WSLにはwsl.confという設定ファイルが導入されていて、これでもう少し挙動を細かく制御できますが、デフォルトでfstabを読む設定になっているのでwsl.confの作成は不要なようです。

まずfstabを作成します。

$ sudo vi /etc/fstab

内容は次のようにします。

z:  /mnt/linux drvfs   rw,noatime,uid=1000,gid=1000,umask=22,fmask=111,case=off        0       0

この例は「zドライブ」を「/mnt/linux」以下にマウントする例です。

ドライブ(z)やマウントポイント(/mnt/linux)は必要に応じて修正してください。

なお、マウントポイントはあらかじめ作成しておきます。

$ sudo mkdir /mnt/linux

最後にfstabが正しいかどうかテストをしておきましょう。

$ sudo mount /mnt/linux

このようにマウントポイントだけ指定してマウントできるようになったら、fstabは問題ありません。

動作確認

あとはWSLを再起動してみましょう。バックグラウンドで動いているプロセスがなければ、WSLのターミナルを閉じて再度開きます。

バックグラウンドプロセスがある場合はバックグラウンドプロセスを明示的に停止させるか、Windows自体を再起動します。

WSLでmountを実行して表示されていたら成功です。

$ mount
rootfs on / type lxfs (rw,noatime)
...
z: /mnt/linux type drvfs (rw,nosuid,nodev,noexec,noatime,uid=1000,gid=1000,umask=22,fmask=111,case=off)

うまくいかない場合

これでうまくいくはずなのですが私はいろいろ問題が発生しました。

ネットワークドライブが切断されている場合がある

ネットワークドライブがWindows10のログオン時に切断状態になっていることがあり、この場合はマウントに失敗します。

このような場合はfstabに記載するデバイスをドライブ名ではなく、UNC(共有フォルダのネットワーク名)で指定した方が良いかもしれません。

\\192.168.10.1\share z:  /mnt/linux drvfs   rw,noatime,uid=1000,gid=1000,umask=22,fmask=111,case=off        0       0

この例はIPアドレス192.178.10.1のLinuxが「share」という名前で公開しているディレクトリを「/mnt/linux」以下にマウントする例です。

使い勝手はネットワークドライブに割り当てたドライブレターを使う場合と変わらないので、念のためUNCを使った方が良いかもしれません。

SSHサーバを自動起動させるとうまくいかない

私はWSLのSSHサーバを自動実行するようにして運用しています。

今回はWSLのSSHサーバをWindows10へのログオン時に自動実行する方法を紹介します。これで手動でSSHサーバを起動する必要がなくなり、いきなりSSHクライアントでWSLに接続することができるようになりました。コマンドライン派にはかなり便利な状況ではないでしょうか。今回紹介した手法はSSHサーバだけでなく、Webサーバなどの様々なWSL上のサーバに応用できますので活用してみてください。

ところがこの環境だとネットワークドライブは自動マウントされません。

それどころか手動でマウントしようと思ってもエラーになってしまいます。

$ mount /mnt/linux/
mount: wrong fs type, bad option, bad superblock on \\192.168.10.1\share,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

SSHサーバを自動実行する前に「/bin/mount -a」を自動実行するように設定してみたりしたのですが、うまくいきませんでした。

WSLへのSSH接続が悪いわけではなく、バックグラウンドでSSHサーバを実行してしまうことに問題があるようです。

結局原因がわからずこの問題は解決できませんでした。

どなたか解決できた方がいたらコメントをお願いします。

まとめ

今回はWindows Subsystem for Linuxを使って導入したDebianでネットワークドライブを自動マウントする方法を紹介しました。

普通の環境ならばfstabにネットワークドライブの情報を記述するだけで簡単なのですが、SSHサーバをバックグランドで自動起動しておくとなぜかネットワークドライブをマウントできないという現象になってしまいました。

次回はWSLでのGUI利用をリモートデスクトップで実現します。