みなさん、こんにちは。
Windows Subsystem for Linux(WSL2)がリリースされてから、ずいぶん時間が経ちましたね。Linux環境をほぼネイティブに近い感覚で使えるため、多くの開発者にとって非常に便利なツールとなっています。
しかし、WSL2には、誰もが一度は遭遇するかもしれない「見えない壁」が存在します。
「見えない壁」とは?
ところで、みなさんは普段、USBメモリをよく使いますか?特に、インターネット接続ができない閉じた開発環境では、USBメモリがデータの持ち運びに大活躍しますよね。
「WSLを使っているんだから、当然Windowsのファイルシステムにはアクセスできるはず。じゃあ、USBメモリも何も考えずに使えるだろう?」
そう思われる方も多いのではないでしょうか?しかし、実際にUSBメモリをWindowsパソコンに挿してWSL2からアクセスしようとしても、見つからないことに気づき、困った経験があるかもしれません。
Windowsでは問題なく使えるUSBメモリが、WSL2からは見えない。これが、今回ご紹介する「見えない壁」の正体です。
なぜWindowsで認識されているUSBメモリがWSL2からは見えないのか?
この疑問には、WSL2がWindowsのファイルシステムをどのように扱っているかという仕組みが関係しています。
通常、Windows側で認識されている固定ドライブのパーティション(例: Cドライブなど)は、WSL2から/mnt/c
や/mnt/d
といった形式でアクセスできます。これは、WSL2がWindowsのファイルシステムを自動的にマウントしてくれるためです。WSL2は、起動時にこれらの固定ドライブを検出し、Linuxのファイルシステム上に仮想的に接続する処理を行っています。
しかし、USBメモリやSDカードのようなリムーバブルメディアは、この自動マウントの対象外なのです。その主な理由としては、以下の点が挙げられます。
- 動的な接続・切断
- USBメモリは、固定ドライブとは異なり、ユーザーが頻繁に抜き差しする可能性があります。自動マウントの対象にすると、抜き差しするたびにWSL2側でマウント・アンマウントの処理が必要になり、システムが不安定になるリスクや、意図しないタイミングでのデータアクセスによる破損のリスクが高まります。
- ファイルシステムの種類
- USBメモリにはFAT32、exFAT、NTFSなど様々なファイルシステムが存在します。WSL2がこれらすべてを自動的に安定してマウントし、互換性を維持することは技術的に困難です。
これらの理由から、Windowsのエクスプローラー上では見えていても、WSL2のターミナルからls /mnt
と入力しても、そこには表示されないという状況が発生していると考えられます。
実際、WSLの初期バージョンではUSBメモリへのアクセスは不可能だったため、私も長らく「使えないもの」だとばかり思い込んでいました。
しかしご安心ください。
現在は、自動でマウントされないだけで、一手間加えることでWSL2からUSBメモリをマウントし、普段使いのストレージとして利用できるようになっています。
今回は、この「見えない壁」を乗り越え、WSL2でUSBメモリをマウントする方法について解説していきます。
「見えない壁」を乗り越える「drvfs」
ここで登場するのが、drvfsというキーワードです。
drvfsは、WSL2がWindowsのファイルシステムにアクセスするために用いられる特別なファイルシステムを指します。WSL2がWindowsのCドライブなどにアクセスできるのも、このdrvfsのおかげなんですね。
通常は自動的にマウントされる固定ドライブとは異なり、USBメモリなどのリムーバブルメディアは、このdrvfsを使って手動でマウントしてあげる必要があります。
WSL2からUSBメモリをマウントする手順
それでは、実際にUSBメモリをWSL2から使えるようにする手順を見ていきましょう。
今回は、WindowsがUSBメモリをDドライブとして認識している場合を例に説明します。
WSL2内でマウントコマンドを実行
ターミナルを開き、以下のコマンドを実行します。
sudo mount -t drvfs d: /mnt/d
コマンドとオプションの意味は以下の通りです。
sudo
管理者権限でコマンドを実行します。
mount
ファイルシステムをマウントするためのコマンドです。
-t drvfs
drvfsファイルシステムタイプを指定しています。
d:
Windows上でのUSBメモリのドライブレターを指定します。ご自身の環境に合わせて適宜変更してください。
/mnt/d
WSL2内でUSBメモリをマウントするディレクトリを指定します。これは任意ですが、Windowsのドライブレターに合わせておくと分かりやすいでしょう。
ファイルの読み書きを確認
コマンドが正常に実行されると、/mnt/d
(指定したマウントポイント)にUSBメモリがマウントされ、ファイルの読み書きができるようになります。
ls /mnt/d
上記コマンドで、USBメモリ内のファイルが表示されることを確認してみてください。これで、WSL2のLinux環境からUSBメモリ内のデータにアクセスしたり、逆にWSL2内で作成したファイルをUSBメモリに保存したりといった操作が可能になります。インターネット接続がない環境でのデータ移動にも、大いに役立つはずです。
使い終わったら必ずアンマウント!その重要性とリスク
ここで重要な注意点があります。
USBメモリの利用を終えたら、必ずアンマウントすることを忘れないでください。
アンマウントを怠ると、予期せぬエラーやデータ破損のリスクに繋がる可能性があります。
なぜアンマウントが重要なのか?
WSL2でdrvfsを使ってマウントしている最中に、アンマウントせずにWindowsからUSBメモリを取り外すと、以下のような問題が発生する可能性があります。
- 「Input/output error」などのエラーメッセージが表示される
- WSL2上でUSBメモリへのアクセス中に強制的に取り外されたため、ファイルシステムの一貫性が失われ、様々なエラーが発生します。
- データ破損のリスク
- 特に、USBメモリへの書き込み中にアンマウントを忘れると、データが完全に書き込まれず、ファイルが破損する可能性があります。最悪の場合、USBメモリ自体が正常に認識されなくなったり、内部のファイルシステムが損傷したりすることもあります。
- WSL2の動作が不安定になる
- 強制的な取り外しによって、WSL2のシステム自体が不安定になり、フリーズしたり、再起動が必要になったりするケースも報告されています。
- Windows側での警告の欠如
- Windows側では、「ハードウェアの安全な取り外し」や「取り出し」の操作を行わない限り、WSL2でUSBメモリが使用中であることを警告なく認識してしまいます。そのため、誤って取り外してしまう危険性が高まるので注意が必要です。
安全なアンマウント手順
WSL2での作業が終了したら、以下のコマンドで安全にアンマウントしてください。
sudo umount /mnt/d
アンマウントが完了したら、Windowsのタスクバーにある「ハードウェアを安全に取り外してメディアを取り出す」アイコンをクリックし、該当するUSBメモリを選択して安全に取り外しましょう。この手順を踏むことで、データ破損のリスクを最小限に抑え、安心してUSBメモリを使用できます。
トラブルシューティング – もしもUSBメモリがマウントできない時
「コマンドを実行したけど、どうにもうまくマウントできない…」そんな時は、以下の点を確認してみてください。
- ドライブレターの確認
- Windowsのエクスプローラーで、USBメモリが本当にDドライブとして認識されているか、再度確認してください。もしEドライブやFドライブとして認識されている場合は、コマンドの
d:
の部分を該当するドライブレターに変更する必要があります。
- Windowsのエクスプローラーで、USBメモリが本当にDドライブとして認識されているか、再度確認してください。もしEドライブやFドライブとして認識されている場合は、コマンドの
- USBメモリの接続状態
- USBメモリがきちんとPCに接続されているか、一度抜き差しして再確認してみてください。
- WSL2の再起動
- まれに、WSL2の内部状態が不安定になっている場合があります。一度WSL2を完全にシャットダウンし、再起動してから再度マウントを試してみてください。WSL2のシャットダウンは、PowerShellやコマンドプロンプトで
wsl --shutdown
と入力することで行えます。
- まれに、WSL2の内部状態が不安定になっている場合があります。一度WSL2を完全にシャットダウンし、再起動してから再度マウントを試してみてください。WSL2のシャットダウンは、PowerShellやコマンドプロンプトで
- 管理者権限の確認
sudo
コマンドを実行する際に、パスワードを求められるはずです。正しくパスワードを入力し、管理者権限があることを確認してください。
- マウントポイントの確認
/mnt/d
のようなマウントポイントがすでに存在しないか、または別のデバイスがマウントされていないか確認してください。もし既に何かがマウントされている場合は、別の空のディレクトリを作成してそこにマウントするか、既存のマウントを解除してから再度試してください。
まとめ
WSL2からUSBメモリを利用するテクニックは、特にネットワークに接続されていないクローズドな環境において、WindowsとLinux間でのデータ共有を円滑にするための強力な手段となります。一見するとアクセスできないように見えるUSBメモリも、mount -t drvfs
コマンドを使えば簡単に活用できます。
ただし、利用後の安全なアンマウントは非常に重要です。この点さえ注意すれば、USBメモリはWSL2環境における頼れるデータ運搬役として、開発作業を強力にサポートしてくれるでしょう。
みなさんの周囲にWSL2ではUSBメモリは使えないと諦めている方がいたら、ぜひこの記事の存在を教えてあげてくださいね。
本日も最後までお読みいただきありがとうございました。
それでは、よいWSLライフを!