從csdn上得到很多資料,貢獻不多,很慚愧。
由於工作關係,近期學習一些linux 軟體raid相關的**,網上找到一些相關的介紹內容,對於bitmap機制介紹得較少,正好看到這塊,在共享精神感召下,咱不揣淺薄,也把自己的一些學習情況記錄下來,希望大家多多指正。
在raid1
,raid5
等存在資料冗餘的磁陣結構中,資料的完整性要求冗餘的資料和原始資料的資訊要保證一致。磁陣的寫操作是乙個過程,這個過程中發生異常,可能導致冗餘資料和原始資料不一致,例如磁碟更換,寫盤失敗,系統掉電等。
在系統要盡快使資料恢復一致,以使得磁陣後續可以正常工作,磁陣從資料不一致狀態恢復的過程就是同步。
假設系統重新上電後,如何知道哪些資料出於不一致狀態呢?如果沒有其他資訊的話,它只能假定所有資料都可能不一致,進行所有資料塊的一致性恢復。對於
raid5
,就是重新計算所有條帶的效驗和;對於
raid1
,就是重新同步所有資料塊到映象盤。這種全域性資料同步會導致系統開機過程及其漫長(或者就整個放任磁陣上電後處於不一致的狀態)。
專業的磁陣中,一般都會有
nvram
(非易失性記憶體),在對乙個資料塊寫操作開始的時候,在
nvram
中儲存寫位置資訊,寫操作結束後,在
nvram
中刪除這個資訊。這樣,在系統開機時,從
naram
中讀出儲存的寫位置資訊,這些位置資訊記錄了未成功寫入的資料塊,系統只需要對這些資料塊進行同步即可,而不用同步磁陣全部資料。
nvram
需要硬體支援,也比較昂貴,那我們
pc機上使用軟體
raid
構建的磁陣,又該咋辦呢?這個就引出了
bitmap
檔案,可以理解
bitmap
檔案的作用等同於上述專業磁陣的
nvram
(當然上述的場景只是
nvram
應用的乙個小的方面)的作用,不過這個
bitmap
是儲存在磁碟上的。
bitmap
的工作原理說來也是直截了當的,檔案的內容就是乙個位圖,每個位對應磁陣的乙個資料塊(粒度可以做得比塊更粗些),在磁陣資料寫入前,設定該資料塊對應的位,磁陣寫入完成,則清除該資料塊對應位。要進行同步時,參照
bitmap
,只有設定了的位對應的資料塊才需要進行同步,是不是很簡單?
下面對**的分析基於2.6.21核心。
MD中的bitmap(4) Bitmap的設定
bitmap 在磁陣處理寫訪問請求時,呼叫 bitmap startwrite 設定bitmap 記憶體的資訊,包括記憶體中的 bitmap 結構,以及記憶體中 bitmap 磁碟檔案的對映 filemap 在磁陣實際將寫請求實際提交給子裝置前,呼叫 bitmap unplug 將bitmap 資訊...
MD中的bitmap(3) Bitmap初始化
bitmap create 完成bitmap 的初始化,該函式在磁陣啟動時或者使用者設定 bitmap 檔案時被呼叫,主要完成 bitmap 從磁碟到記憶體的載入 1.前面說過,bitmap 檔案在磁碟上可能有兩個位置,分別以檔案指標或者與超級塊之間的偏移來指定。2.讀入超級塊,注意 bitmap ...
Redis中bitmap的妙用
在redis中我們經常用到set,get等命令,細心的你有沒有發現,還有幾個相似的命令叫setbit,getbit,它們是用來幹嘛的?就是通過乙個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。我們知道8個bit可以組成乙個byte,所以bitmap本身會極大的節省儲存空間。r...