前回はWSL(Windows Subsystem for Linux)上にインストールしたDebianのSSHサーバを自動起動する方法を紹介しました。
今回はWindowsのネットワークドライブをWSLで自動マウントする方法を調査します。
WSLとネットワークドライブ
LinuxやNAS等のストレージをWindowsのネットワークドライブとして利用されている方も多いと思います。
私もファイルサーバとして動かしているLinuxがあり、Windows10からネットワークドライブとして見えるようにしています。
今回はこのファイルサーバのLinuxをWSLから利用したいという話です。
かつてはWSLはネットワークドライブをマウントすることができなかったのですが、Windows10 April 2018アップデートあたりからネットワークドライブのマウントもできるようになりました。
ただ、毎回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サーバを自動実行するようにして運用しています。
ところがこの環境だとネットワークドライブは自動マウントされません。
それどころか手動でマウントしようと思ってもエラーになってしまいます。
$ 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利用をリモートデスクトップで実現します。
コメント