想用几台树莓派做一些微服务和集群的测试,但sd卡作为系统盘一直是树莓派的诟病和性能瓶颈,sd卡寿命短,传输速率慢,查了下资料,发现只要更新2020-09-03或更高版本的Bootloader,Raspberry Pi OS 2020-08-20或更高版本的系统,就可以原生支持从网络或硬盘启动。
如果你的系统早于2020-08-20安装,需要手动更新系统到最新。
sudo apt update sudo apt full-upgrade编辑/etc/default/rpi-eeprom-update,更改为stable模式
sudo vim /etc/default/rpi-eeprom-updateFIRMWARE_RELEASE_STATUS="stable"
更新BOOTLOADER
sudo rpi-eeprom-update -a截止到2021-03-04,最新的BOOTLOADER为
BCM2711 detected
Dedicated VL805 EEPROM detected
Checking for updates in /lib/firmware/raspberrypi/bootloader/stable
Use raspi-config to select either the default-production release or latest update.
BOOTLOADER: up-to-date
CURRENT: 2021年 02月 16日 星期二 13:23:36 UTC (1613481816)
LATEST: 2021年 02月 16日 星期二 13:23:36 UTC (1613481816)
RELEASE: stable
VL805: up-to-date
CURRENT: 000138a1
LATEST: 000138a1
重启
sudo reboot有文章说需要运行sudo raspi-config,设置第六项(Advanced Options)里的Boot Order,选择Usb Boot,但不是必须设置,只要不塞SD卡,系统会自动从USB启动。
以上完成后,可以将原sd卡的系统和文件全部迁移到SSD上,可以用系统自带的SD Card Copier
还可以使用命令
df -h #查看存储设备的名称 #/dev/mmcblk0为sd卡 /dev/mmcblk0为ssd sudo dd if=http://www.likecs.com/dev/mmcblk0 of=http://www.likecs.com/dev/sda bs=4M也可以使用读卡器直接克隆到ssd,自行发挥
然后拔掉sd卡,插上ssd,顺利的话,系统可以正常启动,从此告别sd卡。
但我的设备(奥睿科透明2.5硬盘盒+Samsung SSD)没法正常启动,屏幕卡在黑屏或提示:
mmc1:Controller never released inhibit bit(s)....
硬盘灯一秒钟闪烁一次,ssd硬盘不停读盘,换了一个有源硬盘盒可以顺利启动,以为是电压不足的原因,买了带供电的usb hub尝试后失败,换了带辅助供电的usb3.0硬盘线,但线材没做防倒流设计,直接给树莓派usb口反相供电,绕过了电压过载保护,容易烧坏主板,此方案也失败,查了资料说树莓派usb端口可以提供1.2A的电流,我的ssd功耗才0.9A,没道理供电不足,买了根micro hdmi线材接到显示器并没有出现电压不足的闪电标志,电源灯也没闪烁,排除了供电问题。
官方论坛里查到系统在启动时会延迟USB端口供电,默认为1秒,有人通过修改配置USB_MSD_PWR_OFF_TIME=0可以解决无法启动的问题
# BOOTLOADER在2021-01-11之前的版本可以尝试 sudo -E rpi-eeprom-config --edit但在2021-01-11以后的BOOTLOADER版本中,这个问题已经不存在了。
那就是硬盘盒的问题了,果然官方文档上有描述:
This is especially important with USB SATA adapters which may be supported by the bootloader in mass storage mode but fail if Linux selects USB Attached SCSI - UAS mode.
See this forum thread about UAS and how to add usb-storage.quirks to workaround this issue.
大概意思是,如果硬盘盒厂商没有完全实现UAS协议或者系统内支持UAS设备列表里没有厂商发布的产品ID号,SSD访问速度就会变得奇慢或者无法访问。
需要手动修改/boot/cmdline.txt文件,添加设备信息
# 首先查看驱动器型号 lsusbBus 002 Device 002: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
在文件的最前面添加usb-storage.quirks=152d:0578:u 152d:0578为你通过lsusb命令实际查询设备id号
usb-storage.quirks=152d:0578:u console=serial0,115200 console=tty1 root=PARTUUID=dc77c2e2-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
重启后可以从SSD正常启动了,可以放心折腾了。
进行速度对比测试
# sd卡启动 pi@raspberrypi:~ $ dd if=http://www.likecs.com/dev/zero of=test bs=1M count=1000 记录了1000+0 的读入 记录了1000+0 的写出 1048576000 bytes (1.0 GB, 1000 MiB) copied, 39.5912 s, 26.5 MB/s #ssd启动 pi@raspberrypi:~ $ dd if=http://www.likecs.com/dev/zero of=test bs=1M count=1000 记录了1000+0 的读入 记录了1000+0 的写出 1048576000 bytes (1.0 GB, 1000 MiB) copied, 5.63597 s, 186 MB/s提升效果还是很明显的