目录占用多少空间?

Sh*_*ero 15 disk-space filesystems

空目录需要多少空间?

在 Windows 和 NTFS 文件系统中,它说“0 字节”,这是不可能的。

一个目录真正占用了多少?它取决于文件系统或操作系统吗?

Dok*_*ard 18

从技术上讲,属性窗口向您显示的是文件夹的内容,如果为空,则在任何磁盘上都占用 0 字节。

您的问题涉及文件夹结构在文件系统上占用的空间,这显然取决于它。在 FAT32 上,您唯一需要存储的是一些标志(隐藏、存档)以及名称和路径。在 NTFS 中,您还需要存储权限和其他一些东西。总而言之,这个空间几乎可以忽略不计。

空目录结构占用的空间取决于名称和文件夹路径。例如,假设您将所有文件夹放在根驱动器(例如 C:)上并使用所有 26 个字母字符;使用 10 亿个唯一名称,您可以拥有 log_26 (1.000.000.000) = 大约 7 (6.3065) 个字符长度的文件夹名称。因此,7 字节 * 1.000.000.000 大约等于 7GB 的空间。

这是仅基于必须采用任何结构的空间名称数量的最小值。正如将显示的那样,文件系统在其文件结构上存储了除文件名之外的更多信息。

我想我的所有驱动器中都有大约 100 万个文件夹和文件,因此在现实中甚至没有达到这个价值。不要忘记这是一个非常粗略的估计。


当前最常用的文件系统可以被认为(可以说)为 FAT(文件分配表)和 NTFS(新技术文件系统)。众所周知,FAT从 1996 年开始使用,当时 Windows 95 与 FAT32 一起发布。尽管已被其他更具弹性的文件系统取代,例如 NFTS (Windows)、HFS+ (OSX) 或 ext3 (Linux),但它仍广泛用于手持设备或存储卡或闪存驱动器中,因为它得到了大多数操作系统的良好支持最重要的是,这很简单。

现在重要的是。FAT 分区中的文件和目录,即使其中没​​有任何内容,也具有名称、位置、某些属性等,它们存储在称为目录表的区域

目录表是一个特殊的文件(即它是从经常使用隐藏,使得只有操作系统和某些应用程序可以直接访问它)。它代表一个目录(又名文件夹),其中存储的任何文件或文件夹在表中都有一个 32 字节的条目。由于目录表是一个文件,因此它会占用一个或多个簇(即磁盘中具有预设大小的框,其中只有一个文件(或一个文件的一部分)适合)。

因此,现代驱动器(> 512 MB)上的任何文件夹或目录至少有 4 KB 的开销,以便存储表(源)。但是,这意味着您可以在同一个文件夹中存储 128 个不同的文件 (4 * 1024 B / 32 B = 128),并且存储记录的开销仍然和以前一样 4KB。

在第一个示例中,这意味着十亿个文件夹的开销为 32 GB,而不是我计算的粗略估计的 7 GB。这 32 GB 不仅存储短名称(8 个 ASCII 字符),还存储属性、标志、访问、创建和修改日期以及其他遗留属性。

假设你阅读这一切,有可能是你可能有一个问题:“嗯,这是一个好主意,但怎么长的名字,如Wabbajack甚至hashy的名字,如e4d909c290d0fb1ca068ffaddf22cbd0,存储在哪里?”

Microsoft 在 Windows 95 中决定添加该功能以增强用户体验。为了避免破坏“接近标准”的系统,他们使用了一种称为 VFAT(虚拟 FAT)的巧妙解决方法。本质上,为了将长文件名放入文件中,在实际文件记录之前写入了额外的记录(具有一些早期系统看不到的特殊属性)。长文件名系统允许最大长度为 255 个 UTF-16 (Unicode) 字符(source) (source)

如果您将第一个示例更改为每个文件夹有 9 个字符,那么开销将从 32 GB 增加到 64 GB,因为需要再写入一条记录来存储长名称。


根据维基百科关于 NTFS 的文章,所有权限都存储在主文件表中。它的空间显然是经过磁盘碎片整理可以看出,如在这里

尺寸的MFT记录来自一个文件夹或文件占用,在描述这里

文件和文件夹记录各为 1 KB,存储在 MFT 中,其属性写入 MFT 中分配的空间。除了文件属性之外,每个文件记录还包含有关文件记录在 MFT 中的位置的信息。

当文件的属性可以适合该文件的 MFT 文件记录时,它们被称为常驻属性。文件名和时间戳等属性始终是常驻的。当文件的信息量不适合其 MFT 文件记录时,某些文件属性将变为nonresident非常驻属性被分配一个或多个磁盘空间簇。非常驻属性的一部分保留在 MFT 中并指向外部集群。NTFS 创建属性列表属性来描述所有属性记录的位置。NTFS 文件属性类型表列出了当前由 NTFS 定义的文件属性。

因此,在 NTFS 中,文件夹至少占用 1 KB 的空间,除非它们有很长的参数和权限列表;那时,MFT 记录在分区中占据了一个额外的簇,其大小取决于它的格式化方式,尽管对于超过 2GB 的 Microsoft 在该帖子中建议使用 4KB 簇。

  • 我找到了一些关于我之前提到的 1024 字节长度的信息,http://www.c-ad.bnl.gov/kinyip/windows/MFT.html 这是一本非常好的读物,如果您愿意扩展,可能会对您的答案有所帮助。 (2认同)