gpt4 book ai didi

linux - 如何在设备启动时重置内核?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:42 25 4
gpt4 key购买 nike

如何在设备启动时替换rootfs分区的内容?
我正在使用带有剥离的 debian 版本的 pine64 (1GB),并着手编写一个恢复出厂设置的脚本,该脚本将在设备运行时替换 rootfs 分区中的所有文件?常驻恢复文件可以是 tar 或 img 文件。
我已经尝试了两种方法

  1. 将镜像中的分区添加到设备上的分区。
    sudo dd if=pine-debian.img skip=*rootfs 分区开始* seek=*rootfs 分区开始* of=/dev/mmcblk0
  2. 将压缩后的内容解压到/目录下。
    sudo tar -C/-zxvf pine-debian.tar.gz

两种方法后,系统可以识别任何命令,甚至连 ls 都识别不了。任何有关如何解决此问题的帮助将不胜感激。如何在设备运行时替换fs内容?

最佳答案

理想情况下,您应该有两个分区,每个分区都有一个 rootfs 副本。您可以使用 dd 写入当前未使用的分区,然后更新引导加载程序配置以指向刚刚写入的分区作为根。 swupdate支持这样的双bank场景,但是只原生支持U-Boot;如果您使用不同的引导加载程序,则必须添加一个脚本来执行交换。

如果您真的需要就地覆盖,直接覆盖分区是不可能的,因为该文件系统当前正在使用中。解压也会失败,因为某些文件当前正在使用中 - 特别是 libc。您可以尝试将 --unlink-first 选项添加到 untar 命令,但我不确定这是否有效。

另外两个选项:

  1. 不要覆盖完整的 rootfs,而是使用 Debian 软件包升级。他们有安装前和安装后脚本来确保升级安全。
  2. 交换到一个(临时的、小的)in-RAM 根文件系统来执行升级。这个根文件系统应该只包含 busybox 和执行升级的脚本。您可以终止所有进程,然后在临时根文件系统中执行 pivot_root,或者您可以使用 kexec --initrd=... 启动到内存中的根文件系统。

关于linux - 如何在设备启动时重置内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39874915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com