..

OrangePi5 使用 btrfs 文件系统将 armbian 安装到 sata 硬盘

OrangePi5 可以从 TF 卡启动,也可以从 USB 启动,但是没有办法从 sata 扩展卡上面的硬盘启动。因为在 u-boot 中是没有相关扩展卡的驱动。但是 linux 的内核通常都是有相关驱动的。

之前尝试过从 mtd 引导至 ipxe 或者 grub 来试图避免使用 TF 卡来加载内核。但是都遇到了一些问题。不过在树莓派上面的尝试都是成功的。
所以只能退而求其次使用 TF 卡来加载 kernel,然后挂载 sata 硬盘上面的 rootfs。

准备硬件

操作系统

  • 任意 linux 发行版

操作流程

格式化准备的硬盘,这里我们不分区,直接格式化整个设备

root@ubuntu:~$ mkfs.btrfs /dev/sdb

挂载硬盘,并且创建一个 @rootfs 卷作为 / 根目录使用

root@ubuntu:~$ mount -o noatime /dev/sdb /mnt/disk

root@ubuntu:~$ btrfs subvol create /mnt/disk/@rootfs

root@ubuntu:~$ mount -o noatime,subvol=@rootfs /dev/sdb /mnt/rootfs

从 armbian 官网下载镜像

root@ubuntu:~$ Armbian_24.2.1_Orangepi5_jammy_legacy_5.10.160_minimal.img.xz

解压镜像

root@ubuntu:~$ xz -d -k -T0 Armbian_24.2.1_Orangepi5_jammy_legacy_5.10.160_minimal.img.xz

挂载镜像,并且复制根目录所有数据到硬盘

root@ubuntu:~$ losetup -f -P Armbian_24.2.1_Orangepi5_jammy_legacy_5.10.160_minimal.img

root@ubuntu:~$ mount /dev/loop0p1 /mnt/pi

root@ubuntu:~$ rsync -avhS /mnt/pi/ /mnt/rootfs/

将镜像烧录至 TF 卡中。其实我们只需要镜像中的 boot 分区的内容和第一个分区之前 16M 的 u-boot 数据。如果 TF 卡容量小于镜像容量,可以手动建立 boot 分区,将数据复制过来,也将 u-boot 复制过来。这里我们的 TF 卡容量足够,所以直接操作就可以了。

root@ubuntu:~$ dd if=Armbian_24.2.1_Orangepi5_jammy_legacy_5.10.160_minimal.img of=/dev/sdc conv=notrunc

挂载 boot 分区,并且查询分区的 UUID。

root@ubuntu:~$ mount /dev/sdc1 /mnt/boot

root@ubuntu:~$ lsblk -o +UUID
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS UUID
sda           8:0    0  1.8T  0 disk / 8774090a-e24f-4766-9d63-4c2fedba47a0
sdb           8:0    0  7.3T  0 disk /mnt/disk 61fa911d-15b7-42c6-84dd-a8195beb31b4
                                     /mnt/rootfs
sdc           8:0    0  1.9G  0 disk
└─sdc1        8:1    0  256M  0 part /boot       57E4-A400

root@ubuntu:~$                                      

修改 boot 分区中的 rootfs 信息。 将下面的内容加入并替换掉 /mnt/boot/armbianEnv.txt 里面的相关内容。

rootdev=UUID=61fa911d-15b7-42c6-84dd-a8195beb31b4
rootfstype=btrfs
extraargs=rootflags=subvol=@rootfs

最后在修改 rootfs 分区中 /mnt/rootfs/etc/fstab 文件的内容。

UUID=61fa911d-15b7-42c6-84dd-a8195beb31b4 / btrfs defaults,noatime,subvol=@rootfs 0 0
UUID=57E4-A400 /boot/ vfat defaults 0 2

tmpfs /tmp tmpfs defaults,nosuid 0 0

至此相关操作全部完成,umount 掉之前挂在的所有目录。将 TF 卡插入 Pi5 中,并插好 sata 硬盘。上电开机即可。

其它

虽然 TF 卡只做引导使用。但每次启动还是需要依赖这个 TF 卡。有空后面研究一下从 mtd 或者网络来直接引导 sata 硬盘。