我开发了一个在 Raspbian 操作系统上运行的基于 python 的 GUI 应用程序。停电期间我的 SD 卡经常损坏。我需要经常备份操作系统映像,并在 SD 卡损坏时将其写回。有没有什么解决方案可以让我的 Raspbian 操作系统在没有 SD 卡/Live USB 的情况下运行?
答案1
虽然“从 RAM 运行”很容易,但这并不能解决您的问题。
仅当您关闭电源或取出卡,同时也写入卡。
解决方案:
- 停止向卡写入。
- 在文件系统上启用日志记录。
- 正常关机
shutdown -h now
。 - 重新启动即可正常
shutdown -r now
。
答案2
对于某些型号的 RPi,可以使用 DHCP/BOOTP 和 TFTP(然后很可能是 NFS)通过网络启动 RPi。这需要另一个提供 DHCP/BOOTP、TFTP 和 NFS 服务的永久系统因为 RPi 启动时没有任何内容。这仅适用于以太网,不适用于无线。
现有有关如何针对 RPi 3B 甚至 RPi 4 执行此操作的文档。我不会尝试在这里复制所有详细信息,因为它很长,请参阅下面的链接。
-
RPi3B(不是 RPi 3B+)最初必须“熔断保险丝”才能启用网络启动:
在 Raspberry Pi 进行网络启动之前,需要从 SD 卡启动,并使用配置选项启用 USB 启动模式。这将在 Raspberry Pi SoC 的 OTP(一次性可编程)内存中设置一位启用网络启动。
然后就是配置另一台服务器以提供正确网络启动所需的强制服务(这与向 RPi 以外的其他系统提供网络启动非常相似)。
这是执行此操作的其他文档,其中永久服务器运行 CentOS 而不是 Raspberry OS
RPi4 也可以这样做;它可能需要重新刷新 RPi4 才能更新 PXE 启动代码。这是摘录(必须以各种文件名更新):
sudo apt-get update sudo apt-get upgrade wget https://github.com/raspberrypi/rpi-eeprom/raw/master/firmware/beta/pieeprom-2019-10-16.bin rpi-eeprom-config pieeprom-2019-10-16.bin > bootconf.txt sed -i s/0x1/0x21/g bootconf.txt rpi-eeprom-config --out pieeprom-2019-10-16-netboot.bin --config bootconf.txt pieeprom-2019-10-16.bin sudo rpi-eeprom-update -d -f ./pieeprom-2019-10-16-netboot.bin cat /proc/cpuinfo
并继续再次配置服务器(这次运行 Debian,因此对于 Rasbpberry 操作系统来说可能没问题)。