みなさん、こんにちは。
Linux環境で使っていたHDDをWindowsで利用したいと思ったことはありませんか?
通常、WindowsではLinuxのファイルシステム(ext4など)を直接認識できないため、専用のツールをインストールする必要があります。しかし、Windows Subsystem for Linux (WSL) があれば、そんな手間は不要です!
今回は、WSLを使ってLinuxで使っていた外付けHDDにアクセスする方法を解説します。もう専用ツールは必要ありません!
なぜWindowsはLinux HDDを認識できないのか?
WindowsとLinuxでは、ファイルシステムの形式が異なります。Windowsは主にNTFSやFAT32を使用しますが、Linuxはext4やXFS、Btrfsといった独自のファイルシステムを使用しています。そのため、WindowsはLinuxでフォーマットされたHDDをそのままでは読み込むことができないのです。
「Linux用のHDDを読み込みたい場面なんてない」と思われる方もいるかもしれませんが、市販のNAS機器はLinuxで動作している場合が多く、NASから取り出したHDDをWindowsで読み込みたいという場面はそれなりに発生します。
これまで、この問題を解決するにはExt2Fsdのようなサードパーティ製のツールをインストールするのが一般的でした。しかし、WSLが普及した現在、より手軽な方法でこの問題に対処できるようになりました。
WSLでLinux HDDをマウントする手順
1. 外付けHDDをWindowsに接続する
まず、Linuxで使っていたHDDを通常通りWindowsパソコンにUSB外付けHDDとして接続します。
重要:
「フォーマットしますか?」と聞かれても、絶対にキャンセルしてください。ここでフォーマットしてしまうと、HDD内のデータがすべて消えてしまいます。
2. Windows側でデバイスIDを調べる
次に、PowerShellを使って接続したHDDのデバイスIDを特定します。
管理者権限は不要ですので、通常のPowerShellを起動し、以下のコマンドを実行してください。
wmic diskdrive list brief
実行すると、以下のような形式でディスクの情報が表示されます。
Caption DeviceID Model Partitions Size
MAKER MODEL_NAME \\.\PHYSICALDRIVE1 MODEL_NAME 1 512105932800
ここで必要なのは、\\.\PHYSICALDRIVE1
のようなDeviceIDです。ご自身の環境に合わせて、目的のHDDのDeviceIDをメモしておきましょう。
3. WSLでHDDをマウントする
DeviceIDが特定できたら、いよいよWSLでHDDをマウントします。ここからの操作は管理者権限が必要です。必ず「管理者として実行」でPowerShellを起動してください。
直接マウントする場合(推奨)
ほとんどの場合、以下のコマンドで直接マウントできます。ファイルシステムの種類を指定しない場合は、ext4
として扱われます。
wsl --mount <デバイス名> --partition <パーティション番号> --type <ファイルシステムの種類>
<デバイス名>
: 先ほど調べたDeviceID(例:\\.\PHYSICALDRIVE1
)を指定します。<パーティション番号>
: マウントしたいパーティションの番号を指定します。ディスク全体をアタッチしたい場合は指定不要です。<ファイルシステムの種類>
: HDDのファイルシステムを指定します(例:ext4
,xfs
,btrfs
など)。WSLがサポートしているファイルシステムは、WSL内でcat /proc/filesystems
を実行することで確認できます。
例: \\.\PHYSICALDRIVE1
の1番目のパーティション(ext4形式)をマウントする場合
wsl --mount \\.\PHYSICALDRIVE1 --partition 1 --type ext4
マウントが成功すると、WSLの環境内で自動的に/mnt/wsl/<ディスク名>/
にアクセスできるようになります。
補足:vfat
(WindowsでいうFAT32)もWSLでマウント可能ですが、Windows側で既にマウントされているドライブをWSLでマウントすることはできません。Windows側でマウントされているドライブは、WSLの/mnt/c
や/mnt/d
のように自動的にマウントされています。
暗号化されたパーティションや特殊なケースの場合
直接マウントできない暗号化されたパーティションや、より低レベルでアクセスしたい場合は、まずブロックデバイスとしてマウントし、WSL内で改めてマウントします。
Windowsでマウントされている場合はアンマウントする
もしそのHDDがWindowsで何らかの形でマウントされている場合は、先にWindows側でアンマウントしておいてください。
ブロックデバイスとしてマウントする
管理者権限つきのPowerShellで以下のコマンドを実行します。
wsl --mount <デバイス名> --bare
<デバイス名>
には、もちろん先ほど調べたDeviceIDを指定します。
WSL内で認識されているか確認
WSLを起動し、以下のコマンドでHDDが認識されているか確認します。
sudo fdisk -l
/dev/sdX
のような形で認識されているはずです(X
はa
, b
, c
などのアルファベット)。パーティションが作成されていれば、/dev/sdX1
や/dev/sdX2
のように表示されます。
WSL内でマウントする
例えば、Veracryptで暗号化された/dev/sdX1
パーティションがあり、それがext4でフォーマットされている場合を想定します。事前にWSL内にVeracryptがインストールされている必要がありますが、以下のコマンドでマウントできます。
veracrypt /dev/sdX1 /mnt/yourmountpoint # /mnt/yourmountpointは任意のディレクトリ
これで、WSL内で目的のデータにアクセスできるようになります。
使い終わったら忘れずにアンマウント!
HDDへのアクセスが終わったら、必ずアンマウントしてください。アンマウントせずにWindowsをシャットダウンしたり、いきなりケーブルを抜いたりすると、ファイルシステムが破損する恐れがあります。
直接マウントしていた場合
WSLでファイル操作を行っていないことを確認した上で、管理者権限つきのPowerShellで以下のコマンドを実行します。
wsl --unmount <デバイス名>
ブロックデバイスとしてマウントし、WSL内でさらにマウントしていた場合
WSL内でアンマウントする
例えばVeracryptでマウントしていた場合は、WSL内で以下のコマンドを実行します。
veracrypt -d /mnt/yourmountpoint
PowerShellでアンマウントする
次に、管理者権限つきのPowerShellで以下のコマンドを実行します。
wsl --unmount <デバイス名>
まとめ
WSL環境を構築していれば、WindowsでLinux用外付けHDDを使うのは決して難しくありません。専用ツールをインストールする手間もなく、コマンド一つで手軽にデータにアクセスできるようになります。
もしLinuxで使っていたHDDのデータにアクセスできなくて困っていた方は、ぜひこの方法を試してみてはいかがでしょうか?
本日も最後までお読みいただきありがとうございました。
それでは、よいWSLライフを!
ピンバック: WSL2でUSBデバイスを「完璧に」使う夢、そして現実 - ビューローみかみ