所以我知道文件由它的数据和元数据组成,元数据是关于它的信息(通常是名称,文件类型,创建和修改日期等)。
我的问题是该信息存储的确切位置。我知道它可以包含在文件,目录或数据库中,但对于Windows,Linux和MAC-OS文件系统,我似乎无法找到这些信息......
答案 0 :(得分:3)
对于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 Filesystem文档可以在网上轻松找到。 (Ext2:http://www.nongnu.org/ext2-doc/ext2.html)
我不知道 Mac 使用的是什么,但我敢打赌它是某种从现有格式(可能是ext)派生的专有憎恶。这只是我的意见,不要以此为事实。
所有这些格式都有某种结构,包含元数据。该文件只是物理驱动器上某处的字节流。大多数文件系统应该具有至少存储文件位置的结构(通常是文件的每个片段的起始簇)和文件的大小。其余的元数据由每个文件系统来实现。
例如, FAT文件系统每个目录都有表,每个目录都存储有关其包含的文件的元数据。但它也有一个FAT表,用于保存文件系统中包含的每个文件的片段位置。
NTFS文件系统有一个称为主文件表的大表,其中包含文件系统包含的每个文件的元数据记录,包括表本身。每条记录包含所有元数据,包括每个片段的物理驱动器上的文件位置。 但是,目录结构作为目录文件记录中的数据保存。但是,NTFS具有更多结构,可以保存有关USN Journal或Volume Bitmap等文件的信息。
要访问文件系统包含的元数据,您必须解析原始卷或使用操作系统API公开的函数。 API通常不会为您提供有关元数据的所有信息。例如,Windows API将为您提供迭代USN Journal以查找有关特定文件的信息的功能,但您无法直接获取文件的MFT属性。
同样,我必须强调,即使使用这些专有文件系统上的大部分文档,你也会在黑暗中拍摄,因为这是他们的知识产权。我们现在拥有的大部分文档都来自逆向工程。
答案 1 :(得分:0)
这取决于文件系统。例如,请查看http://lxr.free-electrons.com/source/fs/fat/fat.h。