NTFS 连接和 Unix 硬链接

NTFS 连接和 Unix 硬链接

我正在为 CIL 代码构建一个 IO 抽象库,并且我很难理解 NTFS 中两个文件夹之间的连接和硬链接之间的差异。

它们相等吗?我应该了解哪些差异?

答案1

NTFS 连接点是一种重分析点,有效地充当符号链接,但仅限于通过绝对路径定位本地目录。

假设你有

C:\>mkdir a b
C:\>linkd b\c C:\a

所发生的情况是,在 的目录表中C:\b,插入了一个名为 的目录条目c,其属性$Reparse包含指定它是与 target 的连接点的数据C:\a

当Windows 2000(引入重分析点和连接点时)遇到重分析点时,它会被移交给适当的处理程序。在这种情况下,当访问下面的路径时C:\b\c,连接点的处理程序将替换该路径C:\b\cC:\a并且正常的文件系统操作将从那里继续。

可以安装其他文件系统过滤器来拦截和处理其他类型的重分析点; Windows Vista、Server 2008 及更高版本附带了 NTFS 上“符号链接”重分析点的处理程序,该处理程序可以指向文件或目录、绝对或相对、本地或远程 - 与其他系统上的符号链接非常相​​似。


另外,NTFS 确实支持硬链接,这与 UNIX 的方式非常相似 - 多个目录条目可以指向同一个“inode”,即实际的文件数据。这与重新分析点无关。在几乎所有系统上,只能对文件进行硬链接;硬链接目录充满了危险。 (除此之外,..硬链接目录的条目应该指向什么?)

答案2

目录的 NTFS 重分析点非常类似于 Linux/UNIX 中的环回挂载。

文件的 NTFS 硬链接非常类似于 Linux/UNIX 中文件的硬链接。

NTFS 符号链接非常类似于 Linux/UNIX 中的符号链接。

Windows 版 Cygwin 的旧版本将重分析点视为硬链接,这导致 /usr/bin/find 抱怨文件系统中存在循环。就 POSIX 兼容程序而言,Cygwin 的更高版本将重分析点视为与符号链接相同。

相关内容