在运行时交换根目录

在运行时交换根目录

我正在开发一个嵌入式Linux系统。通常通过创建 ISO 文件来安装系统,该文件被写入 USB 记忆棒,主板可以从中启动。

为了使安装能够自动完成(例如,过夜),我希望能够在旧系统运行时在板上进行安装。

我的安装分为两部分:一个包含 busybox 和安装脚本的 initrd 文件,以及一个包含要安装的根文件系统其余部分的 .tar.gz 存档。

  1. 引导加载程序加载内核并将其指向 initrd,然后引导内核。
  2. initrd 安装脚本会挂载目标驱动器 /dev/sda,对其进行格式化,安装引导加载程序,最后从 .tar.gz 和 initrd 复制根文件系统。

现在我想

  1. 将 install.iso 从主机复制到目标设备。 (没问题)
  2. 执行上述安装步骤。

我的问题是我不知道应该如何用新系统替换当前正在运行的系统。我假设当前安装的根 (/) 必须卸载并由 initrd 替换。但我似乎不知道如何!

答案1

我可以想出不同的方法来完成你想要的事情。所有这些都带有一定程度的风险和难度。主要风险是,如果安装出错/中断,您最终将得到一个需要手动安装的无法启动的系统。

我的主要想法(这取决于您的引导加载程序和类似的)是完全使用您现在拥有的过程。基本上将新的安装映像复制到永久保留在计算机中的 USB 记忆棒上。然后重新启动并让它启动并正常安装。

它依赖于以下

  1. 免提安装。我假设你有这个,否则一夜之间重新安装不会有问题。
  2. 您的引导加载程序能够自动选择 USB 或本地文件系统引导(或在重新引导之前通过应用程序级命令)
  3. 最后,您需要将引导加载程序配置为从本地板引导而不是 USB 设备,或者只是擦除 USB 设备的内容/使其无法引导,以便引导加载程序崩溃

另一种方法是在您的主板上有两个引导/根分区,然后安装到您不使用的分区中,并在重新引导结束时强制引导加载程序引导到另一个分区中。您可以使用 chroot 环境强制安装程序认为它是从头开始启动的。不过,这可能是您环境中的一个重大变化,而且不会是一个快速的胜利。

答案2

您是否尝试过先安装 initrd 然后安装 hub_root ?看来你想做的事。

相关内容