天天看點

FAT在RAID恢複中的應用(1):計算塊大小

我們知道,FAT表的表項号是連續的,即由0開始編号,0号表項與1号表項由系統保留做特殊用途。使用者資料由2号表項開始使用,也就是2号簇對應的FAT表項。表項内記錄的簇号可能是不連續的,但表項号本身則是連續的。利用表項号的這個連續性,我們就可以計算RAID塊的大小。

利用FAT表計算塊大小的原理就是,相鄰磁盤的同條帶同位置的FAT項間占用的空間是一個塊大小。如圖11.1所示。

圖11.1中,磁盤0和磁盤1是陣列中兩塊相鄰的磁盤,FAT項N位于磁盤0的某個塊,當該塊寫滿後,就會轉至磁盤1的同條帶進行寫入。FAT項M是磁盤1上與FAT項N同條帶同位置的FAT表項,這樣,由FAT項N開始至FAT項M前的空間即為一個塊(灰色加亮部分)。是以,我們可以得出以下公式:

塊大小扇區數 = (M – N)* 每FAT表項位元組數 / 每扇區位元組數

最大的問題是,每個表項内記錄的值是為目前資料配置設定的下一個簇的簇号,而并不記錄表項号本身,我們必須想辦法得到目前FAT項的表項号才可以進行計算。那麼,如何得到這個表項号呢?

我們知道,系統為檔案配置設定空間時,會優先為其配置設定連續的空間,這時,它們的簇号就是連續的。簇号連續,則記錄這些簇号的相應表項也是連續的,如圖11.2所示。簇号14、15、16連續,則它們所在的表項的号碼也是連續的。

          是以,我們可以找到至少有三個連續的簇号記錄位置,取中間的簇号值(原則上另一磁盤的相同位置也需要符合同樣要求,但并不意味着不是三個連續的記錄位置就一定不能使用,因為可能會有結束标記存在。後面我們的執行個體中2.img中所取的位置就沒有明顯的三個簇号連續)。對于圖11.2中的記錄值為15的簇來講,它的值實際上是目前位置的表項号14加1而來。同樣,對于圖11.1中來講,在磁盤0上FAT表項為N的位置實際記錄的是下一簇的簇号N+1;同樣,磁盤1中FAT項為M的位置記錄的是下一簇的簇号M+1,M-N與(M+1)-(N-1)結果是相同的。是以,我們可以使用符合要求的位置記錄的簇号直接進行計算。為了便于了解,下面我們将示範一個執行個體的計算。

本文轉自老骥伏枥51CTO部落格,原文連結:http://blog.51cto.com/sjhfml/134060 ,如需轉載請自行聯系原作者

繼續閱讀