2013-01-17 27 views

回答

1

在ext4中,inode默認使用60個字節來尋址4個擴展區(擴展區爲12字節+擴展區爲4 * 12字節)。每個範圍可以保存128MiB的數據(默認情況下)。 如果一個文件大於4 * 128MiB(> 512MiB),ext4正在爲此構建一個擴展樹。所以你會達到深度= 1。

現在的問題是什麼時候你會達到深度= 2。我嘗試了一個〜700MiB的文件,並檢查了範圍深度爲1.然後,我打開由範圍索引的fs塊並分析了頭文件。

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

它具有f30A的典型幻數,接下來的兩個字節應表示範圍的數量。 (在這種情況下= 6,這是合理的,因爲700/128 = 6)。 接下來的2個字節0154應該表示在我的情況下達到340的範圍的最大數量(根據標題信息)。

- > so why 340?如果我們看看ext4的實際fs塊大小,則默認爲4096字節。 每個索引由12個字節組成。 340 * 12 = 4080 + 12爲頭= 4092,所以它是可以放入這個fs塊的最大數量的extent-info。

如果我正確解釋這個,你可以在這個fs塊中最多保存340個其他指針/葉/索引。這些340中的每一個都指的是一個範圍(可以容納128MiB) - >因此它涉及:340 * 128MiB〜43,5 GiB

此外,每個inode最多可容納4個擴展區。所以我想這個數字需要乘以4即使。

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

我還沒有測試這個假設,但我會盡快嘗試。同時,如果有人能夠推測我錯了,我也很高興。 :)

+0

謝謝,如果這真的是這樣(我不明白爲什麼它不應該),這是非常傷心:))無論如何,再次感謝,如果你嘗試它,在我做之前,讓我知道。 –