WSLの自動マウント機能を無効にしたい!?
Windows 10に「WSL(Windows Subsystem for Linux)」をインストールすると、Linux向けのプログラム(バイナリファイル)をそのまま実行できるようになる。WSLのインストールや初期設定の方法については、以下のTIPSを参照していただきたい。
Windows OS側で使っていたC:やD:などのローカルドライブは、WSL環境側では「/mnt/c」や「/mnt/d」などのパスで自動的に参照できるようになっている。
だが場合によっては、この自動マウントを無効にしたり、/mnt以外の場所にマウントさせたりしたいこともあるだろう。例えば、「sudoして、ルートフォルダでrm -rf *のようなコマンドを実行」したとすると(注意:危険なので絶対に実行しないように)、WSL環境のファイルが消えてしまうだけでなく、「/mnt/c」の下にあるファイル、つまりWindows OS側のC:などの内容も削除されてしまう。
権限の関係で全てのファイルやフォルダが削除されるわけではないが、WSLのファイルが削除されてもWSLが起動しなくなるだけだ。次のTIPSの方法を使ってWSLをリセットすれば、簡単に初期状態に戻せる。
だが、Windows OS側のファイルが消えてしまうのはかなり致命的である。最悪の場合は、システムの再インストールやフルバックアップからの復元などが必要になる(実際筆者はこれをやってしまって、とんでもないことになってしまった)。
このような事態を避けるためには、WSL起動時の自動マウントを無効にするとよいだろう。このためには、WSLの環境設定ファイルを使って初期状態を変更すればよい。本TIPSではこの方法について解説する。
なおWSL起動時の自動マウントを無効にしても、WSL起動後に手動でマウントすることは可能である。また/mnt/cを手動でアンマウントしてから(危険そうな)コマンドを実行するという方法もある。マウントやアンマウントの方法については、以下の記事を参照のこと。
WSLのマウント処理設定を制御するwsl.confファイル
WSLの起動時にC:などのローカルドライブを自動マウントするかどうかや、/etc/hostsファイルを自動作成するかどうかは、「/etc/wsl.conf」ファイルで設定できる。
- 「Manage and configure WSL」[英語](Microsoft Docs)
/etc/wsl.confファイルの内容例を次に示しておく。これは全てデフォルトの設定値であり、/etc/wsl.confが存在しない場合は、これらの値が設定されているものとしてWSLが実行される(行頭が「#」の行はコメント)。
※/etc/wsl.confの例
# Enable extra metadata options by default
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
mountFsTab = true
# Enable DNS - even though these are turned on by default, we'll specify here just to be explicit.
[network]
generateHosts = true
generateResolvConf = true
/etc/wsl.confファイルはテキストエディタで作成する。それぞれの設定内容は、次のような意味を持つ。
設定項目とデフォルト値 | 意味 |
[automount] | WSL起動時の自動マウント設定セクション |
enabled = true | 自動マウントするかどうか。trueなら自動マウントをする。falseならしない |
root = /mnt/ | 自動マウント先のフォルダパス。あらかじめフォルダとして作成しておくこと。このフォルダの下にcやdなどが作成される |
options = "metadata,umask=22,fmask=11" | マウントオプション |
mountFsTab = true | WSL起動時に/etc/fstabの内容を処理するかどうか。trueならする。falseならしない |
[network] | WSL起動時のネットワーク関連ファイルの自動作成セクション |
generateHosts = true | trueなら/etc/hostsを自動作成する。falseならしない |
generateResolvConf = true | trueなら/etc/resolv.confを自動作成する。falseならしない |
/etc/wsl.confの設定とその意味、デフォルト値 |
このファイルはデフォルトでは存在していないので、必要ならユーザーが自分で作成すること。「/etc」フォルダに書き込むにはroot権限が必要なので、「sudo vi /etc/wsl.conf」などのように、sudoして編集する必要がある(エディタはviでもnanoでもedでも、お好みで)。
WSLは起動時にこの内容に基づいて設定を変更するので、作成後や内容を変更した場合は、WSLをいったん終了させてから、もう一度起動する。
例えばWSL起動時の自動マウントを抑止したければ、「[automount]」のセクションに「enabled = false」と記述する。
まずはwsl.confファイルなし(デフォルト状態)で実行すると次のようになる。
デフォルトの状態
これはインストールした直後のWSLの状態。自動マウントが有効になっているので、Windows OS側のローカルドライブが/mntの下に自動的にマウントされている。
wsl.etcファイルに自動マウント無効化の設定を記述してから起動すると次のようになる。
自動マウントを無効にした場合
WSLが起動しても自動マウントされておらず、/mnt/cや/mnt/dなどの下には何もファイルがない。
この状態では、Windows OS側(C:など)のファイルへアクセスすることはできないが、一方で間違って編集や削除してしまう危険性は低くなる。ファイルとしてアクセスはできないが、Windows OS側とはパイプなどを使えばデータをやりとりできる(次の記事参照)。
- TIPS「Windows 10のLinux互換環境WSLからコマンドプロンプトのプログラムを呼び出す(バージョン1803対応版)」
- TIPS「Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版)」
なおWSLとWindows OSでは使用している文字コードが異なるので(UTF-8とShift_JIS)、必要なら文字コード変換などの処理も行うこと。
WSL起動時の自動マウントポイントはデフォルトでは「/mnt/〜」となっているが、これを変更して別の場所にするには、「[automount]」のセクションに「root = /windir/」のように記述する。ただしここで指定するフォルダは、あらかじめ作成しておくこと。
先のTIPS「Windows 10の『WSL』でネットワークドライブなどをマウントする」で解説しているが、「/etc/fstab」にマウントポイントを記述しておくと、C:やD:以外のドライブ、例えばリムーバブルディスクやネットワーク共有ドライブなどをWSL起動時に自動マウントさせることができる。
だがwsl.confに「mountFsTab = false」と記述しておくと、この処理が無効になり、自動マウントされなくなる(C:やD:などのローカルの非リムーバブルドライブは「enabled = 〜」で制御するので対象外)。この場合は、必要ならWSL起動後に手動でmountコマンドを使ってマウントする。
wsl.confの「[network]」セクションには、/etc/hostsと/etc/resolv.confファイルを自動生成するかどうかの設定を記述する。デフォルトではこれらのファイルはWindows OS側のネットワーク設定に基づいて、自動的に作成されることになっている。
自動生成されたネットワーク関連のファイル
WSL環境で名前解決(IPアドレスとコンピュータ名の相互変換)などを行うためには、/etc/hostsや/etc/resolv.confなどのファイルが適切にセットアップされている必要がある。
/etc/hostsファイルは自分のホスト名とIPアドレスの対応を記述したファイル、/etc/resolv.confはDNSのドメイン名とDNSサーバのアドレス情報などを記述したファイルである。通常は特に変更する必要はないだろう。
0 件のコメント:
コメントを投稿