NTFS文件系统存储文件属性的位置在哪里?

3
我目前正在开发一个文件系统,并研究现有的文件系统,在我设想的文件系统中,除了像NTFS这样的文件系统通常存储的文件名、类型、路径、大小、创建和修改日期以及专有属性外,我还希望为文件添加额外的元数据(或文件属性)。
特别地,在NTFS中,我发现$MFT为每个文件存储属性,如在$FILENAME中存储的文件名和在$STANDARD_INFORMATION中存储的时间戳,但其他属性(如所有者、位置、大小和类型)呢?
我之所以问这个问题,是为了了解是否可以为像NTFS这样的文件系统补充关于文件的额外元数据,正如我之前所说的那样,但我似乎无法理解它已经拥有的元数据存储在哪里...
1个回答

3
所有者可以通过$SECURITY_DESCRIPTOR属性确定。我相信你所指的位置是卷上的路径,只能通过解析目录来确定,直到找到特定的文件为止(组成文件系统B*-Tree的INDX块存储对MFT中文件记录的引用)。文件大小可以从$DATA属性准确确定。
文件类型只能从文件内容(某些文件格式具有标记)或包含在文件名中的扩展名中确定。文件系统对文件类型是无关的。如果你指的是文件、目录、链接等文件类型,这些可以从文件记录本身确定。
至于添加额外的元数据,增加NTFS驱动程序不识别的附加属性是不明智的,因为你必须编写自己的专有驱动程序并分发它。没有该驱动程序的计算机将看到驱动器为损坏。还要考虑当属性占用的空间超过文件记录的大小时会发生什么情况(新版本的NTFS的文件记录大小固定为1024字节,而旧版本的大小可能会变化)。
解决这个问题并使文件系统可供没有安装你的软件或驱动程序的用户使用的好方法是添加命名流。你可以使用自己的命名约定存储任何你想要的东西,NTFS驱动程序会为你处理记录,即使它们超出了1024字节的限制。没有安装该软件的用户可以查看该文件系统,并且不会知道这些命名流的存在,因为应用程序通常默认打开NTFS驱动程序传递的未命名流(除非另有说明)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接