RHEL7snapshot快照原理及實驗

RHEL7snapshot快照原理及實驗

LVMlv提供了快照“snapshot”備份功能,這種功能也只對LVM 有效。snapshot有多種實現方法,這裏只談談寫時複製COW”,不是奶牛哦,是“Copy-On-Write”

 當一個snapshot創建的時候,僅拷貝原始卷裏的源數據,這不是物理上的數據拷貝,因此snapshot的創建特別快,當原始卷裏的數據有寫入時,備份捲開始記錄原始卷哪些數據發生了變化,然後在原始卷新數據覆蓋舊數據時,將舊數據拷貝到snapshot的預留空間裏,起到備份數據的作用,就保證了所有數據和創建備份卷之前的數據一致性。

 而對於snapshot的讀操作,如果是讀取數據塊是沒有修改過的,那麼會將讀操作直接重定向到原始捲上,如果是要讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。所以當原始卷破壞了之後還能用snapshot備份的數據還原。

 參考一份51CTOasram先生】的解釋吧:

 【鏡像分離,是爲了讓鏡像卷保持拆分一瞬間的狀態,而不再繼續被寫入數據。而拆分之後,主卷所做的所有寫IO動作,會以bitmap的方式記錄下來。bitmap就是一份位圖文件,文件中每個位都表示捲上的一個塊(扇區,或者由多個扇區組成的邏輯塊),如果這個塊在鏡像分離之後,被寫入了數據,則程序就將 bitmap文件中對應的位從0變成1。待備份完成之後,可以將鏡像關係恢復,此時主卷和鏡像捲上的數據是不一致的,需要重新做同步。程序搜索 bitmap中所有爲1的位,對應到捲上的塊,然後將這些塊上的數據,同步到鏡像卷,從而恢復實時鏡像關係。

改變塊(changed block)

        快照創建成功後,源和快照共享同一份物理數據拷貝,直到數據發生寫操作,此時源上老數據或者新增數據將被寫向新的存儲空間。爲了記錄和追蹤塊的變化和複製信息,需要一個位圖(bitmap),它用於確定實際拷貝數據的位置,以及確定從源還是目標來獲取數據。

併發(concurrent)

 它與改變塊非常相似,但它總是物理地拷貝數據。當即時拷貝執行時,沒有數據被複制。取而代之,它創建一個位圖來記錄數據的複製情況,並在後臺進行真正的數據物理複製。

 寫時複製快照在快照時間點之後,沒有物理數據複製發生,僅僅複製了原始數據物理位置的元數據。因此,快照創建非常快,可以瞬間完成。然後,快照副本跟蹤原始卷的數據變化(即原始卷寫操作),一旦原始卷數據塊發生寫操作,則先將原始卷數據塊讀出並寫入快照卷,然後用新數據塊覆蓋原始卷。這樣我們訪問快照捲上的數據仍舊是寫操作前的,可以保證我們備份數據的一致性。】

 

檢驗一下snapshot的特點吧:

採取COW實現方式時,snapshot的大小並不需要和原始卷一樣大。那設置成多大呢?第一、根據原始卷數據的改變大小範圍來設置;第二、根據原始卷數據的更新頻率來定。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,那麼這個snapshot就無法使用了。當然,如果你的snapshot大小和原始卷一樣大,甚至還要大,那snapshot備份就絕對的不會崩潰啦。

 

下面就開始吧!

一、新建lv分區,裝上一個系統(可以不用裝,其實這裏只需要說明他是一個我們要備份的數據卷而已)

--->先查看一下vg空閒空間吧

[root@desktop21/]# vgs

  VG   #PV#LV #SN Attr   VSize  VFree

  vol0   2   4   1 wz--n-55.22g 26.22g

--->還有26.22G,建一個3Glv來裝系統吧,lv名稱syslv

[root@desktop21/]# lvcreate -L 3G -n syslv vol0

  Logical volume "syslv" created

[root@desktop21/]# lvdisplay /dev/vol0/syslv

  --- Logical volume ---

  LV Name                /dev/vol0/syslv

  VG Name                vol0

  LV UUID                xQXHqK-N3Oj-y9Z1-TBU6-hAsI-ek3V-PkmVmL

  LV Write Access        read/write

  LV Status              available

  # open                 0

  LV Size                3.00 GiB lv大小3G

  Current LE             96

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:6

--->ok,創建成功,接下來我就裝一個linux的簡易版吧,我就不上圖了,自己要測試的自己去試試

【注意:這個lv建立起來若作爲安裝系統用的話就一定不能格式化了,它是作爲硬盤用了哦,誰見過把硬盤拿來格式化了在裝系統的?他會警告無法識別的硬盤~】

 

二、創建snapshot

終於裝好了,我們來創建一個snapshot備份吧,和lv創建方法差不多,就多加一個參數-s

[root@desktop21/]# lvcreate -s -n snapsyslv -L 50M /dev/vol0/syslv

  Rounding up size to full physical extent 64.00MiB

  Logical volume "snapsyslv" created

[root@desktop21/]# lvdisplay /dev/vol0/snapsyslv

  --- Logical volume ---

  LV Name                /dev/vol0/snapsyslv

  VG Name                vol0

  LV UUID                snoXql-gI1Q-TSsF-F3LN-SyRI-HInY-8cZM3r

  LV Write Access        read/write

  LV snapshot status     active destination for /dev/vol0/syslv

  LV Status              available

  # open                 0

  LV Size                3.00 GiB

  Current LE             96

  COW-table size         64.00 MiB  (我的PE32M,創建的只能是32的倍數)

  COW-table LE           2

  Allocated to snapshot  0.03%  (使用率爲0.03%

  Snapshot chunk size    4.00 KiB

  Segments               1

  Allocation             inherit

  Read aheadsectors     auto

  - currently set to     256

  Block device           253:7

--->oksnapsyslv創建好了,64M,查看一下snapsyslv的詳細信息吧:

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 swi-a- 64.00m syslv    0.07                      

--->我們需要關心的就是上面的使用率0.07%,達到100%就釋放,snapshot就壞了,就沒用了。

 

三、改變原始卷的數據,查看備份卷的變化

1、登錄到syslv所在的系統,新建文件測試

desktop64login: root

Password

[root@desktop64~]# dd if=/dev/zero of=testfile bs=1M count=20

20+0records in

20+0records out

20971520bytes (21 MB) copied, 0.0329396 s, 637 MB/s

--->好了,到我們的機子上看看快照的變化吧,刷新幾下看看

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 swi-a- 64.00m syslv    0.07     

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 swi-a- 64.00m syslv   33.81                      

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 swi-a- 64.00m syslv   33.83                       

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 swi-a- 64.00m syslv   33.83

--->看到嗎?使用率爲33.83%了,快照大小爲64M,原始卷新建20M的文件,看是不是使用率爲33%左右呢?^_^

2、新建大小爲50M的吧,加上之前的20M,看看快照的變化呢

[root@desktop64~]# dd if=/dev/zero of=testfile bs=1M count=50

50+0records in

50+0records out

52428800bytes (52 MB) copied, 0.132893 s, 395 MB/s

--->刷新一下,看看快照變化吧

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 Swi-I- 64.00m syslv  100.00                      

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 Swi-I- 64.00m syslv  100.00                      

[root@desktop21/]# lvs /dev/vol0/snapsyslv

  LV       VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  snapsyslv vol0 Swi-I- 64.00m syslv  100.00

--->100%啦,查看一下快照的狀態?

[root@desktop21/]# lvdisplay /dev/vol0/snapsyslv

  --- Logical volume ---

  LV Name                /dev/vol0/snapsyslv

  VG Name                vol0

  LV UUID                snoXql-gI1Q-TSsF-F3LN-SyRI-HInY-8cZM3r

  LV Write Access        read/write

  LV snapshot status     INACTIVE destination for /dev/vol0/syslv (掛了)

  LV Status              available

  # open                 0

  LV Size                3.00 GiB

  Current LE             96

  COW-table size         64.00 MiB

  COW-table LE           2

  Snapshot chunk size    4.00 KiB

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:7

--->看到嗎,INACTIVE(沒激活了),我們把它激活看看

[root@desktop21/]# lvchange -ay /dev/vol0/snapsyslv

  Can't change snapshot logical volume "snapsyslv"

--->Can't,不能激活了,快照不能用了哦,把它移除吧

[root@desktop21/]# lvremove /dev/vol0/snapsyslv

Doyou really want to remove active logical volume snapsyslv? [y/n]: y

  Logical volume "snapsyslv" successfullyremoved

--->ok,已經移除了,現在可以再繼續創建快照了額^_^


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章