树莓派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

树莓派4b通过外接ssd硬盘启动系统失败的排查和解决的更多相关文章

  1. SSD硬盘安装系统后要做的事

    1***cmd>fsutil behavior query DisableDeleteNotify 0如果返回值是0,则代表TRIM处于开启状态:反之如果返回值是1,则代表TRIM处于关闭状态2 ...

  2. linux系统故障分析与排查

    在处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键.熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点.“对 ...

  3. WinCE启动失败的原因与解决办法分析

    本文通过一个真实的嵌入式项目进行说明.文中的嵌入式系统用的是ARM处理器+WinCE平台,项目的目的是要把WinCE平台从旧版本移植到WinCE6.0平台上.但结果是这个WinCE系统在启动的时候经常 ...

  4. 换SSD硬盘,重装系统,一阵子忙乱

    许久没重装过系统了,低声下气地问老板要了一块SSD硬盘,不马上安装上手痒得难受,但年底这个时候重装系统绝对忙乱,差点耽误了一份申请表和一份培训记录表.   SSD安装:先从网上找相关贴子,最主要的一个 ...

  5. [Mac] Mac book pro互换SSD硬盘、生产启动U菜、TimeMachine恢复 小记

    Mac book pro 硬盘故障.互换SSD硬盘.启动U磁盘生产 小记 2012新年买Mbp了.尽管各种功能都能用,但常常频繁的出现鼠标风火轮,已经下好的电影在本地播放时都会隔个几分钟卡一下. 拿到 ...

  6. WinPE无法识别NVMe SSD硬盘,如何重装系统

    (源自网络出处不详) 抽风,diy一台新机器,下载的win10系统安装时出现如题所示的问题,开始以为是主板的问题设置u盘启动也不行,后来在某个群里有人说是系统版本问题,无奈重新做了启动优盘(用的17年 ...

  7. 树莓派4B安装Raspbian系统及配置

    2019/11/11, 树莓派4B, Raspbian Buster 摘要:给树莓派4B安装系统及基础配置 树莓派实验室参考文档 准备工具 树莓派4B硬件 SD卡格式化工具 SD Formatter ...

  8. Raspberry Pi:树莓派开发板配置USB启动系统

    准备材料 树莓派4B U盘 TF卡 树莓派基础镜像2020-08-20稳定版(这个系统是必须的并拷录在TF卡) Kali树莓派系统(这个是我想要学习的系统,大家可以准备自己的系统,拷录在U盘的) SD ...

  9. 请详细描述(以硬盘启动)Linux系统从打开主机电源到进入登录界面整个过程的流程。

    1. 开机进行BIOS(BIOS(Basic Input / Output System)自检测系统外围硬件设备如CPU.内存.IO.显卡.鼠标键盘等.根据BIOS中设置的系统启动顺序搜索用于启动系统 ...

随机推荐

  1. 【poj 1988】Cube Stacking(图论--带权并查集)

    题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...

  2. Poj-3922 A simple stone game(k倍动态减法)

    题意: 游戏是这样的:两个玩家以一堆n个石头开始游戏.他们轮流从石堆里取石头,每次至少取一块.先走的人第一步最多可以拿n-1块石头.从那时起,一个玩家最多可以拿k倍于他的对手上次拿的石头.例如,如果一 ...

  3. GDKOI2021 爆炸记

    @ 目录 GDKOI2021 爆炸记 前言 普及(Day 1~3) Day one 比赛 赛后聊天 下午讲题 下午讲课 晚上 Day two 比赛 赛后聊天 下午讲题 下午讲课 晚上 Day thre ...

  4. python 迭代器 iter多次消费

    问题 Python 中的迭代器是我们经常使用的迭代工具, 但其只能消费一次,再次消费便会出现 StopIteration 报错. 解决方案 封装了一个类,当迭代器使用完后再次初始化. 代码 class ...

  5. Cobbler自定义标题及菜单密码

    sha1pass mypassword || openssl passwd -1 -salt sXiKzkus mypassword $1$sXiKzkus$x12Z3ZaiC34GhceLH5LXw ...

  6. Chapter Zero 0.2.2 内存

    目录 内存 内存的多通道设计 DRAM 和 SRAM 只读存储器(ROM) RAM.ROM以及硬盘的区别(转自百度) 内存 CPU的数据都是来自主存储器(main memory),个人计算机的主寄存器 ...

  7. C - C工程编译那些事【configure-make || cmake-make】

    一.cofigure是怎么生成的,我们又是怎么使用的 configure和make install背后的故事: https://azyet.github.io/2015/06/20/configure ...

  8. leetcode28 strstr kmp bm sunday

    字符串匹配有KMP,BM,SUNDAY算法. 可见(https://leetcode-cn.com/problems/implement-strstr/solution/c5chong-jie-fa- ...

  9. UML类图设计神器 AmaterasUML 的配置及使用

    最近写论文需要用到UML类图,但是自己画又太复杂,干脆找了个插件,是Eclipse的,也有IDEA的,在这里我简单说下Eclipse的插件AmaterasUML 的配置与使用吧. 点击这里下载Amat ...

  10. filter_var 函数()绕过执行命令

    escape 过滤器来过滤link,而实际上这里的 escape 过滤器,是用PHP内置函数 htmlspecialchars 来实现的 htmlspecialchars 函数定义如下: htmlsp ...