Windows 中文件元数据是如何存储的?

Windows 中文件元数据是如何存储的?

(我使用的是 Windows XP,但我猜想所有最新版本的 Windows 都是类似的。)

例如,当你创建新的空的文本文档,您会在其属性中发现其大小为 0 字节。零字节意味着无信息。没有数据。
但是,文件仍然有名称,它仍然可以包含上次访问、修改和创建的日期。它包含有关它是否是隐藏文件、是否是只读文件的信息……

那么所有元数据存储在哪里?

答案1

你曾经学过硬盘包含文件,但事实并非如此。实际上,硬盘包含一个非常非常大的数字,由许多单个位表示。但这种解释对你和你的计算机来说都没有任何意义,因为处理单个大数字并不常见(我说的是真正巨大的数字)。相反,计算机将其拆分成较小的“字”(8 位、16 位、32 位或其他)并以此方式使用。不过,那只是一堆字(我们假设是 8 位字,即字节)。

现在,该驱动器已分区。我已经解释了为什么分区是一个好主意这个答案

一般来说,驱动器无需分区即可使用。大多数 U 盘都是这样工作的。但使用分区有很多优点,仅列举其中的一些:

  • 你可以将两个操作系统放在同一个硬盘上,而且不会互相干扰。每个操作系统都会将其分区视为逻辑驱动器,除非你告诉它这样做,否则不会干扰其他分区。
  • 您可以逻辑地分离数据。如果某个分区因某种原因损坏,其他分区很可能仍会完好无损。
  • 使用分区比使用多个较小的硬盘更好,因为您的系统更安静,消耗更少的能量,并且您可以调整大小、删除、移动它们等。
  • 您可以将硬盘的某些部分用于某些特殊用途。

现在,每个分区都有自己的文件系统。现代版本的 Windows 使用NTFS, 但胖的FAT32外置FAT支持外部媒体或旧分区。日常使用的 Linux 安装通常使用扩展文件系统,ext4是最新的一个。

文件系统定义了文件在磁盘上的物理位置。您可以这样想:如果您有一本 10000 页的书,没有任何章节、页码或换行符,那么使用起来会非常困难。当然,页码和章节标题会占用页面上的一些空间,但它们使使用这本书变得更容易、更快捷。如果您想跳转到章节,比如说第 42 章,您只需在目录中查找即可。然后您可以翻阅这本书,直到找到您想要的章节。您的文件是章节,您的文件系统是这本书。文件系统元数据(如文件边界、文件名等)也占用空间,但占用的空间相对较小,而且它使工作速度更快。

如果您的“章节”为空,它仍然可以有标题或页码,对吗?空文件包含零字节数据。元数据占用空间,但它不是文件的一部分,而是文件系统的一部分。否则您会在文本文件中看到文件名吗?

顺便说一句,这就是为什么早期版本的 DOS 只接受 8.3 名称 - 为文件名保留的空间非常有限。NTFS 允许文件名长度为 255 个字符[1]


关于你的评论还有一句话:

我曾经感染过一种病毒,它不知怎么破坏了我电脑里的几个文件,以至于它们看起来大约有 100GB 大小。每个文件都在我的 40GB 硬盘上。所以一定是有某种魔法…… :-D

这是完全有可能的有效的由于一项名为稀疏文件. Hennes 在他的评论中对此进行了出色的解释这个问题

想象一个可以容纳 100 页的活页夹。如果您将该活页夹用作常规文件,则可以插入 100 页。您可以读取所有 100 页。您可以写入所有 100 页。现在想象一个稀疏活页夹。您插入第一页时写入“第 1 页:内容 A”。然后插入第二页时写入“第 9999 页:内容 b:”。每当您尝试读取页面时,您都会查看它是否存在。如果不存在,您的答案将是这是一个空白页。如果它确实存在,您将返回页面的内容。每当您写入活页夹中尚不存在的页面时,您都会添加一张新纸。

答案2

今天刚刚了解了 Windows 备用数据流 (ADS)。这是一个附加到文件的隐藏资源分支。自 Windows NT 3.1 以来,它一直是 NTFS 的一部分。

例如,如果您有一个空白的文本文件,但在文件的属性标记中填写了一些摘要信息,则会创建一个隐藏的 ADS 文件并将其附加到该文本文件中。大多数版本的 Windows 在报告原始文件的大小时不包括 ADS 文件的大小。

您可以从命令提示符创建和查看 ADS 文件。

echo "ABCDE" > test.txt:hidden.txt

将创建一个 test.txt 文件,其中有一个名为 hidden.txt 的 ADS 文件

您可以使用此命令来编辑该文件:

notepad test.txt:hidden.txt

以下是一篇易于阅读且内容更为详细的文章。

答案3

在 NTFS 卷上,此信息存储在元文件中。具体来说,文件名和时间戳存储在名为 $MFT 的元文件中。这些元文件无法通过常规 Windows 方法(如 Explorer 或命令提示符)访问。

更多阅读:

http://ntfs.com/ntfs-system-files.htm

http://en.wikipedia.org/wiki/NTFS

答案4

不同版本的 Windows 将元数据存储在单独的文件中(通常用户无法访问)或与文件分开的某些系统(文件系统)中(而某些属性存储在文件本身的备用数据流中,例如资源、区域标识符)并且不计入文件的存储,例如零字节文件实际上占用磁盘空间(元数据、索引、ADS)

获取文件的所有元数据:

wmic datafile where name="c:\\path\\to\\file.ext"

若要在单独的行中整齐地查看:

wmic datafile where name="c:\\path\\to\\file.ext" get /value

相关内容