Linux 未附加的 chroot 或目录?

Linux 未附加的 chroot 或目录?

是否可以 chroot 或以其他方式创建一个未链接的(在主根文件系统中)目录?据我了解,内核会自动删除文件系统中没有链接的任何文件/文件夹,但有没有办法拥有第二个根目录?

答案1

是的,而且您很可能已经拥有其中的几个。请记住,您可以在不同位置安装多个独立的文件系统 - 并且每个文件系统都有自己的“根”。

例如,如果在 处安装了单独的“数据”分区/mnt/data,则该目录实际上是文件系统根目录,没有..指向其上方的目录。(这同样适用于内部文件系统,例如 /sys 或 /dev。)

在 Linux 上,VFS 层(即“虚拟文件系统”)使此工作正常进行。它允许在 处访问根 1,/在 处访问根 2 ,并创建链接到 的/mnt/data假象。/mnt/data/../mnt


(同样在 Linux 上,VFS 还有一些其他有趣的功能,通常用于/。例如,当内核启动时,/会附加到一个空的“tmpfs”文件系统,其中 initramfs 被解压。最终,主根文件系统会挂载在某个位置/new_root,并且搬去/使用特殊的pivot_root或更通用的mount --move。当然,您已经提到了chroot

换句话说,VFS根目录不一定生来如此。

可以同时拥有多个 VFS 根 - 不仅可以通过 chroot,还可以使用挂载命名空间,其中不同的进程可以完全看到不同的 VFS 挂载;这由 Docker 等“容器”使用。)


但是,文件系统根目录没有链接是不正确的。它只是没有来自多于,但它很容易有来自以下– 在常规子目录(例如 /bin)中.. 一个真实的链接,因此/会有来自/bin/../etc/..等等的链接。

(有趣的是,这就是为什么您可以重命名只读目录但不能将它们移动到其他地方,因为后者需要写入目录以更新其..链接。)

相关内容