1

エクステントツリーの深さを増やすにはどうすればよいですか?どのくらいのスペースを割り当てる必要がありますか?より正確に言うと、深さは1より大きくする必要があります。

4

1 に答える 1

2

ext4では、iノードはデフォルトで60バイトを使用して4つのエクステントをアドレス指定します(ヘッダーの場合は12バイト+エクステントの場合は4 * 12バイト)。すべてのエクステントは、最大128MiB(デフォルト)のデータを保持できます。ファイルが4*128MiB(> 512MiB)より大きい場合、ext4はそのためのエクステントツリーを構築しています。したがって、これで深さ=1に到達します。

ここで問題となるのは、いつdepth=2に到達するかです。〜700MiBのファイルを試して、エクステントの深さが1であることを確認しました。次に、エクステントでインデックス付けされたfs-blockを開き、ヘッダーを分析しました。

    0A F3 06 00 54 01 00 00 00 00 00 00 00

通常のマジックナンバーはf30Aで、次の2バイトはエクステントの数を示しているはずです。(この場合= 6であり、700/128 = 6であるため意味があります)。次の2バイト0154は、(ヘッダー情報による)エクステントの最大数を示しているはずです。私の場合は最大340です。

->では、なぜ340なのですか?ext4の実際のfs-blockサイズを見ると、デフォルトは4096バイトです。各インデックスは12バイトで構成されています。ヘッダー=4092の場合は340*12 = 4080 + 12であるため、このfsブロックに収まるエクステント情報の最大数です。

これを正しく解釈すると、このfsブロックに最大340個の他のポインター/リーフ/インデックスを保存できます。これらの340のそれぞれは、エクステント(最大128MiBを保持できます)を参照します->したがって、次のようになります:340 * 128MiB〜43,5 GiB

さらに、各iノードは最大4つのエクステントを保持できます。ですから、この数に4を掛ける必要があると思います。

    -> so I think your file should be > 4*340*128MiB ~ 174GiB to reach depth=2

この仮説はまだテストしていませんが、すぐに試してみます。一方、誰かが私を間違って挑発することができれば、私も幸せです。:)

于 2013-01-30T01:51:21.837 に答える