如何在设备启动时替换rootfs分区的内容?
我正在使用Pine64(1GB)与剥离的Debian版本,并在写一个工厂重置脚本,将取代所有文件在rootfs分区,而设备运行?常驻还原文件可以是tar或img文件。
我已经试过两种方法了
将分区从映像添加到设备上的分区。sudo dd if=pine-debian.img skip=*start of rootfs partition* seek=*start of rootfs partition* of=/dev/mmcblk0
将压缩内容解压缩到/目录。sudo tar -C / -zxvf pine-debian.tar.gz
经过这两种方法,系统可以识别任何命令,甚至ls。关于如何解决这个问题,我们将不胜感激。如何在设备运行时替换fs内容?
最佳答案
理想情况下,应该有两个分区,每个分区都有rootfs的副本。您可以编写当前未与dd
一起使用的分区,然后更新引导加载程序配置,将刚刚编写的分区指向根分区。swupdate
支持这样的双银行方案,但它只支持u-boot;如果使用不同的引导加载程序,则必须添加脚本来执行交换。
如果确实需要就地覆盖,则无法直接覆盖分区,因为该文件系统当前正在使用中。由于某些文件(特别是libc)当前正在使用,取消绑定也将失败。您可以尝试将--unlink-first
选项添加到untar命令,但我不确定这是否有效。
其他两种选择:
不要覆盖完整的rootfs,而是使用debian包升级。他们有安装前和安装后的脚本来保证升级的安全性。
交换到ram根文件系统中的(临时的,小的)来执行升级。这个根文件系统应该只包含busybox和执行升级的脚本。您可以杀死所有进程,然后在临时rootfs中创建一个pivot\u根,或者使用kexec --initrd=...
引导到in-ram根文件系统中。
关于linux - 设备启动时如何重置内核?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39874915/