chroot 进入操作系统是如何工作的?

chroot 进入操作系统是如何工作的?

我在网上看到过很多例子,当手动生成 initramfs 映像、或者将 grub 安装到分区、或者修复损坏的安装时,您所做的就是从 Live CD chroot 到操作系统。

现在,chroot 的概念本身并不难理解,它只是将 root 更改为我们指定的任何目录,并使用该 root 启动 shell。我们还可以根据需要配置环境变量。

让我困惑的是在执行实际 chroot 之前进行的准备工作,特别是虚拟文件系统的挂载。

拿这个例子来说——:

首先我们挂载/root分区-:

$ mount -t ext4 /dev/sda5 /mnt/ubuntu

然后我们挂载虚拟文件系统-:

$ mount -t proc none /mnt/ubuntu/proc
$ mount -o bind /dev /mnt/ubuntu/dev
$ mount -o bind /sys /mnt/ubuntu/sys

这就是让我困惑的地方。这些虚拟文件系统是LiveCD 的,对吗?他们如何能够与我要 chroot 的操作系统一起工作?它们属于不同的操作系统。

例如在这个回答对于我之前问的一个问题,之所以update-initramfs 需要安装上述命令,是因为它需要有关操作系统的信息,然后才能生成内核映像。那么这里怎么会发生这种情况呢?我正在从 LiveCD 挂载文件系统,而不是从我为其构建内核映像的操作系统挂载文件系统,因此它将使用 LiveCD 的信息而不是目标操作系统的信息。 所以这就像为 LiveCD 生成内核映像一样。怎样才算理想呢? (如果我错了请纠正我)

还有为什么需要它们?为什么要绑定安装它们而不是仅仅安装它们?

在我到目前为止所看到的示例中,通常在执行上述步骤之后,将执行实际的 chroot 命令。

$ chroot /mnt

到目前为止,我还没有找到任何明确的解释来解释我的上述问题。希望有人能用通俗的语言解释一下。

答案1

/proc/sys是正在运行的内核的接口;它们与安装的操作系统并不真正相关。/dev反正都是一样的。

大多数程序都需要这些目录。但您不需要在之前准备它们chroot。您可以chroot进入纯根卷并从那里安装其余部分(就像操作系统启动时一样)。

相关内容