ToC
树莓派 4b 最近发售了, 想看看各方面准确参数, 查到 I/O 速度时看到这篇颇为详细的评测, 里面提到虽然树莓派 4b 也还未能直接完全从 SSD/U 盘启动, 但可以通过修改类似”引导文件”的方法指定系统根目录(即是 /
目录)到外置储存.
评测结果显示, 即使对于 3b+, 用 SSD 做系统盘也要比鹌鹑的 TF 卡快上约 2~4 倍. 正好有个神船 Z7M-KP5GZ 上拆下来的闲置群联 OEM 128G SSD, 虽然 3b+ USB 口实际最高传输速度只有约 25MB/s, 但水桶中最短的木板始终是 TF 卡, 而且现在转移了, 以后升级 4b 也能插上稍微改改就用, 所以感觉还是很值得一搞的, 于是开始动手.
题外话, 至于用 U 盘做系统盘, 评测结论是, 慢得要死, 别搞.
具体步骤直接一步步跟着他的教程走就好, 这里只提一些教程中遗漏的点, 和我踩到的坑.
再次提醒: 如上文提到, 这方法并不能让系统完全脱离 TF 卡启动.
不过反正空出来的 TF 卡空间挂载一下也能继续用嘛.
准备 SSD 阶段
无
转移文件阶段
这句的 rsync 参数可以加上 hP
来显示进度, 毕竟要复制好一会儿, 有个进度比较有底.
sudo rsync -avx / /media/newdrive
最后变成:
sudo rsync -avxhP / /media/newdrive
修改启动参数阶段
这句
- Paste the following text at the end of the first (and likely only) line of cmdline.txt.
root=/dev/sda1 rootfstype=ext4 rootwait
不要粘贴, 粘贴了会重复, 直接修改已经存在的 root=
值就好了.
稍微注意下 rootfstype
类型要跟 SSD 的实际文件系统类型对上, 不过如果跟着该文前面步骤的话, 就已经将整个 SSD 格式化成 ext4 了.
同时, root=
的值写成内核名称 /dev/sdXY
也是不太稳的做法, 随着外置设备的插拔, 这里 X
和 Y
的值很可能发生变化, 比较稳应该是用 LABEL
和 PARTUUID
来定位分区. (坑的是树莓派官方文档都没有介绍 root=
的额外写法.)
用 LABEL
先看看 SSD 上系统所在的分区内核名称.
sudo fdisk -l
这里假设分区内核名称是 /dev/sda1
.
给分区加个 LABEL.
sudo e2label /dev/sda1 ssdsys
最后在 /boot/cmdline.txt
写上
root=LABEL=ssdsys
用 PARTUUID
用 lsblk
根据分区内核名称看 PARTUUID.
sudo lsblk -f
复制粘贴进 /boot/cmdline.txt
.
root=PARTUUID=aaecbf2a-35e2-4b27-8b56-a8f5f3xxxxxx
修改 fstab
那篇教程让人改完 /boot/cmdline.txt
就算完了, 但这里明显还应该修改复制之后文件系统的 /etc/fstab
, 因为此时这个 fstab
还会跑去挂载默认的 LABEL=writable
为系统根目录. 不改的话除了会造成非常让人混乱的挂载结构, 还会导致实际上迁移不成功.
首先在当前系统 /mnt
下新建个目录准备挂载复制后的文件系统. 这里假设分区内核名称和 UUID 与上文保持一致.
sudo mkdir /mnt/ssdfs
挂载分区.
sudo mount /dev/sda1 /mnt/ssdfs
改复制后系统的 fstab. (这里假设你已经装了 vim.)
sudo vim /mnt/ssdfs/etc/fstab
如果之前没改过什么的话, 打开后大概会是这样子.
LABEL=writable / ext4 defaults,noatime 0 0 LABEL=system-boot /boot/firmware vfat defaults 0 1
改完后.
LABEL=ssdsys / ext4 defaults,noatime 0 0 LABEL=system-boot /boot/firmware vfat defaults 0 1
演示起见, 加上 UUID 写法.
UUID=aaecbf2a-35e2-4b27-8b56-a8f5f3xxxxxx / ext4 defaults,noatime 0 0 LABEL=system-boot /boot/firmware vfat defaults 0 1
想的话也可以把现在的 TF 卡分区挂载回来, 这个随意. 比如挂载去 /mnt/tffs
(自行新建目录).
LABEL=ssdsys / ext4 defaults,noatime 0 0 LABEL=system-boot /boot/firmware vfat defaults 0 1 LABEL=writable /mnt/tffs ext4 defaults,noatime 0 0
最后保存, 重启 sudo reboot
, 完事.
觉得 TF 卡上旧系统碍事的可以参考 ArchWiki 的 Full system backup with tar 做个压缩备份扔一边后删掉.
参考链接
How to Run Raspberry Pi 4 or 3 Off an SSD or Flash Drive
本作品采用 CC BY-NC 4.0 进行许可。地址: https://d4v.is/raspberrypi-3bp-external-ssd-as-system-root/243/ 转载请注明。