我目前正在开发一个文件系统并对现有文件系统进行一些研究,在我想到的文件系统中,除了通常由 FS 等存储的文件之外,我还想向文件添加额外的元数据(或文件属性) NTFS 存储每个文件的文件名、类型、路径、大小、创建和修改日期以及所有权。
特别是在 NTFS 中,我发现 $MFT 存储每个文件的属性,例如 $FILENAME 中的文件名和 $STANDARD_INFORMATION 中的时间戳,但它的其他属性(如所有者、位置、大小和类型)又如何呢?
我问这个是为了了解是否可以用关于文件的额外元数据来补充像 NTFS 这样的 FS,就像我之前说的那样,但我似乎无法理解它将已经拥有的元数据存储在哪里......
最佳答案
所有者可以通过 $SECURITY_DESCRIPTOR 属性确定。位置,我相信你的意思是卷上的路径,只能通过解析目录来确定,直到你遇到那个特定文件(构成文件系统 B*-Trees 的 INDX block 存储对 MFT 中文件记录的引用) .可以从 $DATA 属性准确地确定文件大小。
文件类型只能根据文件内容(某些文件格式有标记)或文件名中包含的扩展名来确定。当涉及文件类型时,文件系统是不可知的。如果您指的是文件、目录、链接等文件类型,则这些可以从文件记录本身确定。
至于添加额外的元数据,添加 NTFS 驱动程序无法识别的额外属性是不明智的,因为您必须编写自己的专有驱动程序并分发它。没有该驱动程序的机器会将驱动器视为已损坏。您还应该考虑当属性超过文件记录的大小时会发生什么(这在较新版本的 NTFS 中是固定的,它是 1024 字节,与记录大小可能不同的旧版本不同)。
解决此问题并使文件系统可供未安装您的软件或驱动程序的用户使用的一个好主意是添加命名流。您可以使用自己的命名约定并存储您喜欢的任何内容,NTFS 驱动程序会为您处理记录,即使它们超出了 1024 的限制。没有安装该软件的用户可以查看该文件系统,并且不会知道这些命名流的存在,因为应用程序通常默认打开 NTFS 驱动程序传递的未命名流(除非另有说明)。
关于windows - NTFS在哪里存储文件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789708/