1

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

我看到提到存在限制这一事实,但没有看到这些限制是什么。

具体来说,我对稀疏文件的最大文件大小和文件内分配范围的数量的任何限制感兴趣。

4

2 回答 2

2

有关错误代码的文档中,您将获得一些有关限制的提示:

具体来说:

如果您计划使用具有许多就地块的非常大的文件(超过 500 GB),则应使用“/L”选项格式化卷以容纳大尺寸文件记录。默认情况下,卷被格式化为使用小文件记录。

“/L”选项的文档具有每个 NTFS 文件的近似最大范围数:

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

于 2016-12-07T16:37:37.207 回答
1

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

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

因此,假设您有一个 1TB 的磁盘,默认情况下具有 4kb 的集群大小,并且您写入了一个 512GB 的文件。

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

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

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

参考资料(均来自 Microsoft):

  • NTFS 工作原理- NTFS 文件系统中的结构概述。
  • NTFS 文件增长的四个阶段- 由 Microsoft 支持团队的成员发布,详细说明文件的分配节点如何随时间增长。另请参阅后续帖子,该帖子显示了增加分配记录数量的部分解决方法。
于 2016-11-25T15:11:20.673 回答