Raspberry Pi 5にSATA SSDを接続してOS起動してみたログ

Raspberry Pi 5ではついにPCI Expressが利用できるようになりました。

巷ではM.2のSSDを取り付けるのが流行っていますが、私はSATA SSDを接続しOSをSATA SSDから起動してみたので作業ログを残します。

パーツ構成

今回はM.2アダプタと、M.2接続のSATA アダプタの組み合わせで作成します。

重要なポイントは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から読み込むようにします。

流れ

  1. Raspberry Pi OSをmicroSDに書き込む
  2. microSDの内容をSATA SSDに書き込む
  3. /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を書き換え

microSDSATA SSDRaspberry 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が起動します。