2009-08-28 101 views
2

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

/root 
    /A 
    /B <-NFS mount 

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

回答

6

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

这是因为硬链接不作只放一个的指针该数据的副本数据的副本,所以他们必须要在同一个“地址空间”。

+7

从某种意义上说,硬链接和软链接都是*指针*。不同之处在于软链接将文件系统路径的文本表示存储到目标,而硬链接(因为它只是一个目录条目)只存储目标的inode nubmer,因此必须与目标文件系统位于同一文件系统链接本身所在的目录。 – 2009-08-28 17:10:12

+0

我的吊坠感觉不得不指出硬链接的替代方式是*符号*链接。 – 2011-07-07 19:49:49

+4

我想在目录中添加文件名也只是指针。没有“原始文件”的概念和“该文件的硬链接” - 它们是一个对象的两个名称,并且这两个名称都不是特殊的。和@JesseHallett,我不同意他们是替代品的想法。我认为最好只是说他们是不同的东西。 – 2011-10-04 21:35:10

6

首先明确一个硬链接是一个好主意。

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

但请注意,这两个名称之间并没有真正的直接联系。关系是Name1和Name2的索引节点编号都设置为12756--但是没有什么可以容忍的,并且说“我手上的这个东西是两个文件之间的链接”。它们只是两个共享一个ID号码的数据库条目。对于共享ID号的文件名,您可以执行查询(因为您正在浏览系统上的每个文件条目都很慢),但就是这样。

因此,它并不意味着任何创建“两个文件系统之间的硬链接” - 因为两个文件系统有不同的编号方案(系统1上的inode 1234和系统2上的1234,指向完全不同的文件),以及你唯一需要存储的是一个名字+ inodeNumber,没有什么可做的。