/proc/pid/mountinfo 文件中 root 列的含义是什么?
根据手册,它说
(4) root: the pathname of the directory in the filesystem which forms the root of this mount.
文档中没有说明这一点。有人能解释一下吗?可以举个例子吗?
答案1
Linux并不总是挂载文件系统的根目录(例如,mount /dev/sda3 /mnt
通常将 sda3 文件系统的“/”附加到 /mnt),而是只允许挂载子路径(子目录甚至文件)。
虽然没有直接的方法可以对新安装的程序执行此操作,但最常见的用法是绑定挂载。例如,如果您在 /mnt/a 上安装了某些东西,则执行此操作mount --bind /mnt/a/foo /mnt/b
将复制该安装并将其设置/foo
为 /mnt/b 安装的根。
如果 /mnt/a 上的原始设备例如是 /dev/sda3,则“root”列将显示/
原始 /mnt/a 挂载,但/foo
对于 /mnt/b 挂载,并findmnt
显示/dev/sda3[/foo]
为挂载在 /mnt/b 上。
(请注意,绑定挂载不仅限于目录 - 虽然/mnt/a/foo
在此示例中是目录,但它也可以是文件,在这种情况下它可以被安装在另一个文件的顶部。)
# mkdir /mnt/a
# mount /dev/sda3 /mnt/a
# mkdir /mnt/a/foo
# touch /mnt/a/foo/bar
# mkdir /mnt/b
# mount --bind /mnt/a/foo /mnt/b
# findmnt
# umount /mnt/a
# ls -la /mnt/b
(得到的两个挂载是相等的 - /mnt/b 在任何方面都不是 /mnt/a 挂载的“子项”,并且您可以卸载 /mnt/a 而不会影响 /mnt/b。)
某些文件系统(例如 Btrfs)具有以类似方式工作的自定义挂载选项;例如,Btrfs 具有subvol=
– 仅适用于确实代表 Btrfs 子卷根的路径,但在 VFS 级别看起来相同。使用挂载 Btrfs 文件系统subvol=home
会导致/home
显示为该挂载的“根”。
1虽然 util-linux 'mount' 有X-mount.subdir=
,但它通过像往常一样挂载根,然后对所需子目录进行绑定挂载,然后卸载根来实现这一点。