在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