1. 程式人生 > >儲存基礎知識(一)重定向寫快照原理

儲存基礎知識(一)重定向寫快照原理

           我目前所瞭解的快照有兩種,第一種是COFW 寫時拷貝,在修改資料塊時將原來資料原封不動的拷貝到快照資源儲存空間,已達到保護的目的,第二種,就是我將要說的寫時重定向ROW,他跟COFW不同的時在保護資料的時候不會發生資料拷貝,只需要在原儲存空間申請新的資料塊,使用者讀資料時會重定向到新的資料塊,不需要做拷貝。

            這種重定向的快照基於一種特殊的lun,精簡LUN,簡單介紹下這種LUN。有兩個儲存區,物理區和私有區,私有區用來儲存管理資訊,地址對映,而物理區真正的儲存資料。

             當用戶首次寫原Lun的時候,假設從0位置起始開始寫資料,大小為一個數據塊8k,原理圖如下:

首先,根據使用者所寫的範圍大小,產生一個邏輯地址,這裡也叫lba,標誌使用者寫資料的位置。物理區也會產生一個標誌哪個資料塊的實體地址pba,這個pba與lba通過私有區一一對映,也即,一個數據塊有lba和pba且一一對應。二元組是用來記錄所保護的資料,有兩個值一個lba,一個pba,表示lba資料塊的資料修改前的資料存放在pba的位置。

使用者剛開始寫的時候,發現原Lun 是沒有資料的,此時要給第一個資料塊寫A。它會先去根據寫的位置lba=0讀地址對映,查改lba對應的pba,發現未對映過,pba為全ff,此時要去保護寫A之前的資料,寫A之前沒資料,所以lba=0,pba = ff;再把A寫到lba=0,pba=0的位置。

同理有數的lun也是如此:

使用者給A位置寫A',查地址對映發現A的地址對映存在且為0,即pba = 0;這時,會在物理區新分配一個數據塊,並把A'寫進去,同時把之前對映A的地址修改為對映A',二元組中存放的是lba =0,pba= 0;使用者下次來讀lba=0的位置會讀到A',而A被保護在二元組中,要想回到A,需要會滾到該時間點之前。