我们可以从一个安装的 linux 热交换到另一个吗?

Ray*_*ews 5 linux

我在我的机器上有几个单独的 Linux 安装,然后重新启动到任何一个合适的。我想知道是否可以通过执行某些操作(例如,复制 fstab 并列出新安装的分区,然后在不完全重新启动的情况下从一个切换到另一个)mount -a

显然,内核不会改变,但没关系,我希望只改变工作分区。我也很明显地认为这必须在没有任何运行的情况下从命令行完成(如果可能的话)。或者这个想法从一开始就是无效的和纯粹的疯狂?

这样做的原因是我通常在单独的“实验性”安装中尝试彻底的更改(例如在 Debian 中移动到“amd64”内核)。重新启动以启动它当然很好,但是如果我可以在不完全重新启动的情况下跳转到该安装,那就太酷了。您可以认为这只是动态更改根分区,但这可能根本不可能。

是的,这是可能的,正如我在下面了解到的。如果您不需要换出内核本身,请使用“chroot”。如果要模拟完全重启,请使用“kexec”。

Gus*_*uss 6

我不认为这是可能的。

理论上你想要做的是:

  1. 使用 将系统移动到“单一”运行级别init 1,理论上你只有 init 和 bash 运行。
  2. 卸载除 / 之外的所有分区。此时您的系统可能会停止工作,这取决于 /usr 是否在根分区上。
  3. 将其他操作系统的根安装在某处。
  4. pivot_root 将根更改为新分区。
  5. 通过运行init 5(或 2 或任何适当的命令)告诉 init 启动新系统。

问题是pivot_root 只改变当前进程的根分区,这意味着它不会影响init,当你告诉init 启动系统时,它会启动你的旧系统。您需要某种方式来告诉 init 执行 pivot_root,我认为这是不可能的。

哦,让我们不要讨论当您的其他操作系统使用不同的 init 服务时会发生什么(例如,Fedora 使用 systemd 而 Ubuntu 有新贵)。您需要替换内核下的 init 进程(pid 1),这确实是行不通的。

  • @ray 这是一个不同的问题,但这是可行的。查看 kexec。 (2认同)
  • 好吧,编辑 /etc/default/kexec: "LOAD_KEXEC=true",然后再试一次,它工作正常。这正是我正在寻找的,但是我将尝试使用“chroot”并绑定安装。谢谢大家。 (2认同)