什么是重解析点,为什么这么命名?

Saj*_*uuk 12 windows ntfs filesystems

  • 它是什么?

    根据MSDN Docs,在 NTFS 文件系统中,有一个称为“重解析点”的概念,并且:

    当文件系统打开一个带有重解析点的文件时......

    从这一行看来,这reparse point只是存储在 NTFS 文件对象中的一些元数据。

    但这个流行的答案另有说法:

    重解析点是 linux 所谓的符号链接。

    哪个是正确答案?


  • 为何如此命名?

    另一件让我困惑的事情是这样一个概念的命名,我查了它的文档,但没有看到任何关于起源的信息,有人对此有线索吗?我猜这个名字包含“解析”,因为它涉及使用文件系统过滤器来解析数据结构,但为什么它是“重新解析点”,而不仅仅是“解析点”

use*_*686 7

重解析点是 linux 所谓的符号链接。

这主要是,但不完全正确。重解析点不一定是链接;它们是一个“构建块”,可以在其上实现各种链接类型。

是的,它们可用于实现符号链接——事实上,传统的 NTFS 连接和最近的 Win10“类 Unix”符号链接都是两种不同类型的重解析点。

但是,它们可用于实现根本不像符号链接的功能。例如,Windows 的“卷挂载点”(将驱动器附加到文件夹,而不是附加到驱动器号)也是重解析点。在维基百科的文章列出了几个类型-例如,重复数据删除的文件,或“离线”文件,这触发检索从磁带备份。

为何如此命名?

它被称为“重解析点”,因为它会中断路径解析过程

当你有一个像 的路径时C:\Documents and Settings\Application Data\Microsoft,你可以想象它是这样解析的:

  1. 查找第一个组件C:- 它是一个驱动器号。访问驱动器。
  2. 查找第二个组件Documents and Settings——它是一个重解析点。读取重解析点元数据,并从那里重新开始解析。你最终会在C:\Users
  3. 查找第三个组件Application Data- 再次解析点;读取它的元数据并从那里重新开始路径解析。你最终会在AppData\Roaming
  4. 看...

如果你有 Linux,你可以通过运行看到类似的可视化namei /a/long/path/to/something,特别是如果路径包含符号链接。