LinuxとWindowsの両方を使っている方なら、ある大きな不満点に気付くでしょう。それは、WindowsがLinuxパーティション(通常はext4またはext3ファイル形式)を読み取れないことです。ext4でフォーマットされたパーティションを持つ外付けドライブやmicroSDカードをWindows PCに接続しても、OSはそのパーティションにドライブレターを割り当てず、ファイルやフォルダも表示しません。
ext4 / ext3 のサポート不足は、Raspberry Pi ファンにとって特に大きな問題です。microSD カードまたは外付け SSD に Raspberry Pi OS をインストールしてブートディスクとして使用すると、ドライブには 2 つのパーティションが作成されます。1 つは FAT32 で Windows に表示される小さなブートパーティション、もう 1 つは ext4 ですべてのデータとアプリが格納される大きなパーティションです。
必要なもの: Windows で Linux パーティションにアクセスする
- WSL2 (Windows Subsystem for Linux) のインストール (WSL2 のインストール方法)
- WSL2 にインストールされたUbuntuまたはその他の Linux フレーバーは、こちらから入手できます。
- PowerShell 7以降。こちらから入手できます。
- USBカードリーダー付きmicroSDカードまたはext4パーティション付きUSBフラッシュドライブ
WindowsでLinux Ext4パーティションを読み書きする方法
1. usbipd をダウンロードしてインストールします。最新リリースは Github から入手するか、PowerShell から「winget install usbipd」と入力してインストールできます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
2.管理者としてPowershell 7 を起動します。
3. PowerShellで「wsl --update」と入力して、 WSLを最新のLinuxカーネルに更新します。すでに最新バージョンがインストールされている場合は、その旨が表示されます。
4. Windows でUbuntu を起動します。
5.以下のコマンドでパッケージを更新およびアップグレードします。-y スイッチを指定すると、新しいパッケージのインストールが自動的に承認されます。
sudo apt-get update sudo apt-get upgrade -y
6. uname -aと入力して、Linuxカーネルのバージョンを確認します。正確なバージョン番号をメモしておいてください。今回の場合は5.15.153.1でした。
7. VER という環境変数にバージョン番号を割り当てます。
VER=5.15.153.1
8.このコマンドで必要なパッケージをインストールします。-y スイッチを指定すると、必要なパッケージのインストールが自動的に承認されます。
sudo apt install -y build-essential flex bison libgtk2.0-dev libelf-dev libncurses-dev autoconf libudev-dev libtool zip unzip v4l-utils libssl-dev python3-pip cmake git iputils-ping net-tools dwarves usbutils
9. Github からカーネル ソースをクローンし、次のコマンドでそのディレクトリに変更します。
sudo git clone -b linux-msft-wsl-${VER} https://github.com/microsoft/WSL2-Linux-Kernel.git ${VER}-microsoft-standard && cd ${VER}-microsoft-standard
カーネルソースのダウンロードには数分かかることにご注意ください。ダウンロードが完了すると、新しく作成されたディレクトリ(例:5.15.153.1-microsoft-standard)が表示されます。
10. config.gz ファイルを現在のディレクトリにコピーし、ファイル名 .config に解凍します。
sudo cp /proc/config.gz config.gz && sudo gunzip config.gz && sudo mv config .config
11. sudo make menuconfigと入力して、モジュール メニューを開きます。
sudo make menuconfig
GUIメニューが表示されます。Ubuntuのウィンドウを広げて、より広い範囲を表示することをお勧めします。
12.デバイスドライバー -> USBサポートに移動します
13. 「USB 大容量ストレージ サポート」を選択し、Y を押してその横に * を付けます。
14.保存を求められるまで、画面下部の [終了] (Tab キーを使用) を複数回選択します。
15.保存するかどうかを尋ねられたら、 「はい」を選択します。
16.以下のmakeコマンドを順番に入力します。この処理には数分かかります。
sudo make -j$(nproc)
sudo make modules_install -j$(nproc)
sudo make install -j$(nproc)
17. vmlinuxファイルをWindowsのユーザーフォルダにコピーします。以下の例の[USERNAME]をWindowsのユーザーフォルダに置き換えてください。例えば、私のアカウントは「avram」または/mnt/c/users/avramです。
sudo cp -rf vmlinux /mnt/c/users/[USERNAME]
18. Windows ユーザー ディレクトリにディレクトリを変更します。
cd /mnt/c/users/[USERNAME]
19.そのディレクトリで.wslconfig というテキストファイルを開くか作成します。nano コマンドを使ってUbuntu内からファイルを編集します。
sudo nano .wslconfig
20. .wslconfig ファイルに以下のテキストを入力して保存します。[USERNAME] をユーザー名に一致する正しいフォルダ名に置き換えてください。私の場合は C:\\users\\avram\\vmlinux でした。
[wsl2]
kernel=C:\\users\\[USERNAME]\\vmlinux
21. Ubuntuを閉じます。
22. PowerShell で wsl --shutdownと入力してwsl をシャットダウンします。
23. Ubuntu を開きます。
24. Powershell (管理者として開く) で、 「usbipd list」と入力して、使用可能なすべてのドライブを一覧表示します。
USBマスストレージデバイスのBUSID番号をメモしておいてください。これはおそらくマウントしたいUSBディスクです。今回の場合、IDは1-2でした。
25. usbipd bind --busid=[BUSID]と入力してドライブをバインドします。[BUSID] はリスト上の実際のIDに置き換えてください。今回の場合はusbipd bind --busid=1-2 です。
26. usbipd attach --wsl --busid=[BUSID]と入力して、ドライブをwslに接続します。
27. Ubuntuでは、lsblkと入力してドライブの一覧を表示します。すべて正常に動作していれば、フラッシュドライブまたはmicroSDカードが一覧に表示されます。Raspberry PiのmicroSDカードの場合は、2つのパーティションが表示されます。1つ目は/bootパーティションで、これはFAT形式でWindowsでネイティブに読み取り可能ですが、2つ目はext4です。
私たちのシステムでは、microSD カード上のパーティションは sdd1 と sdd2 として割り当てられました。
28. Ubuntuで、mkdirを使ってパーティションをマウントするためのフォルダを作成し、/mntディレクトリの下に配置します。例えば、/mnt/raspiを作成しましたが、/mntディレクトリ以下であれば、フォルダ名は何でも構いません。
sudo mkdir /mnt/raspi
29. mountコマンドを使って、作成したフォルダにパーティションをマウントします。[PARTITION]は実際のパーティション名(例:sdd2)、[FOLDER]は作成したフォルダ名に置き換えてください。今回の場合は、sudo mount /dev/sdd2 /mnt/raspiです。
sudo mount /dev/[PARTITION] /mnt/[FOLDER]
30. chmod 777 を使用してパーティションを書き込み可能にします。今回の場合はsudo chmod 777 /mnt/raspiです。chmod 777 コマンドは、パーティションをすべてのユーザーが読み書きできるようにします。通常、これはセキュリティ上好ましくない方法ですが、今回の場合は安全な環境で作業していないため、実行可能です。
sudo chmod 777 /mnt/[FOLDER]
31. Windowsエクスプローラーでフォルダを見つけます。「Linux」->「Ubuntu」->「mnt」の下にあるはずです。特定のバージョンのUbuntu(この場合は24.04 LTS)がインストールされている場合は、「Ubuntu」ではなくその名前で表示されます。WSL2に別のバージョンのLinuxがインストールされている場合は、その名前で表示されます。
これで、Windowsエクスプローラーからそのパーティションの読み書きができるようになりました。必要に応じてUbuntuウィンドウを閉じるか、Windowsエクスプローラーの代わりにUbuntuコマンドラインを使用してファイルをコピーすることもできます。
次回、ext4 が保存されたドライブをマウントする際は、PowerShell を使用して手順 23 ~ 31 を実行するだけで Windows エクスプローラーにドライブが表示されるようになります。既にマウント済みの USB ドライブを取り外し、再度差し込むと、少なくとも WSL と PowerShell をシャットダウンしていない限り、引き続き使用できるはずです。