chroot 究竟是什么?它类似于同时双启动吗?

mat*_*975 3 chroot embedded-system

有人建议我使用 chroot 可能会解决我构建必须在嵌入式设备上运行的应用程序的问题。我从这个描述中推断出它在某种程度上类似于在我的机器上本地创建嵌入式环境,然后我可以使用它从我的桌面开发机器上进行开发。这是查看功能的正确方法还是我完全误解了?

为了了解它是如何工作的,我阅读了这个https://wiki.ubuntu.com/DebootstrapChroot,我将尝试在我的机器上为旧的 Ubuntu 版本制作一个 chroot。然而,由于我是一个完全的 linux 新手,我有点担心,因为我不完全知道我在做什么,无论如何我最终会得到一个无法使用的系统??这是新手应该尝试的东西吗???

Ali*_*ton 7

我觉得没有人给出完整的技术解释,所以就这样吧。

要了解 chroot,您首先必须了解内核(GNU/Linux 中的 Linux)和用户空间(GNU/Linux 中的 GNU,或者其他可能的东西,例如 busybox)之间的划分。

内核控制计算机中的所有硬件。它还提供用于文件访问、网络等的 API,并控制正在运行的软件程序。这一切都形成了计算机的抽象,通过应用程序编程接口 (API) 呈现。不过,它自己根本不会做任何事情,除了可能启动到黑屏。甚至没有 shell 提示。

用户空间就是一切。您在计算机上运行的所有软件。实际上,内核只直接运行一个用户空间程序 init,然后它负责启动其他一切,如 shell 和桌面环境。用户空间还包括库,这些库通常以 libc 开头,所有其他库都在此基础上构建。

因此,考虑到这一点,chroot 的概念很简单。它只是将 unix 文件系统的根目录更改为不同的目录,仅用于您选择在此上下文中运行的任何命令。这通常是一个可以启动其他软件的外壳,就像内核只直接启动一个命令一样。这个新的上下文可以有一组不同的用户空间程序和库。同一个内核运行两组软件,因此两个系统都可以使用所有硬件资源,但是(除非存在安全漏洞)嵌套的 chroot 无法访问主文件系统中的任何内容。它有自己的/etc 版本用于配置,它有自己的/lib 用于库,还有它自己的/bin、/usr/bin 用于程序。

您应该知道硬件设备是共享的。因此,与虚拟机不同,如果您从 chroot 内部格式化 /dev/sda,您将格式化您的真实硬盘。这是因为 /dev 中的设备节点是直接内核接口,因此它们在 chroot 内部和外部的含义相同。

另一件事:可以通过绑定安装让 chroot 访问外部文件系统如果您使用 chroot 构建工具,它可能“有帮助地”从 chroot 内的主系统挂载 /home。这不是副本,而是相同的文件系统,在这种情况下,您在 chroot 中所做的任何更改都将在原始文件上执行。因此,我建议您手动构建 chroot,直到您对它们的工作方式感到满意为止。

除了这两个潜在问题之外,chroot 不会出错,因为它主要是一个独立的系统,只有在您要求时才会启动。