快照是云盤在某一個或多個時間點的數據備份,可以將當前云盤恢復到快照對應歷史時間點的云盤數據。本文為您介紹創建快照和刪除快照的原理、快照容量的計算原理以及快照容量與云盤容量的關系等。
創建快照原理
您可以根據需要為云盤手動或自動創建快照。具體操作,請參見創建快照或創建自動快照策略。
原理說明
快照分為全量快照和增量快照。云盤創建的第一份快照是創建時間點云盤上所有數據塊的全量快照,不備份空數據塊。后續創建的快照均是增量快照,僅備份上一個快照以來有變化的數據塊。全量快照和增量快照的元信息中均會存儲全量的數據塊信息,因此在通過任一快照回滾云盤時,均可以恢復對應歷史時間點的所有云盤數據。
云盤初始化后會在邏輯塊地址LBA(Logical Block Address)的基礎上劃分數據塊(Block)作為快照數據備份的最小粒度,一旦數據塊有業務數據寫入,就將參與計量。云盤的數據寫入和修改不會對已創建的快照造成影響,快照也不會影響原云盤的數據。
快照創建完成后,將存儲在對象存儲OSS中。
在OSS支持同城冗余的地域,將默認使用同城冗余OSS來存儲您的快照數據,以最大程度保證您快照數據的冗余性。
在OSS暫不支持同城冗余的地域,將使用本地冗余OSS來存儲您的快照數據。如果您的業務可用性要求較高,建議您使用復制快照來進一步備份數據。
出于數據安全性考慮,您不能選擇使用自己創建的OSS Bucket來存儲快照數據。
有關對象存儲OSS支持同城冗余的地域信息,請參見存儲冗余概述和創建同城冗余存儲Bucket。
使用快照創建云盤或回滾云盤后,需要把快照數據從OSS加載到云盤中,云盤被讀取的數據會優先加載。這個過程的持續時間受快照數據量的影響,需要幾分鐘到幾小時。在快照數據被全部加載到云盤之前,云盤的讀訪問時延將會增加。一旦快照的所有數據塊都被加載到云盤中,后續的讀訪問將會恢復到正常的性能水平。
示例說明
假設ECS實例的某塊云盤分別在10:00和11:00有新的業務數據寫入,那么該云盤快照的原理說明如下:
9:00時,云盤的數據塊為A、B和C,此時創建第一份快照1,快照1中就備份了數據塊A、B和C??煺?為全量快照,備份了該云盤上在創建快照1時的所有數據。
云盤繼續寫入數據,修改數據塊A為A1、修改數據塊B為B1、新增數據塊D。在10:00時創建第二份快照2,快照2僅備份有變化的數據塊A1、B1和D,快照2為增量快照??煺?的元信息中會記錄云盤全量的數據塊A1、B1、C和D,其中數據塊C來源于快照1。
云盤繼續寫入數據,修改數據塊C為C1、新增數據塊E,在11:00時創建第三份快照3,快照3僅備份有變化的數據塊C1和E,快照3為增量快照。快照3的元信息中會記錄云盤全量的數據塊A1、B1、C1、D和E,其中數據塊A1、B1和D來源于快照2。
以此類推。
刪除快照原理
原理說明
與創建快照相反,在刪除快照時,需要根據快照包含的數據塊以及數據塊的引用關系來進行空間的釋放。當云盤的第一個快照刪除后,全量快照的屬性會順延到后面的第一個增量快照。如果此時云盤沒有創建快照,在云盤下次創建新快照時也為全量快照,會備份云盤創建以來所有寫入的數據塊。
示例說明
假設ECS實例的某塊云盤創建了快照1、快照2和快照3,各快照包含的數據塊示例如下:
快照1:包含數據塊A、B和C。
快照2:包含數據塊A1(數據塊A修改為A1)、B1(數據塊B修改為B1)、C(數據塊C無變化)和D(新增數據塊),其中數據塊C來源于快照1。
快照3:包含數據塊A1(數據塊A1無變化)、B1(數據塊B1無變化)、C1(數據塊C修改為C1)、D(數據塊D無變化)和E(新增數據塊),其中數據塊A1、B1和D來源于快照2。
那么刪除該云盤快照的原理說明如下:
假設14:00時刪除快照1,快照1包含的數據塊A和B無引用關系會直接刪除,由于數據塊C被快照2引用,因此會保留。此時快照2變為全量快照,快照2包含數據塊A1、B1、C、D,快照3仍為增量快照。
15:00時刪除快照2,快照2包含的數據塊C無引用關系會直接刪除,由于數據塊A1、B1、D均被快照3引用,因此會保留。此時快照3變為全量快照,包含了數據塊A1、B1、C1、D和E。
16:00刪除快照3,此時數據塊無引用關系,快照中的所有數據塊均會被刪除。
快照容量計算原理
原理說明
云盤的快照總容量以快照鏈(一塊云盤中所有快照組成的關系鏈)為粒度進行統計,統計當前云盤所有快照的數據塊占用的存儲空間??煺杖萘可婕暗母拍钫f明如下:
快照全量大?。簡蝹€快照所有數據塊占用的存儲空間大小。
快照增量大?。寒斍翱煺张c同一快照鏈中上一份快照之間不同的數據塊占用的存儲空間大小。
快照總容量:第一份快照(即全量快照)的全量大小與后續所有增量快照的增量大小之和。
說明快照不保存在云盤中,不會占用云盤空間,會按照快照容量收取快照存儲費用(分地域計費)。更多信息,請參見快照計費。
您可以在ECS控制臺上通過快照鏈查看快照容量的大小。具體操作,請參見根據快照鏈查看快照容量。
示例說明
假設ECS實例的某塊云盤分別在10:00和11:00有新的業務數據寫入,那么該快照容量計算示例說明如下:
假設云盤的數據塊為A(2 MB)、數據塊B(2 MB)和數據塊C(2 MB),在9:00時創建第一份快照1,快照1中就會備份數據塊A、數據塊B和數據塊C??煺?為全量快照。
快照1容量=數據塊A容量+數據塊B容量+數據塊C容量=6 MB
云盤繼續寫入數據塊A1(2 MB)、B1(2 MB)和D(2 MB),在10:00時創建第二份快照2,快照2僅備份自快照1以來有變化的數據塊A1、數據塊B1和數據塊D。快照2為增量快照。
快照2容量=數據塊A1容量+數據塊B1容量+數據塊D容量=6 MB
云盤繼續寫入數據塊C1(2 MB)和數據塊E(2 MB),在11:00時創建第三份快照3,快照3僅備份自快照2以來有變化的數據塊C1和數據塊E??煺?為增量快照。
快照3容量=數據塊C1容量+數據塊E容量=4 MB
該云盤的3個快照總容量=快照1容量+快照2容量+快照3容量=16 MB
快照容量與云盤容量的關系
云盤的單個快照容量不會超過云盤容量,但是隨著快照的增加,云盤容量可能會小于所有快照的總容量。
假設您創建了一個40 GB的云盤,第一次寫入了20 GB的數據,那么此時創建的快照容量是20 GB。然后繼續寫入10 GB數據,云盤容量仍然是40 GB,但此時快照總容量就是30 GB,以此類推。您可以通過快照鏈查看快照容量的大小。具體操作,請參見根據快照鏈查看快照容量。
如下圖所示,①是云盤容量大小,②是當前云盤包含的所有快照容量大小。
快照容量與系統容量的差異
快照容量會以固定大小的數據塊(Block)作為快照數據備份的最小粒度,以此來計算快照容量大小。
當用戶在云盤內進行刪除文件操作時,系統顯示的容量會減少,但通常對于操作系統的文件系統來說,刪除文件僅是標記文件為刪除,并不會真正地物理刪除該文件對應的數據。因此,對于云盤來說,刪除文件也是一個寫入操作,并不會減少云盤真正的數據占用空間,相應地如果此時創建快照,快照依然會包含該刪除文件對應的數據塊。除非操作系統內的文件系統真正執行了文件刪除,您可以詳細了解文件系統的TRIM機制。
用戶無主動寫入系統盤的行為,但快照容量依然可能增長。操作系統在運行時會產生系統文件,同樣會寫入云盤,并備份在快照中。
一份快照的容量大小可能略大于云盤寫入數據的大小。因為文件系統的一些元數據信息會占用云盤空間,快照的數據塊會包含該元數據信息及用戶寫入的真實數據信息。例如,用戶只在云盤中創建1 MB的文本文件,快照備份的數據大小因為有文件系統元數據的存在會略大于文本文件的大小,即快照容量會大于1 MB。