目录消耗多少空间?


13

空目录需要多少空间?

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

目录实际上占用了多少?它取决于文件系统还是操作系统?


1
从技术上讲,“属性”窗口向您显示的是文件夹的内容,如果为空则在任何磁盘上占据0字节。您的问题涉及文件夹结构在文件系统上占用的空间。它显然取决于文件系统。在FAT32上,您只需要存储一些标志(隐藏的,已归档的)以及名称和路径。在NTFS中,您还需要存储权限和其他内容。总而言之,这个空间几乎可以忽略不计。
Doktoro Reichard

那么,在NTFS上,空字典占用多少空间?例如,如果我制作了十亿个目录,这是多少空间?
ShadowHero 2013年

如我所说,取决于名称和文件夹路径。假设您使用全部26个字符,并且拥有10亿个唯一名称,则您可以拥有大约7个字符长的文件夹名称。因此,7字节* 1.000.000.000大约等于7GB的空间。我想这是最低要求。我认为我的所有驱动器中都有大约100万个文件夹,因此实际上甚至无法实现其价值。不要忘记这是一个非常粗略的估计。
Doktoro Reichard

不错,我知道...权限的存储方式是什么?
ShadowHero 2013年

1
@AthomSfere Hmm ...这意味着文件夹不能存储无限的用户权限,除非可以分配多个MFT记录。将尝试查找它。
Doktoro Reichard

Answers:


16

从技术上讲,“属性”窗口向您显示的是文件夹的内容,如果为空则在任何磁盘上占据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。


1
我在前面提到的有关1024字节长度的信息中找到了一些信息,c-ad.bnl.gov / kinyip / windows / MFT.html。它是一本很好的读物,如果您愿意扩展,它可能会对您的回答有所帮助。
法国的Austin T

我想扩展一下(使它成为一个更完整的答案,而不必太过于技术性……),尽管我不得不将其留给明天。无论如何,感谢您的消息来源。
Doktoro Reichard

技术更正:没有255个路径限制。相反,标准路径的最大长度限制为260个字符,然后,真正的unicode路径(使用`\\?`指示符)的扩展长度路径为32,767个字符(是,超过32,000 字符)。普通的扩展长度路径,或作为UNC路径)。有关更多详细信息,请参阅docs.microsoft.com/zh-cn/windows/win32/fileio/…
Mike'Pomax'Kamermans

3

对于一个真实的示例,我只是记录了我的可用空间,然后创建了一个大型目录结构,并减去了新的可用空间,以发现已使用了多少空间。我为一周中的每一天创建目录0-6,然后在目录0-23中创建一天的小时,然后在目录0-59中创建小时的分钟。总共有10,080个目录。我的光盘使用量更改了6,926,336字节。这相当于每个目录687个字节。如果您关心的话,这也可以算出1TB驱动器的0.0006%(如果您将1TB计算为1024 ^ 4)。


3
您可以将文件系统添加到答案中吗?目录名都短吗?
fixer1234 '16

0

在Windows 10上,我创建了1,000,000个空文件夹,根据python的getsize功能,它占用了200540160字节的空间。每个文件夹平均200.54016字节。

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.