數據備份 快照技術 之第一次寫時複製(COW)和寫時重定向(ROW)
1.快照技術
關於指定數據集合的一個完全可用拷貝,該拷貝包括相應數據在某個時間點的映像。
快照相當於給數據拍個照片
2. 第一次寫時複製 COW
COW(Copy-On-Write),寫時拷貝,也稱爲寫前拷貝。
創建快照以後,如果源卷的數據發生了變化,那麼快照系統會首先將原始數據拷貝到快照捲上對應的數據塊中,然後再對源捲進行改寫。
寫操作
如上圖簡要示例,快照創建以後,若上層業務對源卷寫數據X,X在緩存中排隊,快照系統將X即將寫入的位置(邏輯地址)上的數據Y,拷貝到快照卷中對應的位置(邏輯地址)上,同時,生成一張映射表,表中一列記錄源捲上數據變化的邏輯地址,另一列記錄快照捲上數據變化的邏輯地址。我們可以看到,上層業務每下發一個數據塊,存儲上,發生了兩次寫操作:一次是源卷將數據寫入快照卷(即圖中Y),一次是上層業務將數據寫入源卷(即圖中X)。
讀操作
如上圖,快照卷若映射給上層業務進行數據分析等用途時,針對快照進行讀操作時,首先由快照系統判斷,上層業務需要讀取的數據是否在快照卷中,若在,直接從快照卷讀取,若不在,則查詢映射表,去對應源卷的邏輯地中讀取(這個查表並去源卷讀的操作,也叫讀重定向)。這一點,恰好就解釋了爲什麼快照是一份完全可用的副本,它沒有對源捲進行100%的拷貝,但對上層業務來說,卻可以將快照看做是和源卷“一模一樣”的副本。
也就是說,我們開始有原數據以及創建好的快照,當原數據要發生改變時(暫時在cache中),我們先將即將改變的位置的數據複製到快照,再將數據複製到原始磁盤,然後快照指針更改,存在一個重定向,如果在快照中找不到,即重定向到原始磁盤尋找。
3.寫時重定向
ROW(Redirect-on-write ),也稱爲寫時重定向。
創建快照以後,快照系統把對數據卷的寫請求重定向給了快照預留的存儲空間,直接將新的數據寫入快照卷。上層業務讀源卷時,創建快照前的數據從源卷讀,創建快照後產生的數據,從快照卷讀。
寫操作:
如上圖簡要示例,快照創建以後,若上層業務對源卷寫數據X,X在緩存中排隊,快照系統判斷X即將寫入源卷的邏輯地址,然後將數據X寫入快照卷中預留的對應邏輯地址中,同時,將源卷和快照卷的邏輯地址寫入映射表,即寫重定向。我們可以看到,上層針對源卷寫入一個數據塊X,存儲上只發生一次寫操作,只是寫之前進行了重定向。
讀操作:
若快照創建以後,上層業務對源捲進行讀,則有兩種情況:1)若讀取的數據,在創建快照前產生,數據是保存在源捲上的,那麼,上層就從源捲進行讀取;2)若需要讀取的數據是創建快照以後才產生的,那麼上層就查詢映射表,從快照捲進行讀取(即讀重定向)。
若快照創建以後,上層業務對快照捲進行讀,同樣也有兩種情況:1)若讀取的數據,在創建快照前產生,數據是保存在源捲上的,那麼上層就查詢映射表,從源捲進行讀取;2)若需要讀取的數據是創建快照以後才產生的,那麼上層就直接從快照捲進行讀取。
我們可以看到,ROW快照也是根據創建快照後上層業務產生的數據,來實時佔用必需的存儲空間。