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