元数据不占用任何大小吗?


51

我将4096个字符保存到文本文件中,由于每个字符均为1个字节,因此文本文件的大小必须为4K字节,如下所示:

在此处输入图片说明

我将闪存连接到计算机。闪存的可用空间为1,717,518,336bytes

在此处输入图片说明

我在闪存中创建了该文件的副本。再来看看自由空间。它有1,717,514,240字节可用空间:

在此处输入图片说明

让我们看看有什么区别:

1,717,518,336-1,717,514,240 =4096字节


我的问题 :

Q1:

如上图所示,文件在闪存中唯一占据的空间是其内容[字符]的空间。那么元数据文件在哪里?

我的意思是,当我将文件移动到另一台计算机时,它如何理解文件名,文件所有者,创建和修改的日期以及...?

它不占任何大小吗?!

Q2:

我可以在闪存中看到元数据文件吗?

在此处输入图片说明

感谢您的时间和考虑。


10
元数据将包含在文件系统本身中。这不是Windows报告的文件大小的一部分。此外,FAT32和NTFS元数据将有所不同。
Ramhound

@Ramhound当我将文本文件移至闪存时,其元数据文件也移至闪存,对吗?我怎么看?
TheGoodUser 2014年


1
除了了解操作系统的内部结构(本身有价值)之外,除非您正在编写磁盘修复/恢复程序,否则可能没有理由查看或修改此类信息。对于正常使用,您永远不需要在此级别更改信息,因为它很容易破坏文件系统本身以及使用它的所有内容的完整性。
2014年

3
简短的回答:它确实占用了空间,但不算作文件大小的一部分。
user253751 2014年

Answers:


50

是的,元数据占用空间。具体来说,在NTFS上它占用1024个字节。但是,信息不是存储在文件中,而是存储在主文件表MFT中。特别是在MFT记录#4中$AttrDef

有关详细信息,请参阅此Technet文章:表3.5包含定义的所有MFT记录。

使用NTFS格式化卷时,将创建主文件表(MFT)文件和其他元数据。元数据是NTFS用于实现文件系统结构的文件。NTFS为元数据文件保留MFT的前16条记录。

NTFS为每个文件创建一个文件记录,并为在NTFS卷上创建的每个目录创建一个目录记录。MFT包括MFT本身的单独文件记录。这些文件和目录记录存储在MFT上。文件的属性被写入MFT中分配的空间。除文件属性外,每个文件记录还包含有关文件记录在MFT中的位置的信息。

请注意,其他文件系统可以并且确实会处理元数据。

编辑:在注释部分已指出,此答案缺少要点,因为OP要求在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
您可以使用Sysinternal套件的NTFSinfo查看元数据并找到任何扩展。您可以在这里下载它:technet.microsoft.com/zh-cn/sysinternals/default周围有几个元数据编辑器,但是我不推荐任何一个,因为我没有使用过它们。
bjanssen 2014年

9
至少在NTFS上,@ TheGoodUser-Sp元数据通常不存储在“文件”中,这就是我想要的印象。有没有什么东西在\ Windows文件夹的地方,我们都只是不会告诉你有关局促; 文件元数据是文件系统本身不可或缺的一部分。
罗伯·摩尔

2
在这种情况下,闪存驱动器的格式为FAT-32。因此,该元数据存储在文件分配表(FAT)en.wikipedia.org/wiki/File_Allocation_Table中
jnovacho 2014年

2
重要的是要注意,NTFS和FAT的分配表已预先分配。它因格式而异,但是通常会用空的预分配块占用几个扇区,这些块将用于存储元数据以减少碎片。
Kaslai 2014年

2
是什么让您认为元数据是固定大小的?当然,访问控制列表的复杂性可能相差很大。我看不到它如何总是适合1024字节(以及所有其他元数据,例如访问和修改时间)
Ben Voigt 2014年

26

它不占任何大小吗?!

是的,但这是一个很大的预分配块中的一个小条目。该块计入磁盘的“已用”部分。在该块中添加一个条目不需要扩展该块。

根据文件系统的不同,添加大量文件名后,最终将以某种方式填充并扩展该块。

我可以在闪存中看到元数据文件吗?

不容易

正如Ruslan和Blorgbeard所说。您可以安装一个十六进制查看器,例如HxD,它将允许您查看(和编辑-非常小心)原始文件系统数据。但是您必须自己解释哪些字节属于哪种文件系统结构。为此,您需要一些有关闪存盘上使用的特定文件系统的良好文档。FAT32可能比NTFS的许多变体中的任何一个都更易于理解。例如,请参阅了解FAT32文件系统


3
@TheGood如果被剥夺了Google的支持,我可能会先启动Linux,然后dd将原始Flash文件系统复制到另一个磁盘上的文件中,然后使用hex-viewer对其进行检查,并结合特定文件系统上的出色参考资料进行检查(如果不是专有和未公开的)。我可能会使用来更改元数据touch,重复dd并使用二进制diff。
RedGrittyBrick 2014年

1
好消息是我没有被Google剥夺。
克苏鲁2014年

5
@克苏鲁:老人不需要死灵书。fhtagn。
RedGrittyBrick 2014年

2
无需更改操作系统即可直接在硬盘驱动器上使用十六进制查看器。只需使用一个体面的十六进制查看器即可。(似乎甚至hiew可以做到,但是我不确定,因为我很早以前就在Windows上)。
Ruslan 2014年

1
HxD肯定会在Windows上做到这一点。其他菜单,打开磁盘。
Blorgbeard 2014年

7

元数据不作为文件存储(也不由通常的文件管理工具报告),而是存储在磁盘上文件系统的数据上。

根据文件系统的性质/版本,每个条目将占用一定数量的磁盘空间来表示元数据信息。

此外,除了在“主文件表”中分配的空间外,某些文件系统还将保留有关文件更改的日志(占用额外的空间),某些文件系统甚至可以使用包含特殊用途元数据的额外字段进行扩展。

因此,从技术上讲,元数据会占用磁盘空间,但是大多数文件管理实用程序都不会考虑到元数据,这些实用程序可以调用系统的API来查询文件系统的文件空间,而不是元数据空间。

而且这种抽象只是冰山一角,因为文件系统本身是对底层物理磁盘空间(由低级别磁盘例程提供)的抽象进行工作,因此实际上只有磁盘的内部逻辑才能知道有多少实际内存位置可用于更高级别以及有多少标记为不可靠,保留或用于校验和。


3

元数据取决于文件系统。通常在可交换媒体上使用的最基本的文件系统基于DOS文件系统(FAT)。DOS没有用户和权限。或者,更正确地说,某些信息包含在文件名的第8个数据位中。在基本的DOS FS中使用的唯一资源开销是考虑文件的块或文件所在的目录-并且该块可能已经提交来处理“。”。IOW,添加一个空文件不会增加其他存储空间,但是会更改一些现有的已消耗和分配的位。

当您使用具有日记功能和用户的更高级的文件系统时,您将获得元数据,日记条目以及可能的取证链来恢复以前的文件版本等。然后,一个小文件可能会在使用的存储中爆炸。

因此,请检查FS类型。如果是FAT,则您可能没有在介质中的元数据中记录用户。因此...没有使用空间。:)

FAT FS的一个很好的例子是开放源代码实现-您可以看到可用的操作列表不包括“获取/设置用户”和“按用户检查访问权限”。无身份=不存储该身份。


2

如上图所示,文件在闪存中唯一占据的空间是其内容[字符]的空间。那么元数据文件在哪里?

“元数据文件”是包含该文件的目录。基本上就是目录了-描述目录内容的元数据集合。

我的意思是,当我将文件移动到另一台计算机时,它如何理解文件名,文件所有者,创建和修改的日期以及...?

它不占任何大小吗?!

是的,在目录中。在大多数文件系统中,如果将一个文件链接到两个不同的目录中,则该文件可以具有两个不同的名称。

我可以在闪存中看到元数据文件吗?

如果您的文件系统支持它,则可以通过查看目录的大小来查看它。


2

元数据保存在哪里?

当我们谈论元数据时,有两种类型的元数据。

第一种类型包括创建日期,最后修改日期,最后访问日期。根据文件系统(即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块大小格式化,导致差异。


当我将空白文本文件复制到闪存时,其元数据也将移至闪存。现在,例如在Linux中,有什么方法可以查看元数据文件吗?以二进制为例。
TheGoodUser 2014年

是否复制元数据取决于您如何做。例如robocopy,您可以选择是否复制时间戳,属性,所有者信息,访问控制列表(ACL)等。这还取决于闪存上的文件系统是否支持它(例如FAT32不保留所有者信息和ACL,因此它们是无论如何都将其丢弃)。元数据不是文件形式的,因此您看不到原始数据。如果您想了解ddLinux中可能需要的低级内容,那么如何解释它们又是另一回事了。
肯尼斯·L
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.