替换正在运行的 Linux 根文件系统

替换正在运行的 Linux 根文件系统

我正在尝试想出一种可编写 bash 脚本的方法来替换正在运行的 PC 上的根文件系统。该系统使用带有 ext4 根文件系统和交换分区的 MBR 分区磁盘,不幸的是它不使用 LVM / BTRFS 或任何类似的东西。它正在运行使用 grub / kernel 和 initrd / systemd 的极简 Debian 发行版。

无法对有问题的 PC 进行物理访问 - 它正在运行一些信息亭软件,可以使用专有工具将包含二进制文件和更新 shell 脚本的 tarball 推送到 PC。我的计划是使用此更新系统尝试替换 rootfs。

我的想法基本上可以归结为以下几点:

  • 用自定义版本替换 initrd,该版本不会 switch_root 到真正的 rootfs,而是替换它(可能使用 dd 写入新映像),然后重新启动到新系统

  • (无论如何!)将 switch_root 从实时系统切换到某种临时文件系统,然后执行上述 dd 并重新启动

  • 如上所述,但是 pivot_root 将 init 进程转移到一个新的临时 fs 并执行上述操作,或类似的操作......

我不熟悉pivot_root和switch_root功能并且目前正在尝试 - 我确信这之前已经做过,但我搜索过并没有找到解决方案!

答案1

这个 Stack Exchange 答案. 可接受的答案指向此链接,解释了如何使用 pivot_root 创建临时的内存根文件系统,使您无需重新启动即可更改、调整大小、替换或以任何其他方式处理您的根文件系统。

相关内容