为什么硬链接只在同一个文件系统内有效?

b0y*_*end 27 filesystems hard-link

我正在阅读Mark Ba​​tes对命令行的介绍。

在第一章中,他提到硬链接不能跨越文件系统。

关于硬链接需要注意的重要一点是它们仅适用于当前文件系统。您不能创建指向不同文件系统上的文件的硬链接。为此,您需要使用符号链接,第 1.4.3 节。

我只知道一个文件系统。从根 ( /)开始的那个。这种硬链接不能跨越文件系统的说法对我来说没有意义。

关于 Unix 文件系统的维基百科文章也没有帮助。

小智 36

希望我能以对你有意义的方式回答这个问题。Linux 中的文件系统通常由一个分区组成,该分区以您存储文件的各种方式之一(必须喜欢选择!)格式化。无论是您的系统文件,还是您的个人文件……它们都存储在文件系统中。这部分你好像明白了。

但是,如果您将硬盘分区为多个分区(想想 Apple Pie 切成小块),或者添加一个额外的硬盘驱动器(也许是 USB 记忆棒?),该怎么办?为了论证起见,它们也都有文件系统。

当您查看计算机上的文件时,您会看到分区文件系统上数据的可视化表示。每个文件名对应于所谓的 inode,它是您的数据在幕后真正存在的地方。硬链接允许您拥有多个指向同一个 inode 的“文件名”(因为缺乏更好的描述)。这仅在这些硬链接位于同一文件系统上时才有效。符号链接指向“文件名”,然后链接到保存数据的 inode。原谅我粗糙的艺术品,但希望这能更好地解释。

image.jpg             image2.jpg
          \           /
           [your data]
Run Code Online (Sandbox Code Playgroud)

在这里,image.jpg 和 image2.jpg 都直接指向您的数据。它们都是硬链接。然而...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]
Run Code Online (Sandbox Code Playgroud)

在这个(粗略的)示例中, image2.jpg 不指向您的数据,它指向 image.jpg ... 这是指向您的数据的链接。

符号链接可以跨文件系统边界工作(假设文件系统已附加并安装,就像您的 U 盘一样)。但是硬链接不能。它对您的其他文件系统上的内容或您的数据存储在何处一无所知。

希望这有助于更好地理解。

  • 有一个以“/”开头的*文件层次结构*。它将安装一个或多个*文件系统* (10认同)

Fac*_*tor 27

该文件系统是由目录条目来组织文件组成的目录结构组成。每个目录条目都将一个文件名与一个inode相关联。

软链接(符号)是不包含数据的目录条目,它只是指向另一个条目(同一文件系统或其他文件系统中的文件或目录)。当您删除指向的文件时,符号链接将无法使用。

硬链接是包含文件名和inode编号的目录条目 。删除最后一个硬链接后,您将无法再访问该文件。

软链接和硬链接的区别

结论:

由于inode是用于表示文件系统对象的数据结构,因此它是文件系统的内部结构,您不能指向另一个文件系统的inode。

因此,硬链接仅在同一个文件系统内有效,但软链接(符号链接)可以跨越文件系统,因为它们只是指向另一个目录条目(文件系统的接口,而不是内部对象)。


sup*_*cat 5

硬链接具有保持目标存活的作用。只要任何硬链接可达,系统就会确保其目标不会被释放。因此,每当系统尝试确定是否存在对其的任何引用时,有必要安装可能包含到特定 inode 的硬链接的所有介质。

鉴于 inode 生命周期通常是通过维护引用计数而不是扫描引用来确定的,因此可以将事物安排为两个或多个相互保持链接的文件系统可以独立使用,前提是不需要使用以下链接:在系统之间桥接,并且无需在任一系统上使用 fsck。然而,如果其中一个系统的 inode 计数受到干扰,使该系统再次可用的唯一方法是使用一种 fsck 操作形式,该操作可以扫描两个文件系统以获取引用。由于这种限制,虽然可能允许两个相互链接的文件系统独立使用,但这样做的好处可能太有限,不值得。