稀疏文件中分配范围的大小和数量有哪些限制?

时间:2016-11-23 09:27:07

标签: ntfs sparse-file

我正在开发一个将数据写入NTFS稀疏文件的软件,我找不到任何关于NTFS稀疏文件限制的文档。

我已经看到存在限制这一事实,但没有提到这些限制。

具体而言,我对稀疏文件的最大文件大小和文件中已分配范围的数量有任何限制。

2 个答案:

答案 0 :(得分:1)

答案取决于文件的稀疏程度以及硬盘的群集大小。

与大多数其他文件系统一样,NTFS将文件视为磁盘集群的有序列表。那个"有序列表"是文件系统中的物理数据结构,占用磁盘空间。随着此列表中记录数量的增加,文件系统必须分配更多物理块来保存它。但是,它可以添加的块数最终是有限的(参见参考资料)。

所以,让我们假设您有一个1TB磁盘,默认情况下具有4kb簇大小,并且您写了512GB文件。

  • 如果您按顺序写入该文件,系统将尝试分配连续的块,并且列表中的条目数量相对较少(文件中的片段)。
  • 如果您随机编写该文件,您将创建一个稀疏文件;每次编写之前未编写过的块时,都必须为该块分配一个簇。由于您是随机编写的,因此操作系统可能无法分配连续的群集,因此您在列表中会有更多条目。您的512GB文件可能需要134,217,728个片段(假设我已正确完成数学运算)。

我不知道这些碎片数量是否会超出NTFS管理结构的容量。但是我们假设它是。如果您使用的卷大小为64k(导致8,388,608个碎片),您可能仍然可以管理该文件。

除了碎片耗尽的可能性之外,严重碎片化的文件效率会降低,因为访问任何特定块需要遍历碎片列表才能找到该块(我假设某种形式的二进制搜索涉及,但它仍然比检查一个包含所有块的片段更糟糕。此外,当使用磁介质时,整个磁盘访问将是次优的,因为紧密编号的块可能位于驱动器上的广泛不同的位置。在我看来,更好的是预先分配并顺序初始化整个文件(当然,除非您不打算在其中存储大量数据)。

参考资料(均来自Microsoft):

  • How NTFS Works - NTFS文件系统中结构的概述。
  • The Four Stages of NTFS File Growth - 由Microsoft的支持团队成员发布,详细说明文件的分配节点如何随时间增长。另请参阅后续帖子,其中显示了部分解决方法,增加了分配记录的数量。

答案 1 :(得分:1)

documentation on the error code中你会得到一些关于限制的提示:

具体做法是:

  

如果您计划使用具有许多就地块的超大文件(超过500 GB),则应使用" / L"来格式化卷。适应大型文件记录的选项。默认情况下,卷的格式设置为使用小型文件记录。

documentation of the "/L" option具有每个NTFS文件的近似最大区数:

  

启用对大型文件记录段(FRS)的支持。这需要增加卷上每个文件允许的范围数。对于大型FRS记录,限制从大约150万个范围增加到大约600万个范围。