RHEL6 snapshot快照原理及實驗 LVM對lv提供了快照“snapshot”備份功能,這種功能也只對LVM 有效,。snapshot有多種實現(xiàn)方法,,這里只談?wù)劇皩憰r復(fù)制COW”,不是奶牛哦,,是“Copy-On-Write”當(dāng)一個 snapshot創(chuàng)建的時候,,僅拷貝原始卷里的源數(shù)據(jù),這不是物理上的數(shù)據(jù)拷貝,,因此snapshot的創(chuàng)建特別快,,當(dāng)原始卷里的數(shù)據(jù)有寫入時,備份卷開 始記錄原始卷哪些數(shù)據(jù)發(fā)生了變化,,然后在原始卷新數(shù)據(jù)覆蓋舊數(shù)據(jù)時,,將舊數(shù)據(jù)拷貝到snapshot的預(yù)留空間里,起到備份數(shù)據(jù)的作用,,就保證了所有數(shù)據(jù) 和創(chuàng)建備份卷之前的數(shù)據(jù)一致性,。 而對于snapshot的讀操作,如果是讀取數(shù)據(jù)塊是沒有修改過的,,那么會將讀操作直接重定向到原始卷上,,如果是要讀取已經(jīng)修改過的塊,那么就讀取拷貝到snapshot中的塊,。所以當(dāng)原始卷破壞了之后還能用snapshot備份的數(shù)據(jù)還原,。 參考一份51CTO 【asram先生】的解釋吧: 【鏡像分 離,是為了讓鏡像卷保持拆分一瞬間的狀態(tài),,而不再繼續(xù)被寫入數(shù)據(jù),。而拆分之后,主卷所做的所有寫IO動作,,會以bitmap的方式記錄下來,。bitmap 就是一份位圖文件,文件中每個位都表示卷上的一個塊(扇區(qū),,或者由多個扇區(qū)組成的邏輯塊),,如果這個塊在鏡像分離之后,被寫入了數(shù)據(jù),,則程序就將 bitmap文件中對應(yīng)的位從0變成1,。待備份完成之后,,可以將鏡像關(guān)系恢復(fù),此時主卷和鏡像卷上的數(shù)據(jù)是不一致的,,需要重新做同步,。程序搜索 bitmap中所有為1的位,對應(yīng)到卷上的塊,,然后將這些塊上的數(shù)據(jù),,同步到鏡像卷,從而恢復(fù)實時鏡像關(guān)系,。 改變塊(changed block) 快照創(chuàng)建成功后,,源和快照共享同一份物理數(shù)據(jù)拷貝,直到數(shù)據(jù)發(fā)生寫操作,,此時源上老數(shù)據(jù)或者新增數(shù)據(jù)將被寫向新的存儲空間,。為了記錄和追蹤塊的變化和復(fù)制 信息,需要一個位圖(bitmap),,它用于確定實際拷貝數(shù)據(jù)的位置,,以及確定從源還是目標(biāo)來獲取數(shù)據(jù)。 并發(fā)(concurrent) 它與改變塊非常相似,,但它總是物理地拷貝數(shù)據(jù),。當(dāng)即時拷貝執(zhí)行時,沒有數(shù)據(jù)被復(fù)制,。取而代之,,它創(chuàng)建一個位圖來記錄數(shù)據(jù)的復(fù)制情況,并在后臺進行真正的數(shù)據(jù)物理復(fù)制,。 寫時復(fù)制快 照在快照時間點之后,,沒有物理數(shù)據(jù)復(fù)制發(fā)生,僅僅復(fù)制了原始數(shù)據(jù)物理位置的元數(shù)據(jù),。因此,,快照創(chuàng)建非常快,,可以瞬間完成,。然后,快照副本跟蹤原始卷的數(shù)據(jù) 變化(即原始卷寫操作),,一旦原始卷數(shù)據(jù)塊發(fā)生寫操作,,則先將原始卷數(shù)據(jù)塊讀出并寫入快照卷,然后用新數(shù)據(jù)塊覆蓋原始卷,。這樣我們訪問快照卷上的數(shù)據(jù)仍舊 是寫操作前的,,可以保證我們備份數(shù)據(jù)的一致性?!?br> 檢驗一下snapshot的特點吧: 采取COW實現(xiàn)方式時,,snapshot的大小并不需要和原始卷一樣大。那設(shè)置成多大呢,?第一,、根據(jù)原始卷數(shù)據(jù)的改變大小范圍來設(shè)置;第二,、根據(jù) 原始卷數(shù)據(jù)的更新頻率來定,。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,那么這個snapshot就無法使用了,。當(dāng)然,,如果你的snapshot大小和原始卷一樣大,甚至還 要大,,那snapshot備份就絕對的不會崩潰啦,。 下面就開始吧! 一,、新建lv分區(qū),,裝上一個系統(tǒng)(可以不用裝,其實這里只需要說明他是一個我們要備份的數(shù)據(jù)卷而已) --->先查看一下vg空閑空間吧 [root@desktop21 /]# vgs VG #PV #LV #SN Attr VSize VFree vol0 2 4 1 wz--n- 55.22g 26.22g --->還有26.22G,,建一個3G的lv來裝系統(tǒng)吧,,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,創(chuàng)建成功,,接下來我就裝一個linux的簡易版吧,,我就不上圖了,自己要測試的自己去試試 【注意:這個lv建立起來若作為安裝系統(tǒng)用的話就一定不能格式化了,,它是作為硬盤用了哦,,誰見過把硬盤拿來格式化了在裝系統(tǒng)的?他會警告無法識別的硬盤~】 。 ,。 ,。 二、創(chuàng)建snapshot 終于裝好了,,我們來創(chuàng)建一個snapshot備份吧,,和lv創(chuàng)建方法差不多,就多加一個參數(shù)-s [root@desktop21 /]# lvcreate -s -n snapsyslv -L 50M /dev/vol0/syslv Rounding up size to full physical extent 64.00 MiB 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 (我的PE為32M,,創(chuàng)建的只能是32的倍數(shù)) COW-table LE 2 Allocated to snapshot 0.03% (使用率為0.03%) Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:7 --->ok,,snapsyslv創(chuàng)建好了,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 --->我們需要關(guān)心的就是上面的使用率0.07%,,達到100%就釋放,snapshot就壞了,,就沒用了,。 三,、改變原始卷的數(shù)據(jù),查看備份卷的變化 1,、登錄到syslv所在的系統(tǒng),,新建文件測試 desktop64 login: root Password: [root@desktop64 ~]# dd if=/dev/zero of=testfile bs=1M count=20 20+0 records in 20+0 records out 20971520 bytes (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+0 records in 50+0 records out 52428800 bytes (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%啦,,查看一下快照的狀態(tài)? [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 Do you really want to remove active logical volume snapsyslv? [y/n]: y Logical volume "snapsyslv" successfully removed --->ok,已經(jīng)移除了,,現(xiàn)在可以再繼續(xù)創(chuàng)建快照了額^_^ |
|
來自: phoenixcyan > 《UNIX》