空目录占用多少空间?
在 Windows 和 NTFS 文件系统中,它显示“0 字节”,这是不可能的。
目录实际占用了多少空间?这取决于文件系统还是操作系统?
答案1
从技术上讲,属性窗口向您显示的是文件夹的内容,如果该文件夹为空,则在任何磁盘上占用 0 字节。
您的问题涉及文件夹的空间结构占用文件系统的空间,这显然依赖于它。在 FAT32 上,您唯一需要存储的是一些标志(隐藏、存档)以及名称和路径。在 NTFS 中,您还需要存储权限和其他一些内容。总而言之,该空间几乎可以忽略不计。
空目录的空间结构占用空间取决于名称和文件夹路径。例如,假设您将所有文件夹放在根驱动器(例如 C:)上并使用所有 26 个字母字符;使用 10 亿个唯一名称,您可以拥有 log_26 (1.000.000.000) = 大约 7 (6.3065) 个字符长度的文件夹名称。因此,7 字节 * 1.000.000.000 等于大约 7GB 的空间。
这是基于名称在任何结构上必须占用的空间量的最小值。正如将要展示的,文件系统在其文件结构上存储了除文件名之外的大量信息。
我认为我的所有驱动器中大约有 100 万个文件夹和文件,因此实际上甚至没有达到这个值。别忘了这是一个非常粗略的估计。
当前使用最广泛的文件系统可以(可以说)被视为 FAT(文件分配表)和 NTFS(新技术文件系统)。胖的我们知道,自 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 字符),还存储属性、标志、访问权限、创建和修改日期以及其他遗留属性。
假设你读完了这些,你可能会有一个问题:“好吧,这一切都很好,但是长名字,比如瓦巴杰克或者甚至是杂乱的名字,例如e4d909c290d0fb1ca068ffaddf22cbd0,保存了吗?"
微软在 Windows 95 中决定添加该功能以增强用户体验。为了避免破坏“近乎标准”的系统,他们使用了一种巧妙的解决方法,称为 VFAT(虚拟 FAT)。本质上,为了将长文件名放入文件中,在实际文件记录之前写入了额外的记录(具有一些早期系统看不到的特殊属性)。长文件名系统允许的最大长度为 255 个 UTF-16(Unicode)字符(来源) (来源)。
如果您将第一个例子更改为每个文件夹都有 9 个字符,那么开销就会从 32 GB 增加一倍到 64 GB,因为需要写入一条记录来存储长名称。
根据维基百科关于 NTFS 的文章中,所有权限都存储在主文件表中。它的空间可以通过磁盘碎片整理程序清楚地看到,如上所示这里。
MFT 记录在文件夹或文件中占用的大小描述如下这里:
文件和文件夹记录各为 1 KB并存储在 MFT 中,其属性写入 MFT 中分配的空间。除了文件属性之外,每个文件记录还包含有关文件记录在 MFT 中的位置的信息。
当文件的属性可以容纳在该文件 MFT 文件记录中时,这些属性被称为常驻属性。文件名和时间戳等属性始终是常驻属性。当文件的信息量不适合在其 MFT 文件记录中,一些文件属性变为非居民。非常驻属性被分配一个或多个磁盘空间簇。非常驻属性的一部分仍保留在 MFT 中并指向外部簇。NTFS 创建属性列表属性来描述所有属性记录的位置。NTFS 文件属性类型表列出了 NTFS 当前定义的文件属性。
因此,在 NTFS 中,文件夹至少占用 1 KB 的空间,除非它们具有非常长的参数和权限列表;此时,MFT 记录会在分区中占用一个额外的簇,其大小取决于它的格式化方式,尽管对于超过 2GB 的文件,微软在该文章中建议使用 4KB 簇。
答案2
举一个真实的例子,我先记录下我的可用空间,然后创建一个大型目录结构并减去新的可用空间,以找出已使用的空间量。我为一周中的每一天创建了 0-6 个目录,然后在 0-23 目录中为一天中的小时创建目录,然后在 0-59 目录中为一小时中的分钟创建目录。总共有 10,080 个目录。我的磁盘使用量改变了 6,926,336 字节。这相当于每个目录 687 字节。如果您感兴趣的话,这也相当于 1TB 驱动器的 0.0006%(如果您将 1TB 计算为 1024^4)。
答案3
在 Windows 10 上,我创建了 1,000,000 个空文件夹,根据 python 的getsize
函数,它占用了 200540160 字节的空间。也就是说每个文件夹平均占用 200.54016 字节。