樹莓派4b通過外接ssd硬盤啟動系統失敗的排查和解決

樹莓派4b通過外接ssd硬盤啟動系統失敗,癥狀:

屏幕卡在黑屏或提示

mmc1:Controller never released inhibit bit(s)….

先說如何設置硬盤啟動,後面是解決問題的方法。

想用幾台樹莓派做一些微服務和集群的測試,但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-update

FIRMWARE_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=/dev/mmcblk0 of=/dev/sda bs=4M  

也可以使用讀卡器直接克隆到ssd,自行發揮

然後拔掉sd卡,插上ssd,順利的話,系統可以正常啟動,從此告別sd卡。

但我的設備(奧睿科透明2.5硬盤盒+Samsung SSD)沒法正常啟動,硬盤燈一秒鐘閃爍一次,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文件,添加設備信息

# 首先查看驅動器型號
lsusb

Bus 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

sudo vim /boot/cmdline.txt

在文件的最前面添加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正常啟動了,可以放心折騰了。

起初以為樹莓派ssd啟動和windows進PE系統一樣簡單,草率google了下就以為是電源問題,買了兩次供電設備都沒效果,又嘗試解決延遲usb供電的問題,原來那些文章都已經過時了,官方的文檔和最新的論壇帖子才是正道,因此走了很多彎路,可能因為太冷門,對於硬盤無法啟動樹莓派的內容,國內幾乎搜不到合適的文章,所以在這分享一下,看到的朋友不要在這浪費時間了。

總結:

如果電源燈間歇性閃爍,外接屏幕有閃電符號顯示,啟動的設備標註功耗超過1A,或使用普通硬盤或3.5英寸的硬盤,就需要使用外接硬盤供電。

官方電源說明
//www.raspberrypi.org/documentation/hardware/raspberrypi/power/README.md

排除電源問題後系統還卡在啟動畫面或者系統檢測時間很久,那可能是硬盤設備問題,可以使用上面的解決方案。

參考:
//www.tomshardware.com/how-to/boot-raspberry-pi-4-usb
//www.raspberrypi.org/forums/viewtopic.php?t=303260
//www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md
//github.com/raspberrypi/firmware/issues/1515
//www.raspberrypi.org/forums/viewtopic.php?t=245931
//www.raspberrypi.org/forums/viewtopic.php?t=245348
//www.raspberrypi.org/forums/viewtopic.php?f=28&t=304255