作者 主題: [分享]由單檔最大16G來看indirect block的作用.  (閱讀 5868 次)

0 會員 與 1 訪客 正在閱讀本文。

ericshei

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 2257
    • 檢視個人資料
由單檔最大16G來看indirect block的作用.

這裡是在假設您己經了解inode 與 data block之間關係的前提下,作分享!

在inode之中,有15個data block的pointer可以用,也就表示透過inode上的pointer我們最多可以找到該檔案存放資料的15個datablock,
若假設一個datablock為1k,那便表示ext2檔案系統上單檔最大只能到15k,但事實是否如此呢?

其實不然,在ext檔案系統上使用indirect block的機制,來突破pointer數量上的限制:
簡單的說inode上的pointer可以指到indirect block上,而indirect block的內容基本上是指向其它data block的pointer,
如此一來便可以增加指向data block的pointer.

若上述能理解,再來要知道的是indirect block分為三個(indirect block,double indirect block及triple indirect block),
而inode中的15個pointer中最後三個pointer便是分別指向到這三個block,其餘前面12個pointer便直接指向到所用到的data block上.
因此若一樣假設一個datablock為1k,那小於12k的檔案或許就用不到indirect block了.

接下來可以了解一下indirect block,double indirect block及triple indirect block之間的差別,其實說穿了,只是指向層級上的差別而己:


indirect block   :先做一下假設,若一個block是1024bytes(1k),而一個indirect block中的一個pointer佔4 bytes,那基本上一個indirect block有256個pointer可以指向256個data block,所以到這裡我們又多了256個data block可以用,也就是單檔的最大限制又多個256k.

double indirect block   :只是再多一個層級的pointer,也就是說double indirect block中的256個pointer不是指向data blcok,取而代之的是指向另外256個indirect block,想當然的是這256個indirect block中的256個pointer會在指向其它256個data block,所以到這裡我們又多了256 x 256 (65536)個data block可以用,也就是單檔的最大限制又多個65536k可用.

triple indirect block   :則又再多一個層級的pointer,也就是triple indirect block所指向的indirect block中的pointer又再次指向其它的indirect block,接著其中的pointer才指向data block,所以到這裡我們可達256 x 256 x 256 (16777216)個data block可以用,相檔於16GB的空間可以用.

如果你曾聽過在ext filesystem上,當block size設為1k時,單檔最大約為16GB的原因便是如此了.

有錯再請各位前輩指正!!