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

幻者發表於2021-03-04

樹莓派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英寸的硬碟,就需要使用外接硬碟供電。

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

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

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

相關文章