空目录需要多少空间?
在Windows和NTFS文件系统中,它说“ 0字节”是不可能的。
目录实际上占用了多少?它取决于文件系统还是操作系统?
空目录需要多少空间?
在Windows和NTFS文件系统中,它说“ 0字节”是不可能的。
目录实际上占用了多少?它取决于文件系统还是操作系统?
Answers:
从技术上讲,“属性”窗口向您显示的是文件夹的内容,如果为空则在任何磁盘上占据0字节。
您的问题涉及文件夹结构在文件系统上占用的空间,显然这取决于该空间。在FAT32上,您只需要存储一些标志(隐藏的,已归档的)以及名称和路径。在NTFS中,您还需要存储权限和其他内容。总而言之,这个空间几乎可以忽略不计。
空目录结构占用的空间取决于名称和文件夹路径。例如,假设您将所有文件夹都放在根驱动器上(例如C :),并使用所有26个字母字符;如果拥有10亿个唯一名称,则可以具有log_26(1.000.000.000)=大约7(6.3065)个字符长度的文件夹名称。因此,7字节* 1.000.000.000大约等于7GB的空间。
仅基于必须采用任何结构的空间名称的数量,这是最小值。如将显示的那样,文件系统在文件结构上存储了除文件名以外的更多信息。
我认为我的所有驱动器中都有大约一百万个文件夹和文件,因此实际上甚至无法实现其价值。不要忘记这是一个非常粗略的估计。
当前使用最多的文件系统可以被认为是FAT(文件分配表)和NTFS(新技术文件系统)。我们知道,FAT自1996年与FAT32一起发布Windows 95以来就一直在使用。尽管已被其他更具弹性的文件系统(例如NFTS(Windows),HFS +(OSX)或ext3(Linux))取代,但由于大多数操作系统都很好地支持它,因此它仍广泛用于手持设备或存储卡或闪存驱动器中。最重要的是,它很简单。
现在什么都重要。FAT分区中的文件和目录即使没有内容,也具有名称,位置,某些属性等,这些文件和目录存储在称为目录表的区域中。
该目录表是一个特殊的文件(即它是从经常使用隐藏,使得只有操作系统和某些应用程序可以直接访问它)。它代表一个目录(又名文件夹),并且其中存储的任何文件或文件夹在表中都有32字节的条目。由于目录表是一个文件,因此它占据一个或多个集群(即,磁盘中具有预设大小的框,其中仅适合一个文件(或一个文件的一部分))。
因此,现代驱动器(> 512 MB)上的任何文件夹或目录都至少具有4 KB的开销,以便存储表(源)。但是,这意味着您可以在同一文件夹中存储128个不同文件(4 * 1024 B / 32 B = 128),并且存储记录的开销仍然与以前相同4KB。
the带在第一个示例上,这意味着数十亿个文件夹的开销为32 GB,而不是我计算的大约7 GB的开销。这32 GB不仅存储短名称(8个ASCII字符),而且存储属性,标志,访问,创建和修改日期以及其他旧属性。
假设您已读完所有这些内容,可能会有一个问题:“这很好,但是如何存储长名称(例如Wabbajack或什至是低俗的名称,例如e4d909c290d0fb1ca068ffaddf22cbd0)?”
Microsoft在Windows 95中决定添加该功能以增强用户体验。为了避免破坏“接近标准”的系统,他们使用了一种称为VFAT(虚拟FAT)的简洁解决方法。从本质上讲,为了使长文件名适合文件,在实际文件记录之前写入了其他记录(具有一些较早系统看不到的特殊属性)。长文件名系统允许最大长度为255个UTF-16(Unicode)字符(源) (源)。
如果将第一个示例更改为每个文件夹包含9个字符,则开销将由32 GB翻倍至64 GB,因为还需要再写入一条记录来存储长名称。
根据Wikipedia关于NTFS的文章,所有权限都存储在“主文件表”中。它的空间显然是经过磁盘碎片整理可以看出,如在这里。
MFT记录在文件夹或文件中占据的大小在此处描述:
文件和文件夹记录各为1 KB,并存储在MFT中,其属性被写入MFT中分配的空间。除文件属性外,每个文件记录还包含有关文件记录在MFT中的位置的信息。
当文件的属性适合该文件的MFT文件记录时,它们称为常驻属性。文件名和时间戳等属性始终是常驻的。当文件的信息量不适合其MFT文件记录时,某些文件属性将变为nonresident。非居民属性分配一个或多个磁盘空间群集。非居民属性的一部分保留在MFT中,并指向外部群集。NTFS创建“属性列表”属性来描述所有属性记录的位置。表格NTFS文件属性类型列出了NTFS当前定义的文件属性。
因此,在NTFS中,文件夹至少要占用1 KB的空间,除非它们具有很长的参数和权限列表。那时,MFT记录在分区中占据了一个额外的群集,该群集的大小取决于其格式化方式,尽管该帖子中的Microsoft建议使用2KB以上的群集,而不是2GB。
对于一个真实的示例,我只是记录了我的可用空间,然后创建了一个大型目录结构,并减去了新的可用空间,以发现已使用了多少空间。我为一周中的每一天创建目录0-6,然后在目录0-23中创建一天的小时,然后在目录0-59中创建小时的分钟。总共有10,080个目录。我的光盘使用量更改了6,926,336字节。这相当于每个目录687个字节。如果您关心的话,这也可以算出1TB驱动器的0.0006%(如果您将1TB计算为1024 ^ 4)。