【发布时间】:2013-03-30 00:43:33
【问题描述】:
我知道硬链接的一个条件是它们不能跨越文件系统。这是否适用于 NFS 挂载?鉴于以下目录结构,我是否能够在目录 A 中创建指向目录 B 中文件的硬链接?
/root
/A
/B <-NFS mount
例如,我想运行ln /root/B/file.txt /root/A/linkedfile.txt
【问题讨论】:
我知道硬链接的一个条件是它们不能跨越文件系统。这是否适用于 NFS 挂载?鉴于以下目录结构,我是否能够在目录 A 中创建指向目录 B 中文件的硬链接?
/root
/A
/B <-NFS mount
例如,我想运行ln /root/B/file.txt /root/A/linkedfile.txt
【问题讨论】:
好吧,因为/B 是一个单独的文件系统(一个挂载的 NFS 文件系统),你不能在它和/A 之间建立硬链接,因为它们不在同一个文件系统上。
这是因为硬链接不会复制 data 只将 pointer 的副本复制到该数据,因此它们必须位于相同的“地址空间”。
【讨论】:
最好先准确了解硬链接是什么。
通常在类 unix 系统上,目录中的文件名指向一个 inode 编号——本质上是一个文件编号。 “硬链接”只是创建另一个具有相同 inode 编号的文件名。现在您必须使用指向相同编号文件的不同名称。
但请注意,这两个名称之间并没有真正的直接联系。关系是 Name1 和 Name2 都将它们的 inode 编号设置为 12756 - 但没有什么可以说“我手中的这个东西是两个文件之间的链接”。它们只是共享一个 ID 号的两个数据库条目。您可以对共享 ID 号的文件名进行查询(很慢,因为您要遍历系统上的每个文件条目),但仅此而已。
因此,创建“两个文件系统之间的硬链接”并没有任何意义——因为两个文件系统具有不同的编号方案(系统 1 上的 inode 1234 和系统 2 上的 1234 指向完全不同的文件),并且唯一需要存储的是名称+inodeNumber,没有什么可做的。
【讨论】: