Wednesday, March 22, 2017

Storage Snapshot 原理


本來以為 snapshot 可以跳過 因為一般 IT 大都講到爛了
不過後來因為想廢話 Compellent Auto-Tiering 的時候 要把這部分擺進去 怎麼擺位置都不對
乾脆就獨立出來先針對這大家都知道的功能打打屁吧

因為大家都知道了 就快速哈拉就好

一般來說 Storage 內部 大概就是Controller 把Data 分散寫入 一堆 Block 裡面
需要的時候 Controller 知道要去哪個 Block 去取 Data 送到前端使用
例如下圖 目前有 A, B, C 三個 Block 存放 Data 供複寫 或是讀取


假設第一個 Snapshot 1 產生, Block A, B, C 會變成 Read Only Block (圖示以實心表示)
這時候讀取還是沒問題 一樣去 Block A, B, C 讀出來


假設這時候 有兩份資料要寫進來
一份是要改原本 Block A的內容
另一份是要新增在新的區域 Block D
這樣的話 目前供寫取的區域會變成 A1, B, C, D
但是如果要回去當初 Snapshot 1 時間點 取資料的話會變成取用 A, B, C
不會去讀取 D, 因為產生 Snapshot 1的時間點 Block D 並不存在


這時候如果又產生 Snapshot 2, 一樣 Block A1, D 會變成 Read Only Block

同樣的 又有資料進來 要改A1區域的資料 會直接存放在 A2
並且新的資料 E 也被加進來
此時會有三個時間點可以取用
目前供讀寫的為 A2, B, C, D, E
Snapshot 1 時間點資料為 A, B, C
Snapshot 2 時間點資料為 A1, B, C, D


之後 哪天已經不需要 Snapshot 1 時間點的資料了 就把 Snapshot 1 刪除
Snapshot 1 時間點 Block A 因為在 Snapshot 2 時間點 已經有 A1 取代 所以直接刪除
而 Snapshot 1 剩兩個 Block B, C 會被合併到 Snapshot 2

當然 Block B, C 並不會真的搬 只是直接把 Snapshot 1 指標刪除即可


搞定 下篇就可以專心廢話 Compellent Auto-Tiering

No comments:

Post a Comment