RASPBERRY PI ZERO WをUSBメモリにする(イメージファイルを使用編)

Raspberry Pi Zero WをUSBメモリとして使えるようにする。

言い換えると、Raspberry Pi Zero WでUSB OTGを使い、Mass Storage Gadget (MSG)を起動するということ。

おそらく、Raspberry Pi 4などでも同じことができると思うけど、現時点では試していない。

これには、イメージファイルを使用する方法と、ディスク(SDカード)のパーティションを使用する方法とある。

今回は、イメージファイルを使用する方法編。パーティションを使用する編と重複した内容が含まれる。

USB OTG(On-The-Go)の有効化

通常、Raspberry PiのUSB端子は、Raspberry Piがホストで、接続されたものがデバイスとして働く。これを、逆にして、接続されている方がホストで、Raspberry Piをデバイスとして使えるようにするのが、USB OTG(On-The-Go)

dtoverlay=dwc2

Raspberry Piの/boot/config.txtというファイルに上の一行を追加する。

Raspberry Pi OSの起動時にこのファイルをチェックし、USB OTGが使えるようになる。

ここで一旦Raspberry Piをシャットダウン。

Raspberry PiのUSB端子のうちUSB OTGが使える方、Raspberry Pi Zero WならUSBって書いてある方にケーブルをつなぎ、もう一方をWindows PCに刺して起動する。Raspberry Pi Zero Wならこの接続で共有される電力で十分なので、PWR側に電力を供給する必要はない。

無事起動すると、Windows PCがぴっぴろりん!とUSBの認識がされた音がする。音がすれども、デバイス的には認識は失敗しているはず。なぜなら、USB OTGが有効化されても、デバイス的な設定をまだしてないから。

なにはともあれ、Raspberry Piにログイン。

USBメモリの領域を準備

今回は64GBのSDカードを使用しているので、以下の説明はそれに合わせた記述。適宜サイズに合わせて変更が必要。

exfatをUSBメモリのフォーマットとして使用する場合は、

$ sudo apt install exfat-fuse

で、exfatが使えるようにしておく。

$ dd if=/dev/zero of=/home/pi/usb_storage.img bs=1M count=60000

これで60GB分の空のイメージファイルを作成。これ死ぬほど時間がかかる。

これは環境に依存するのだが、このファイルがrootから読み書きできるようにchmodとかchownする必要があるかもしれない。

次に、イメージファイルのフォーマットだが、ここでフォーマットしなくても、USBメモリをWindows PCに刺してフォーマットしてもよい。

$ mkfs.exfat /home/pi/usb_storage.img

mkfs.exfatはexfatでフォーマットした場合。fat32だと、mkfs.vfat -F 32 /home/pi/usb_storage.img

USBマスストレージとして使えるか実験

$ sudo modprobe g_mass_storage file=/home/pi/usb_storage.img removable=y

とすると、おもむろにWindowsの方でUSBドライブが認識される。

$ sudo modprobe -r g_mass_storage

これで、USBマスストレージが解除される。Windows側では、ぴろりん、とUSBドライブが外れた音が鳴る。

マウントについて

今回作成したイメージファイルをRaspberry Pi側から利用するためにマウントする必要があるのだが、これに関してはややこしいので、別記事で記載する。

modprobe g_mass_storageをRaspberry piの起動時に実行するように設定

いくつかの方法がある。ここでは2通りのやりかたを記載する。

/etc/rc.localを使用

/etc/rc.localに以下の行を追加する。

# for USB MASS Storage
modprobe g_mass_storage file=/home/pi/usb_storage.img removable=y

systemdを使用

systemdのOneShotサービスで起動する。

[Unit]
Description = USB MASS Storage Service
After = local-fs.target

[Service]
ExecStart = /sbin/modprobe g_mass_storage file=/home/pi/usb_storage.img removable=y
Type = oneshot

[Install]
WantedBy = multi-user.target

上記の内容で、/lib/systemd/system/usb_storage.serviceとしてファイルを作り、

$ sudo systemctl enable usb_storage.service

と、サービスとして有効化する。

「RASPBERRY PI ZERO WをUSBメモリにする(イメージファイルを使用編)」への2件のフィードバック

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください