/proc/.../mountinfo 中的第四列(根)是什么意思?

/proc/.../mountinfo 中的第四列(根)是什么意思?

proc手册中,它将第四列命名mountinfo为“root”,并将其描述为“文件系统中形成此挂载根的目录的路径名”。但如何理解呢?

我认为挂载的基本要素是源路径和目标路径,既然“挂载源”是第10列,目标是第5列,那么根是用来做什么的呢?

对于大多数挂载信息来说,根只是/,似乎没有意义。我只发现绑定安装的根目录与 不同/,所以它只在绑定安装中有用?在绑定情况下,为什么不显示 root 中的绝对路径?例如,绑定到 时/run/test_dir/a/run/test_dir/b根列显示/test_dir/a,为什么要隐藏该/run部分?

答案1

很难用语言元素来解释它(至少用我的英语技能) - 所以我决定做一个基于示例的答案:

根目录通常称为最高或者最高的目录。这只是部分正确。这个目录假设作为最高目录。您可以用“我将从这个目录开始 - 我假设这是最高目录并且上面没有任何内容”来描述它。

一些例子来阐明“root”的含义:

  • 假设您运行一个 Web 服务器并将域的根设置example.com/var/www/html/example.com.现在您创建一个文件/var/www/html/example.com/test.html。如果你https://example.com/test.html在浏览器中打开。您将获得创建的文件的内容。如果你设置/var/www/html为root,则必须打开https://example.com/example.com/test.html
  • 如果你chroot进入该目录/home/test/testSystem/。这个环境的根源是/home/test/testSystem.如果您ls在 chrooted 环境中执行操作,ls /您将获得以下内容/home/test/testSystem/

具有 root 权限的挂载点/

例如,USB 包含:

/
├── dir1
│   ├── subfile1
│   └── subfile2
├── file1
├── file2
└── file3

如果您将此 USB 挂载到/mnt您将获得预期的正常输出,因为您使用/USB 的目录作为 root:

531 137 0:52 / /mnt rw,nosuid,nodev shared:75 - /dev/sdb [...]

所以在大多数情况下,挂载点的根确实是/

具有不同根的安装点/

您可以自己尝试一下:将文件系统中的两个目录绑定在一起

$ mount --bind /var/test1 /var/test2

的输出mountinfo将类似于:

564 29 0:26 /var/test1 /var/test2 rw,relatime shared:1 - ext4 /dev/sda rw [...]

位于下面的挂载点的根目录/var/test2/var/test1。挂载源(您已挂载的内容)是/dev/sda

回到 USB 示例:如果您现在将内容挂载/mnt/dir1到其他设备,您将获得挂载根目录/dir1,并且挂载源将是/dev/sdb(USB)。该/mnt部分被丢弃在这里。

“为什么隐藏 /run 部分”

简而言之:/run被删除,因为它是一个 tmpfs 分区。为什么这些部件被移除?

在 USB 示例中,我们将dir1其安装/dev/sdb/home/test/usbmnt/.输出将是:

564 29 0:26 /dir1 /home/test/usbmnt/ rw,relatime shared:1 - ext4 /dev/sdb rw [...]

您会看到我们将 /dir1 的内容(来自 USB,而不是来自硬盘)安装到名为 usbmnt 的目录中。也许将其读作有帮助/dev/sdb/dir1

如果给出根目录,因为/mnt/usb/dir1我们无法知道 USB 上的真实位置:可能是/dir1/usb/dir1或者也许/mnt/usb/dir1

相关内容