/proc/pid/mountinf 文件的 root 列含义

/proc/pid/mountinf 文件的 root 列含义

/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=,但它通过像往常一样挂载根,然后对所需子目录进行绑定挂载,然后卸载根来实现这一点。

相关内容