Raspberry Pi 5ではついにPCI Expressが利用できるようになりました。
巷ではM.2のSSDを取り付けるのが流行っていますが、私はSATA SSDを接続しOSをSATA SSDから起動してみたので作業ログを残します。
パーツ構成
今回はM.2アダプタと、M.2接続のSATA アダプタの組み合わせで作成します。
- Raspberry Pi 5 8GB
- Geekbord X1002 M.2 NVMe SSD Shield PCIe Peripheral Board for Raspberry Pi 5
- IOCREST M.2 (PCIe 3.0) to 5 Ports SATA III 6G SSD Adapter with SATAIII Cable support UEFI PCIe Gen3x2 Non-RAID Jmb 585 chip
- 余っていたSATA SSD
- 余っていたmicroSDカード
重要なポイントはSATAアダプタ選びで、使用するOSで利用できる必要があります。
たいていのLinuxディストリビューションでSATAアダプタは使用できるのでは?と思ってしまいますが、それはx86、x64版での話です。
ARM版の各Linuxディストリビューションによって対応有無が異なりました。
まずはRaspberry Pi OSで実績のあるチップを選定します。
今回はJeff Geerling氏がまとめてくれている情報から、Raspberry Piで実績のあるチップJMB 585を搭載した製品を選びました。
OS選定
パーツを調達したら、まずはRaspberry Pi OSでSATA SSDが認識できているか確認してみます。
SATAアダプタと、接続したSATA SSDが認識できていますね。
$ lspci -v 0000:01:00.0 SATA controller: JMicron Technology Corp. JMB58x AHCI SATA controller (prog-if 01 [AHCI 1.0]) Subsystem: JMicron Technology Corp. JMB58x AHCI SATA controller Flags: bus master, fast devsel, latency 0, IRQ 167 Memory at 1b00010000 (32-bit, non-prefetchable) [size=8K] Expansion ROM at 1b00000000 [virtual] [disabled] [size=64K] Capabilities: <access denied> Kernel driver in use: ahci Kernel modules: ahci $ sudo parted /dev/sda GNU Parted 3.5 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA TOSHIBA THNSNH12 (scsi) Disk /dev/sda: 128GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 269MB 268MB primary fat32 boot, lba 2 269MB 128GB 128GB primary ext4 (parted)
希望としてはUbuntuで運用したかったのですが、SATAアダプタは認識するもののSSDが認識されていません。
ARM版のUbuntuではahciドライバが利用できないようです。
# Ubuntu 23.10での結果 $ sudo modprobe ahci modprobe: FATAL: Module ahci not found in directory /lib/modules/6.5.0-1013-raspi
Alma Linux、Rocky Linuxも試してみましたが、SSDを利用することができませんでした。
(ディストリビューションによってはRaspberry Pi 5未対応だった)
SATA SSDからのブート
Raspberry Pi 5とM.2 SSDを使ってOSを起動している例は多いですが、SATAアダプタを利用した場合、直接SATA SSDから起動することができません。
ここはmicroSDカードに/boot
を用意し、それ以外の領域をSATA SSDに用意することでmicroSDから起動しつつ、OS領域をSSDから読み込むようにします。
流れ
- Raspberry Pi OSをmicroSDに書き込む
- microSDの内容をSATA SSDに書き込む
/boot/firmware/cmdline.txt
/etc/fstab
を書き換え
Raspberry Pi OSをmicroSDに書き込む
Raspberry Pi Imagerを使用して、書き込みます。
一度Raspberry Pi 5にmicroSDカードを挿入、起動し、OSパッケージの更新、無線LANなどを設定します。
microSDの内容をSATA SSDに書き込む
microSDの内容を別マシンを使って、SATA SSDに書き込みます。
SATA SSDをUSB変換アダプタを通して別マシンに接続し、dd
でコピーしました。
/boot/firmware/cmdline.txt
/etc/fstab
を書き換え
microSD、SATA SSDをRaspberry Pi 5に接続し、起動します。
この時点ではmicroSDからOSは起動します。
各ディスクのPARTUUIDを確認します。
$ sudo blkid /dev/mmcblk0p1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="50C8-AEAE" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="1ceaeaaa-01" /dev/mmcblk0p2: LABEL="rootfs" UUID="fc7a1f9e-4967-4f41-a1f5-1b5927e6c5f9" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1ceaeaaa-02" /dev/sda2: LABEL="rootfs" UUID="fc7a1f9e-4967-4f41-a1f5-1b5927e6c5f9" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="617a2abd-02" /dev/sda1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="50C8-AEAE" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="617a2abd-01"
/boot/firmware/cmdline.txt
に記載されているマウントポイント/
のPARTUUIDをSATA SSDのものに書き換えます。
$ sudo vim /boot/firmware/cmdline.txt console=serial0,115200 console=tty1 root=PARTUUID=617a2abd-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP
/etc/fstab
に記載されているPARTUUIDも書き換えます。
$ diff -u /etc/fstab_orig /etc/fstab --- /etc/fstab_orig 2024-04-06 22:52:38.820412300 +0900 +++ /etc/fstab 2024-04-06 22:54:23.272284614 +0900 @@ -1,5 +1,11 @@ proc /proc proc defaults 0 0 PARTUUID=1ceaeaaa-01 /boot/firmware vfat defaults 0 2 -PARTUUID=1ceaeaaa-02 / ext4 defaults,noatime 0 1 +PARTUUID=617a2abd-02 / ext4 defaults,noatime 0 1
あとは再起動すると、SSD側の/
を読みだしてRaspberry Pi OSが起動します。