我有一个使用运行 Raspberry Pi OS 的 Raspberry Pi Model 4B(4GB RAM)的应用程序。最初,我将 OS 映像刷入 SD 卡(并将其也用于存储),但我想要更快的读/写性能,因此我切换到从 USB 闪存驱动器启动(并将其也用于存储)。我的应用程序运行很长时间,有时一次运行几天,并且每秒多次写入多个 CSV 文件。然而,运行此应用程序几个月后,USB 闪存驱动器似乎开始出现故障。在过去几周内,我在几次不同的场合都遇到了类似的启动错误:

(initramfs) usb 2-1: device not accepting address 4, error -71
(initramfs) usb 2-1: device not accepting address 5, error -71
(initramfs) usb 2-1: device not accepting address 6, error -71
(initramfs) usb usb2-port1: unable to enumerate USB device

这里有什么好的解决方案?显然,我需要更换这个闪存驱动器,但如果我用另一个相同的闪存驱动器更换它,那么我很可能在一两个月内遇到同样的问题。无论我选择哪种存储形式,我都希望它能持续数年而不是数周或数月。看起来 USB 闪存驱动器、SD 卡,甚至板载 eMMC 存储(用于 Pi CM4 板)都存在不支持大量读/写操作(尤其是非连续操作)的问题。

我能否获得带有 USB 适配器的 SSD 并将其直接连接到我的 Pi?是否可以从 SSD(而不是 SD 卡或 USB 闪存驱动器)启动?或者我需要从 SD 卡启动并将文件系统放在 SSD 上?

另外,是否可以对我当前的系统进行一些调整,以改善或延长 USB 闪存驱动器的使用寿命?例如更改操作系统日志详细程度或写入周期延迟等?

我非常感谢任何帮助或见解!

4

  • 1
    看看这个:


    – 

  • 2
    USB 棒大多使用低质量闪存,并且它们使用的磨损均衡程度未知。最好使用真正的 SSD。最好的方法是切换到 RasPi 5 + M.2 Hat 模块 + 常见的 M2 PciExpress SSD。


    – 

  • 2
    您是否使用了全部 4GB 的 RAM?您是否可以将程序保存到tmpfsRAM 磁盘,然后/tmp每天同步所需的内容?


    – 

  • 1
    同意@Mokubai。当您的应用程序崩溃或 pi 断电时,您的数据中无论如何都会出现空白,因此即使您再浪费几分钟也无所谓。如果您可以更改应用程序以在 RAM 中收集 csv 数据,并每 5 或 10 分钟将其刷新到 CSV 文件中,您将减少对存储的写入并大幅减少磨损,而无需添加 SSD 接口 + SSD。


    – 


最佳答案
2

这里有什么好的解决方案?

嗯,最可靠和最强大的解决方案是购买一台 Pi5,为其购买一个 M.2 HAT 模块,并获得一个 NVMe 驱动器。

您的下一个最佳选择是 USB 3 转 NVMe 适配器或 USB 3 转 SATA 适配器,以及适合搭配使用的存储设备。

不幸的现实是,USB 本来就不适合用作存储,而闪存驱动器往往会加剧这个问题,因为它们通常具有廉价的闪存,并且不能很好地优化其使用寿命(是的,即使是昂贵的闪存驱动器)。

是否可以从 SSD(不是 SD 卡或 USB 闪存驱动器)启动

如果您可以从 USB 闪存驱动器启动,那么您也可以从任何其他 USB 大容量存储设备启动。¹

但是,我主张将根文件系统和固件分区放在 SD 卡上,只将应用程序数据的文件系统放在 USB 设备上。经过充分设置,这既可以确保您的系统在 USB 设备发生灾难性故障时仍可启动,又可以让您从 USB 连接的小问题中恢复过来。

另外,是否可以对我当前的系统进行一些调整,以改善或延长 USB 闪存驱动器的使用寿命?例如更改操作系统日志详细程度或写入周期延迟等?

最主要的是将 journald 配置为仅记录到内存中,然后安装常规 syslog 守护程序来处理持久日志。这意味着您将失去 journald 的持久日志功能,但 journald 可能是除应用程序之外阻止文件系统重写的最大因素。


1:至少可能如此。USB 大容量存储类实际上非常复杂,而且有些 USB MSC 设备的子类型一开始就得不到很好的支持,而且 Pi 固件可能不支持大多数子类型。子类型 1(大多数廉价闪存驱动器)和 6(USB 连接 SCSI,以及一些其他类型的设备)都应该可以工作,它们占您见过的绝大多数设备,但您不太可能使用子类型 3(用于 USB 磁带驱动器,尽管听起来很疯狂,但实际上确实存在)进行启动。

我能否获得一个带有 USB 适配器的 SSD 并将其直接连接到我的 Pi ?

是的,你可以。或者任何预制的 USB 外部 SSD 驱动器,甚至是旧 HDD(速度较慢)。

是否可以从 SSD(不是 SD 卡或 USB 闪存驱动器)启动?

如果您可以从 USB 闪存驱动器启动,那么您也可以从任何其他 USB 大容量存储设备启动。

或者我需要从 SD 卡启动并将文件系统放在 SSD 上?

您不需要这样做,但如果您愿意,您可以这样做。毋庸置疑,这样的设置需要对启动过程、分区和引导加载程序安装要求有扎实的了解。另一方面,您可以应用已经使用 USB 记忆棒成功测试过的相同过程。

1

  • 1
    我目前正在使用 USB-3 外部机箱中的 120 GB SSD 启动 Raspberry Pi 4。我只需将 32 GB SD 卡映像刷入 SSD。我可能会决定稍后扩展分区,但现在它运行良好。


    –