NFS +硬链接?

Bri*_*ian 2 nfs hardlink

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

/root
    /A
    /B  <-NFS mount
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*per 7

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

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

  • 从某种意义上说,硬链接和软链接都是*指针*.区别在于软链接存储文件系统路径到目标的文本表示,而硬链接(因为它只是一个目录条目)只存储目标的inode nubmer,因此必须在同一文件系统上链接本身所在的目录. (7认同)
  • 我想在目录中添加文件名也只是指针.没有"原始文件"的概念和"到该文件的硬链接" - 它们是一个对象的两个名称,并且这两个名称都不是特殊的.和@JesseHallett,我不同意他们的选择; 我认为最好只说它们是不同的东西. (4认同)

Jam*_*ore 7

首先要确切了解硬链接是什么,这是一个好主意.

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

但请注意,这两个名字之间并没有真正的直接联系.关系是Name1和Name2都将它们的inode编号设置为12756 - 但是没有什么可以阻止并且说"我手中的这个东西是两个文件之间的链接".它们只是两个共享id号的数据库条目.对于共享id号的文件名,你可以进行查询(因为你正在浏览系统中的每个文件条目,因此很慢),但就是这样.

因此,创建"两个文件系统之间的硬链接"并不意味着什么 - 因为两个文件系统具有不同的编号方案(系统1上的inode 1234,系统2上的1234,指向完全不同的文件),并且你唯一的事情必须存储的是名称+ inodeNumber,没有什么可做的.