为什么可以通过将文件系统安装到其文件夹之一来“循环”文件系统?

为什么可以通过将文件系统安装到其文件夹之一来“循环”文件系统?

/dev/sda5安装在/这是我的文件系统

piotr@thinkpad:~$ sudo mkdir /home/mpoint
piotr@thinkpad:~$ sudo mount /dev/sda5 /home/mpoint

所以现在我可以这样做:

piotr@thinkpad:~$ cd /home/mpoint/home/mpoint

当我在第二个 mpoint 目录中时,它是空的。

我的问题是:

  1. 为什么可以通过将文件系统安装到其文件夹之一来“循环”文件系统?

  2. 为什么第二个 mpoint 目录是空的?

答案1

挂载文件系统时,可以为系统添加一层额外的层。安装点是一个绝对路径,通常隐藏目标的内容。仔细看看使用stat可能会有所帮助。 IE:

首先准备一个测试用例:

# mkdir /mnt/other
# echo hi > /mnt/other/hello.txt
# cat /mnt/other/hello.txt
hi
# stat -c %i /mnt/other
6424680

然后安装

# mount / /mnt/other
# cat /mnt/other/hello.txt
cat: cannot access '/mnt/other/hello.txt': No such file or directory
# stat -c %i /mnt/other
2
# stat -c %i /
2
# stat -c %i /mnt/other/mnt/other
6424680
# cat /mnt/other/mnt/other/hello.txt
hi

正如您所看到的,挂载点的索引节点从索引节点 6424680 更改为 2 (这是根目录1 的索引节点)。就安装点而言,该目录的内容是隐藏的,但仍然存在于磁盘上。它是文件系统之上的一层。

1 和父根到根,.并且..


该路径/mnt/other/mnt/other不是挂载点,并且保存该目录的 inode 的原始内容。在你的情况下它是空的,在我的情况下它有一个文件;虽然你可以也将其设为挂载点:

# mount / /mnt/other/mnt/other
# stat -c %i /mnt/other/mnt/other
2
# stat -c %i /mnt/other/mnt/other/mnt/other
6424680
# cat /mnt/other/mnt/other/mnt/other/hello.txt
hi

至于为什么,那为什么不呢。除非它损坏系统,否则让用户做他们想做的事。那是没说人们不能做损害系统的事情,尽管在这种情况下,从我所看到的情况来看,不存在添加阻止程序的动机。无论出于何种原因,人们甚至可能想在挂载点创建另一个视图,甚至是根树本身的视图。

此外,*nix 系统具有单个目录树,这与 Windows 不同驱动器有字母的A:,乙:,C:,……。根据 man mount 的开始:

Unix 系统中可访问的所有文件都排列在一棵大树中,即文件层次结构,根位于 / 。这些文件可以分布在多个设备上。 mount 命令用于将某个设备上找到的文件系统附加到大文件树。

答案2

我会以相反的顺序回答你的问题。

  1. 为什么第二个 mpoint 目录是空的?

因为那里什么也没有 - 目录是空的并且注释安装在该位置。

  1. 为什么可以通过将文件系统安装到其文件夹之一来“循环”文件系统?

可能是因为要防止它需要做很多工作,而且它不会真正产生任何不好的结果。并解决您的评论:没有目录通过此获得多个父目录,/home/mpoint/home/mpoint/home/mpoint.

相关内容