use*_*870 5 filesystems metadata file
所以我知道一个文件是由它的数据和元数据组成的,元数据是关于它的信息(通常是名称、文件类型、创建和修改日期等)。
我的问题是这些信息究竟存储在哪里。我知道它可以包含在文件、目录或数据库中,但是对于 Windows、Linux 和 MAC-OS 文件系统,我似乎找不到这些信息......
对于 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 文件系统的文档可以在网络上轻松找到。(Ext2: http: //www.nongnu.org/ext2-doc/ext2.html)
我不知道Mac使用什么,但我敢打赌这是从现有格式(可能是 ext)派生出来的某种专有的令人厌恶的东西。这只是我的观点,请勿将其视为事实。
所有这些格式都有某种保存元数据的结构。该文件只是物理驱动器上某处的字节流。大多数文件系统应该有一个至少存储文件位置(通常是文件每个片段的起始簇)和文件大小的结构。其余的元数据由每个文件系统来实现。
例如,FAT 文件系统的每个目录都有表,每个目录都存储有关其包含的文件的元数据。但它还有一个 FAT 表,用于保存文件系统中包含的每个文件的片段位置。
NTFS文件系统有一个称为主文件表的大表,它保存文件系统包含的每个文件(包括表本身)的元数据记录。每个记录保存所有元数据,包括每个片段在物理驱动器上的文件位置。然而,目录结构作为数据保存在目录文件记录中。然而,NTFS 有更多的结构来保存有关文件的信息,例如 USN 日志或卷位图。
要访问文件系统包含的元数据,您必须解析原始卷或使用操作系统 API 公开的函数。API 通常不会为您提供您想要的有关元数据的所有信息。例如,Windows API 将为您提供迭代 USN Journal 来查找有关特定文件的信息的函数,但您无法直接获取文件的 MFT 属性。
再次,我必须强调,即使了解这些专有文件系统上的大部分文档,您也是在黑暗中拍摄,因为这是他们的知识产权。我们现在拥有的一些(如果不是大部分)文档来自逆向工程。