我放4096文本文件中的字符并保存。由于每个字符为 1 个字节,因此文本文件的大小必须是 4K 字节。如下所示,这没问题:
我将闪存连接到计算机。闪存上的可用空间是1,717,518,336
字节:
我在闪存中创建了该文件的副本。再次查看可用空间。它有1,717,514,240
字节可用空间:
让我们看看有什么区别:
1,717,518,336-1,717,514,240 =4096
字节
我的问题:
问题 1:
正如您在上面最后一张图中看到的,文件在闪存中占用的唯一空间是其内容(字符)的空间。那么元数据文件在哪里呢?
我的意思是,当我将文件移动到另一台计算机时,它如何理解文件的名称、文件的所有者、创建和修改日期等等?
它不占用任何尺寸吗?!
问题2:
我可以看到闪存中的元数据文件吗?
感谢您的时间和考虑。
答案1
是的,元数据占用空间。在 NTFS 上,它占用 1024 字节。但是,信息并不存储在文件中,而是存储在主文件表 MFT 中。具体来说,在 MFT 记录 #4 中$AttrDef
。
看这篇 Technet 文章详情:表 3.5 包含所有定义的 MFT 记录。
当卷使用 NTFS 格式化时,会创建主文件表 (MFT) 文件和其他元数据。元数据是 NTFS 用于实现文件系统结构的文件。NTFS 为元数据文件保留了 MFT 的前 16 条记录。
NTFS 为 NTFS 卷上创建的每个文件创建一个文件记录,为每个目录创建一个目录记录。MFT 包含 MFT 本身的单独文件记录。这些文件和目录记录存储在 MFT 上。文件的属性写入 MFT 中分配的空间。除了文件属性之外,每个文件记录还包含有关文件记录在 MFT 中的位置的信息。
请注意,其他文件系统可以并且确实以不同的方式处理元数据。
编辑:评论部分指出,这个答案没有切中要点,因为原帖作者要求的是 FAT32 文件系统的元数据,而不是 NTFS。如果我知道如何做,我会删除“正确答案”属性。因此,我提供了有关 FAT32 的附加信息来回答这个问题。
FAT32 将每个文件和文件夹的简单元数据(例如可见性或修改时间)保存在文件或文件夹父文件夹中的条目中,从而从 FS 的根文件夹向下创建树。正如 NTFS 所指出的那样,这不是文件,而是保存的之内文件夹数据结构。该条目最初为 32 字节,包含以下属性:
Name (8.3) xxxxxxxx.yyy. (88 bits)
Attribute byte (8 bits of information, described later in this section).
One reserved byte.
Create time (24 bits).
Create date (16 bits).
Last access date (16 bits).
Two reserved bytes.
Last modified time (16 bits).
Last modified date (16 bits).
Starting cluster number in the file allocation table (16 bits).
File size (32 bits).
该列表取自这篇 Microsoft Technet 文章适用于 FAT16。由于 FAT32 的簇大小可以是 32 位,文件名称可以长于 8.3,因此该表并不完全准确。为了适应长文件名和更大的磁盘,FAT32 修改了一些行为,这些行为可以在 Wikipedia 中查阅这里但基本思想是成立的。
答案2
它不占用任何尺寸吗?!
是的,但它是大型预分配块中的一小项。该块计入磁盘的“已用”部分。在该块内添加条目不需要扩展该块。
根据文件系统,在添加大量文件名后,该块最终将被填充并以某种方式扩展。
我可以看到闪存中的元数据文件吗?
不容易
正如 Ruslan 和 Blorgbeard 所评论的。您可以安装十六进制查看器,例如氢键这将允许您查看(和编辑 - 非常小心)原始文件系统数据。但您必须自己解释哪些字节属于哪个文件系统结构。为此,您需要一些关于闪存盘上使用的特定文件系统的良好文档。FAT32 可能比 NTFS 的许多变体都更容易理解。请参阅了解 FAT32 文件系统例如。
答案3
元数据不以文件形式存储(也不由常用的文件管理工具报告),而是存储在磁盘上的文件系统数据中。
根据文件系统的性质/版本,每个条目将占用一定量的磁盘空间来表示元数据信息。
此外,除了主文件表中分配的空间之外,一些文件系统还会保留有关文件更改的日志(占用额外的空间),并且一些文件系统甚至可以扩展包含特殊用途元数据的额外字段。
因此从技术上讲,元数据占用磁盘空间,但大多数文件管理实用程序都没有考虑到这一点,它们通过调用系统的 API 来查询文件系统文件空间,不适用于元数据空间。
而且这种抽象只是冰山一角,因为文件系统本身是在由低级磁盘例程提供的底层物理磁盘空间的抽象上工作的,所以实际上只有磁盘的内部逻辑才知道有多少实际内存位置可用于更高级别,有多少被标记为不可靠、保留或用于校验和。
答案4
元数据保存在哪里?
当我们谈论元数据时,有两种类型的元数据。
第一种类型包括创建日期、上次修改日期、上次访问日期。根据文件系统(即 NTFS / FAT / Ext3 等...),将有不同的“元数据”可用,例如 Windows 所有者和 NTFS 上的权限。
第一种类型适用于所有文件,例如示例中的.txt 文件。
所有文件系统都会在主文件表(NTFS 为 MFT,其他文件系统为其他名称)中预先分配空间来保存这些元数据,而用户无法直接访问该表。由于 MFT 不计入驱动器容量,因此无需“额外”存储空间。
第二类“元数据”由文件类型或应用程序定义。例如,Office 文档保留“作者”、“主题”和其他元数据;JPEG 图像保留一组 EXIF 数据,包括“拍摄日期”、“相机型号”、“快门速度”;而 MP3 声音包含“专辑”、“曲目编号”、“比特率”……
第二种类型确实占用了额外的空间,因为这些“元数据”构成了文件的一部分。
不同驱动器中的大小不同
当您的文本文件还在C:\
时,它占用 4K。当您将其放在闪存驱动器上时,它的大小变为 1K H:\
。这是因为不同分区的“块大小”不同。
文件按块分配空间。因此,在块大小为 4K 的文件系统中,1 个字节分配 4K,而 4,097 个字节(4K + 1 字节)分配 8K。
显然,您的C:
格式化为 4K 块大小,而H:
格式化为 1K 块大小,从而导致差异。