3

我目前正在开发一个文件系统并对现有的文件系统进行一些研究,并且在我想到的文件系统中,我想向文件添加额外的元数据(或文件属性),除了那些通常由 FS 存储的文件(如 NTFS 存储每个文件的文件名、类型、路径、大小、创建和修改日期以及专有信息。

特别是在 NTFS 中,我发现 $MFT 存储每个文件的属性,例如 $FILENAME 中的文件名和 $STANDARD_INFORMATION 中的时间戳,但是它的其他属性,如所有者、位置、大小和类型呢?

我只是问这个问题是为了了解是否有可能用关于文件的额外元数据来补充像 NTFS 这样的 FS,就像我之前说的那样,但我似乎无法理解它存储它已经拥有的元数据的位置......

4

1 回答 1

3

所有者可以通过 $SECURITY_DESCRIPTOR 属性确定。位置,我相信你的意思是卷上的路径,只能通过解析目录来确定,直到你遇到那个特定的文件(构成文件系统的 B*-Trees 的 INDX 块存储对 MFT 中文件记录的引用) . 文件大小可以通过 $DATA 属性准确确定。

文件类型只能根据文件的内容(某些文件格式有标记)或文件名中包含的扩展名来确定。当涉及到文件类型时,文件系统是不可知的。如果您指的是文件、目录、链接等中的文件类型,则可以从文件记录本身确定这些类型。

至于添加额外的元数据,添加 NTFS 驱动程序无法识别的额外属性是不明智的,因为您必须编写自己的专有驱动程序并分发它。没有该驱动程序的机器会认为该驱动器已损坏。您还应该考虑当属性占用超过文件记录的大小时会发生什么(这在新版本的 NTFS 中是固定的,它是 1024 字节,与记录大小可能不同的旧版本不同)。

解决此问题并使未安装您的软件或驱动程序的用户可以使用文件系统的一个好主意是添加命名流。您可以使用自己的命名约定并存储您喜欢的任何内容,并且 NTFS 驱动程序将为您处理记录,即使它们超出 1024 限制。没有安装软件的用户可以查看该文件系统并且不会知道那些命名流的存在,因为应用程序通常会默认打开 NTFS 驱动程序传递的未命名流(除非另有说明)。

于 2013-11-12T07:55:32.080 回答