2018年7月12日木曜日

Windows 10の「WSL」でネットワークドライブなどをマウントする

 Windows 10に「WSLWindows Subsystem for Linux」をインストールすると、Linux向けのプログラム(バイナリファイル)をそのまま実行することができる。WSLのインストール方法や活用については、以下のTIPSなどを参照していただきたい。

WSLでは、ローカルドライブが自動マウントされる

 WSLを起動すると、ローカルのハードディスクやSSD上に存在して、ドライブ文字を割り当てられているNTFSFATなどの固定ボリュームはWSL用に自動マウントされる。マウント先は、例えば「C:」ドライブなら「/mnt/c」、「D:」ドライブなら「/mnt/d」、……などとなっている。

 だが、リムーバブルデバイス(USBメモリやUSB接続のハードディスクなど)やネットワークドライブは自動ではマウントされない。そのため、USBメモリにコピーしたデータやツールなどを、WSL上で利用しようとしても、USBメモリがWSL上からは見えず、使うことができない。

 例えば、Windows OS上ではE:ドライブとしてアクセスできるUSBメモリや、Z:としてアクセスできるネットワーク共有フォルダ「\\fileserver\homes」があったとする。

 
Windowsのエクスプローラで見たドライブの一覧
Windows
のエクスプローラでは、実際にボリュームが存在していて、アクセス可能なドライブ名の一覧が表示される。


 この状態でWSLを起動しても、「/mnt/」フォルダには、ローカルのNTFSボリュームであるC:D:ドライブ用の/mnt/c/mnt/dしか存在しない。USBメモリのE:や、ネットワーク共有のZ:に対するパスは存在しないので、アクセスできない。

 
WSLで見たドライブの一覧
WSL
環境では、Windowsドライブの一覧を/mntフォルダ経由で確認できる。だが起動直後のWSLでは、リムーバブルドライブやネットワークドライブはデフォルトではマウントされていない。


 そこで、これらのドライブをWSL環境でも利用できるようにする方法を紹介する。

WSLUSBメモリやネットワーク共有フォルダをマウント/アンマウントする

 WSLLinux)でディスクボリュームやネットワーク共有フォルダへアクセス可能にすることを「マウント」するという。マウントするには「mount」というコマンドを利用する。引数には、マウントするタイプとマウントする対象、マウント先を指定する。

mount -t drvfs <デバイス名> <マウントポイント>

<デバイス名>  マウントしたいWindowsのローカルドライブ名やネットワーク共有リソースのUNCパス表記。E:F:\\server1\homesなど。「\」が含まれる場合は、全体をシングルクォートで囲むか、「\\」のようにエスケープする

<マウントポイント>  マウントしたボリュームを割り当てたいパス。/mnt/e/mnt/shareなど。あらかじめ作成しておくこと



 「-t drvfs」はマウントするデバイスのタイプの指定で、WSLWindowsのドライブをマウントしたい場合は常にこのように指定する。

 マウントしたドライブを取り外したい場合は、アンマウントしたい対象を指定して「umount」コマンドを実行する。

umount <対象>

<対象>  アンマウントしたいパス(/mnt/shareなど)もしくはデバイス名(E:など)



 以下、例を示しておく。

1:リムーバブルドライブをマウントする

 ローカルのE:ドライブとしてアクセスしているUSBメモリを、WSLでマウントするには次のようにする。「mount」や「unmount」コマンドを実行するにはroot権限が必要なので、先頭に「sudo 」を付けて実行している(パスワードの入力が必要)。マウント先のパスは、空のフォルダとしてあらかじめ作成しておく必要がある(「sudo mkdir /mnt/」を実行する。/mnt以外の場所でも可)。

 
リムーバブルドライブのマウント
リムーバブルドライブをマウントするには、sudoコマンドを実行してから(もしくは先頭にsudoを付けて)、ローカルのドライブ名(この場合はE:。大文字でも小文字でもよい)とマウントポイントを指定して、mountコマンドを実行する。マウントポイントはあらかじめ作成しておくこと。


 USBメモリやリムーバブルドライブを/mnt/eとしてマウントさせることも当然できるが、ドライブ名はシステムや状況によって変わることがあるので、ここでは/mnt/usbというパスでアクセスできるようにしている。

2:ネットワーク共有フォルダをマウントする

 ネットワーク共有フォルダをマウントする場合も同様だが、2つ注意点がある。

●注意点1——共有パスの表記に注意

 Windowsの共有パス(例えば\\server1\homesなど)には「\」が含まれているため、全体を(ダブルクォートではなく)シングルクォート記号で囲むか、パス中の「\」を「\\」のようにエスケープする必要がある。

●注意点2——資格情報はあらかじめ指定しておく

 「資格情報」(Windows資格情報とも)とは、ファイルサーバーの共有リソースへ接続する場合に指定する、ユーザー名とパスワードの情報のことである。資格情報はmountコマンドでは指定できないので、マウント前にWindows OS側であらかじめ共有への接続を済ませておく。

 具体的には、エクスプローラで一度共有リソースへアクセスしてユーザー名とパスワードを入力しておいたり(一度入力された資格情報はWindows OS内部に保存される)、コマンドプロンプトで「net use \\fileserver\homes /user: *」のようなコマンドで一度接続したりしておく。WSL側から実行するなら「net.exe use 」が利用できる(「net.exe」と拡張子まで含めて指定すること。本記事冒頭で紹介しているTIPS記事参照)。net useコマンドの使い方については、次のTIPSを参照していただきたい。

 これらを踏まえて、実際にネットワーク共有フォルダをマウントすると次のようになる。

 
ネットワーク共有フォルダのマウント
ネットワーク共有フォルダをマウントするには、共有のUNCパス名とマウントポイントを指定してmountコマンドを実行する。共有名は「'\\fileserver\homes'」のようにシングルクォートで囲むか、「\\\\fileserver\\homes」のように、「\」を「\\」に置き換えて指定する(実際には「//fileserver/homes」のように、パス区切りに「/」も使えるようである。これなら引用符で囲む必要はない)。


マウントされたドライブの一覧を確認する

 マウントされたドライブの一覧を確認するには、引数なしでmountを実行すればよい。このコマンドはrootでなくても(sudoしなくても)実行できる。

 
マウント結果の確認
引数なしでmountコマンドを実行すると、システムにマウントされているボリュームの一覧が表示される。


アンマウントする例

 マウントしたドライブの利用を終了するには、root権限でunmountを実行する。引数にはアンマウントしたいマウントポイントかデバイス名を指定する。

 
ドライブのアンマウント
ドライブをアンマウントするには、umountコマンドにマウントポイントを付けて実行する。


/etc/fstabを使って自動マウントさせる

 WSLを起動する度に、手動でマウントするのが面倒ならば、あらかじめ「/etc/fstabファイル」にマウント情報を設定しておくという方法もある。このファイルにはWindows側のドライブ名や共有フォルダ名(UNC)とマウントポイントを記入しておく。ただしリムーバブルドライブは、システムの構成によってドライブ名が変わることがあるので、手動でマウント/アンマウントする方がよいだろう。

 
/etc/fstabファイルの記述例
/etc/fstab
というテキストファイルにマウント情報を設定しておくと、WSLの起動時に自動的にマウントされる。「sudo vi /etc/fstab」のようにしてroot権限で編集すること。先頭行は最初から設定されている情報なので、消さないようにする。詳細は「man fstab」コマンドなどを参照のこと。


 /etc/fstabに設定を記述しておくと、WSLの起動時に自動的にマウントされるし、「mount /mnt/share」のように、デバイス名かマウントポイントを指定するだけでマウントしたり、アンマウントしたりできる(「-t drvfs」を省略できる)。

WSL起動時の自動マウントを無効にしたり、マウントする場所を変更する

2018/07/12追記】
 WSL起動時にローカル固定ドライブを自動マウントさせるかどうかや自動マウントするポイント(デフォルトは/mnt)の変更、/etc/fstabに基づくマウント処理の有効/無効などは、/etc/wsl.confという設定ファイルを利用すれば変更できる。具体的な方法については以下のTIPSを参照していただきたい。

 

0 件のコメント:

コメントを投稿