2

我知道硬链接的一个条件是它们不能跨越文件系统。这是否适用于 NFS 挂载?鉴于以下目录结构,我能否在目录 A 中创建指向目录 B 中文件的硬链接?

/root
    /A
    /B  <-NFS mount

例如,我想运行ln /root/B/file.txt /root/A/linkedfile.txt

4

2 回答 2

7

好吧,既然/B是一个单独的文件系统(一个挂载的 NFS 文件系统),你不能在它和 之间建立硬链接/A,因为它们不在同一个文件系统上。

这是因为硬链接不会制作数据的副本,只放置指向该数据的指针的副本,因此它们必须位于相同的“地址空间”中。

于 2009-08-28T17:04:05.610 回答
7

首先了解硬链接是什么是个好主意。

通常在类 Unix 系统上,目录中的文件名指向一个 inode 编号——本质上是一个文件编号。“硬链接”只是创建另一个具有相同 inode 编号的文件名。现在您必须使用指向相同编号文件的不同名称。

但请注意,这两个名称之间并没有真正的直接联系。关系是 Name1 和 Name2 都将它们的 inode 编号设置为 12756 - 但是没有什么可以阻止并说“我手中的这个东西是两个文件之间的链接”。它们只是共享一个 ID 号的两个数据库条目。您可以对共享 ID 号的文件名进行查询(缓慢,因为您正在遍历系统上的每个文件条目),但仅此而已。

因此,创建“两个文件系统之间的硬链接”没有任何意义——因为两个文件系统有不同的编号方案(系统一上的 inode 1234,系统二上的 1234,指向完全不同的文件),而你唯一要做的就是必须存储的是名称+inodeNumber,没有什么可做的。

于 2011-10-04T21:31:39.963 回答