如何在设备启动时替换rootfs分区的内容?
我正在使用带有剥离debian版本的pine64(1GB)并且编写了一个工厂重置脚本,该脚本将在设备运行时替换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内容?
答案 0 :(得分:1)
理想情况下,您应该有两个分区,每个分区都有一个rootfs副本。您可以使用dd
编写当前未使用的分区,然后更新引导加载程序配置以指向刚写入的分区作为根。 swupdate
支持这种双库方案,但它只对U-Boot提供原生支持;如果您使用不同的引导加载程序,则必须添加脚本来执行交换。
如果确实需要就地覆盖,则无法直接覆盖分区,因为该文件系统当前正在使用中。 Untarring也会失败,因为某些文件当前正在使用 - 特别是libc。您可以尝试将--unlink-first
选项添加到untar命令中,但我不确定它是否有效。
另外两个选择:
kexec --initrd=...
启动进入内存的根文件系统。