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

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

我正在读这个命令行简介作者:马克·贝茨。

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

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

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

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

答案1

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

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

当您查看计算机上的文件时,您会看到分区文件系统上数据的直观表示。每个文件名都对应一个索引节点,这是您的数据在幕后真正存在的地方。硬链接允许您拥有多个指向同一索引节点的“文件名”(由于缺乏更好的描述)。仅当这些硬链接位于同一文件系统上时,这才有效。相反,符号链接指向“文件名”,然后链接到保存数据的索引节点。请原谅我的粗糙艺术作品,但希望这可以更好地解释。

image.jpg             image2.jpg
          \           /
           [your data]

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

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

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

符号链接可以跨文件系统边界工作(假设文件系统已连接并安装,就像您的 USB 记忆棒)。然而硬链接却不能。它不知道您的其他文件系统上有什么,也不知道您的数据存储在哪里。

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

答案2

文件系统由目录结构组成,目录条目组织文件。每个目录条目都将一个文件名与一个相关联索引节点

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

硬链接是包含文件名的目录条目和 索引节点数字。删除最后一个硬链接后,您将无法再访问该文件。

软链接和硬链接的区别

结论:

作为索引节点是用于表示文件系统对象的数据结构,它是文件系统内部的,并且您不能指向索引节点另一个文件系统的。

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

答案3

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

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

答案4

单个索引节点数字用于代表每个文件系统中的文件。所有硬链接都基于 inode 编号。文件系统参考链接这里

相关内容