XFS 等文件系统上的理论最大文件大小是如何计算的?

XFS 等文件系统上的理论最大文件大小是如何计算的?

XFS 文档声称其当前理论最大文件大小为 8 艾字节 - 1 字节。不过,我想知道这个计算是如何计算的?我似乎在其他地方找不到对此的讨论,而且我也很好奇,如果我安装了文件系统,是否有办法验证这一点?

答案1

我想知道这个计算(8 艾字节 - 1 字节)是如何计算的?

文件大小存储在有符号的 64 位整数中,范围从 -2^63 到 2^63-1。由于 1 exbibyte 为 2^60 字节,因此 2^63-1 对应于 8 exbibytes - 1 字节。

我也很好奇,如果我安装了文件系统,是否有办法验证这一点?

是的,试试这个:

truncate -s 9223372036854775807 test && ls -l test

...或者如果你没有truncate

dd if=/dev/null of=test bs=1 seek=9223372036854775807 && ls -l test

(你猜对了,9223372036854775807 是 2^63-1)

答案2

一般来说,即使没有显式存储大小,也必须确定两件事:数据块的存储位置以及每个块可以有多大。您取每个值的最大值,然后相乘以获得最大文件大小。具体细节取决于每个文件系统。在 XFS 中,块被称为“范围”,范围的数量(di_nextents根据XFS 文档草案) 是有符号 32 位整数。范围 ( di_extsize) 的大小是无符号 32 位整数。这给出了 (2^32 - 1)*(2^31 - 1),这是一个相对较小的位 (2^32 + 2^31 - 1 = 3*2*2^30 - 1 ~ 6 GiB),小于8 欧洲银行。

根据文件系统的不同,块的数量本身可能会更复杂一些(例如,每个 inode 可能有一个包含 N 个数据块的列表和一个包含该文件的 M 个其他 inode 的列表,深度可达 K,那么您将得到 N*(M^(K+1) - 1)/(M-1) 个数据块总数的限制。

相关内容