5

所以我知道一个文件是由它的数据和元数据组成的,元数据是关于它的信息(通常是文件的名称、文件的类型、创建和修改的日期等)。

我的问题是这些信息究竟存储在哪里。我知道它可以包含在文件、目录或数据库中,但对于 Windows、Linux 和 MAC-OS 文件系统,我似乎找不到这些信息......

4

2 回答 2

4

对于 Windows 和 Mac,这些信息大部分是专有的。

对于Windows,我可以肯定地说,已经为 Linux 编写了足够接近的 NTFS 文件系统驱动程序版本。您可以查看一下,还有一些文档,其中大部分是由 Richard 'Flatcap' Russon ( http://www.flatcap.org/ntfs/ ) 编写的。

有关 FAT 文件系统的文档很久以前就已公开,目的是为从事闪存驱动器等工作的开发人员和工程师提供充足的信息。(http://msdn.microsoft.com/en-us/library/windows/hardware/gg463080.aspx

Linux发行版使用的 Ext 文件系统的文档可以很容易地在 Web 上找到。(分机2:http ://www.nongnu.org/ext2-doc/ext2.html )

我不知道Mac使用什么,但我敢打赌,它是源自现有格式(可能是 ext)的某种专有可憎。这只是我的看法,不要把这当成事实。

所有这些格式都有某种包含元数据的结构。该文件只是物理驱动器上某处的字节流。大多数文件系统应该具有至少存储文件位置(通常是文件的每个片段的起始簇)和文件大小的结构。其余的元数据由每个文件系统来实现。

例如,FAT 文件系统中的每个目录都有表,每个目录都存储有关其包含的文件的元数据。但它也有一个 FAT 表,用于保存文件系统中包含的每个文件的片段位置。

NTFS 文件系统有一个称为主文件表的大表,它保存文件系统包含的每个文件的元数据记录,包括表本身。每条记录都包含所有元数据,包括每个片段在物理驱动器上的文件位置。但是,目录结构作为数据保存在目录文件记录中。但是,NTFS 有更多的结构来保存有关文件的信息,例如 USN 日志或卷位图。

要访问文件系统包含的元数据,您必须解析原始卷或使用操作系统 API 公开的函数。API 通常不会为您提供有关元数据的所有信息。例如,Windows API 将为您提供遍历 USN 日志以查找有关特定文件的信息的函数,但您无法直接获取文件的 MFT 属性。

我必须再次强调,即使这些专有文件系统上的大多数文档,你都是在黑暗中拍摄,因为这是他们的知识产权。我们现在拥有的一些(如果不是大部分)文档来自逆向工程。

于 2013-11-26T20:25:21.950 回答
0

这取决于文件系统。例如,看看http://lxr.free-electrons.com/source/fs/fat/fat.h

于 2013-10-20T19:40:12.750 回答