XFSなどのファイルシステムでは、理論的最大ファイルサイズはどのように計算されますか?

XFSなどのファイルシステムでは、理論的最大ファイルサイズはどのように計算されますか?

XFSドキュメントでは、現在理論的最大ファイルサイズは8エクサバイト - 1バイトであると記載されています。ところで、この計算がどのように行われるかを知りたいです。他の場所ではこれについての議論が見つからないようですが、ファイルシステムがマウントされている場合はこれを確認する方法があるかどうか疑問に思います。

答え1

この計算(8エクサバイト - 1バイト)がどのように計算されるかを知りたいです。

ファイルサイズは、-2^63から2^63-1の範囲の符号付き64ビット整数として保存されます。 1 エクビバイトは 2^60 バイトなので、2^63-1 は 8 エクビバイト - 1 バイトに対応します。

また、ファイルシステムがマウントされている場合は、これを確認する方法があるかどうか疑問に思います。

はい、次を試してください。

truncate -s 9223372036854775807 test && ls -l test

...または1つもない場合truncate

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

(予想されたが、9223372036854775807は2^63-1です)

答え2

通常、明示的なストレージサイズがない場合でも、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) 総データブロック数の制限。

関連情報