25
WSL を使用して Windows で Linux Ext4 パーティションにアクセスする方法 (Raspberry Pi microSD カードの読み取りに最適)

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 を起動します。

管理者としてPowerShellを起動する

(画像提供:Tom's Hardware)

3. PowerShellで「wsl --update」と入力して、 WSLを最新のLinuxカーネルに更新します。すでに最新バージョンがインストールされている場合は、その旨が表示されます。

wsl を更新する

(画像提供:Tom's Hardware)

4. Windows でUbuntu を起動します。

5.以下のコマンドでパッケージを更新およびアップグレードします。-y スイッチを指定すると、新しいパッケージのインストールが自動的に承認されます。

sudo apt-get update sudo apt-get upgrade -y

6. uname -aと入力して、Linuxカーネルのバージョンを確認します。正確なバージョン番号をメモしておいてください。今回の場合は5.15.153.1でした。

カーネルのバージョン番号を取得する

(画像提供:Tom's Hardware)

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のウィンドウを広げて、より広い範囲を表示することをお勧めします。

GUIメニュー

(画像提供:Tom's Hardware)

12.デバイスドライバー -> USBサポートに移動します

13. 「USB 大容量ストレージ サポート」を選択しY を押してその横に * を付けます。

USBマスストレージサポート

(画像提供:Tom's Hardware)

14.保存を求められるまで、画面下部の [終了] (Tab キーを使用) を複数回選択します。

終了を選択

(画像提供:Tom's Hardware)

15.保存するかどうかを尋ねられたら、 「はい」を選択します

はいを選択

(画像提供:Tom's Hardware)

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 をシャットダウンします。

wsl --シャットダウン

(画像提供:Tom's Hardware)

23. Ubuntu を開きます

24. Powershell (管理者として開く) で、 「usbipd list」と入力して、使用可能なすべてのドライブを一覧表示します。 

ドライブを一覧表示する

(画像提供:Tom's Hardware)

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に接続します。

ドライブを接続する

(画像提供:Tom's Hardware)

27. Ubuntuでは、lsblkと入力してドライブの一覧を表示します。すべて正常に動作していれば、フラッシュドライブまたはmicroSDカードが一覧に表示されます。Raspberry PiのmicroSDカードの場合は、2つのパーティションが表示されます。1つ目は/bootパーティションで、これはFAT形式でWindowsでネイティブに読み取り可能ですが、2つ目はext4です。

lsblk

(画像提供:Tom's Hardware)

私たちのシステムでは、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がインストールされている場合は、その名前で表示されます。

Linuxフォルダ

(画像提供:Tom's Hardware)

これで、Windowsエクスプローラーからそのパーティションの読み書きができるようになりました。必要に応じてUbuntuウィンドウを閉じるか、Windowsエクスプローラーの代わりにUbuntuコマンドラインを使用してファイルをコピーすることもできます。

次回、ext4 が保存されたドライブをマウントする際は、PowerShell を使用して手順 23 ~ 31 を実行するだけで Windows エクスプローラーにドライブが表示されるようになります。既にマウント済みの USB ドライブを取り外し、再度差し込むと、少なくとも WSL と PowerShell をシャットダウンしていない限り、引き続き使用できるはずです。