好了;基於上次寫博客的動力與平臺對本用戶的小小激勵,我們勝不驕敗不壘,繼續上次沒寫完的落下的功能‘邏輯捲上的快照功能’接着整理,我們共同學習共同進步(用我們老師的話說“老司機要開車了,請扶穩坐好”)。
那什麼是邏輯卷的快照?
簡單講如果想在邏輯卷裏做一些文件批量處理,臨時改文件,刪除文件,備份,等操作,但又不想中止系統,改變數據這時候該怎麼辦呢?哎這個時候我們就用快照來解決。
1、快照是通過把文件系統的改變記錄到一個快照分區,而不是對這個分區做鏡像。因此當你創建一個快照分區時,你不需要使用和你正創建快照的分區一樣大小的分區, 而是在做快照過程中需要改變的大小。當然這取決於有多少數據正在寫入分區和你希望保留邏輯卷快照多長時間。你保留的時間越長在文件系統的改變就越多,更多的快照分區就會被填充改變的信息,在分區上的改變率越高,快照的平均生命期越短.如果一個邏輯卷系統的分區改變量超過了快照的大小,那麼快照就會被釋放。
2、當創建快照的時候,僅拷貝原始邏輯卷裏數據的元數據(注意;這裏備份的是數據的元數據)。並不會有數據的物理拷貝,因此快照的創建幾乎是實時的。當原始捲上有寫操作時,快照跟蹤原始卷塊的改變,此時原始捲上將要改變的數據在改變之前被拷貝到快照的空間裏。因此這個原理的實現叫做寫時複製(CoW)。
3、使用CoW時,快照大小並不需要和原始卷一樣大,其大小隻需考慮兩個方面:從快照創建到釋放的這段時間內數據塊 的改變量有多大,數據更新的頻率。一旦快照的空間記錄滿了原始卷數據塊的改變的信息,那麼這個快照就無效了。我們上面說過了!!
注意:在寫操作寫入塊之前,CoW將原始數據移動到快照空間裏,這樣就保證了所有的數據在快照創建時候保持一致 性,而對於快照的讀操作,如果是讀取的數據塊是沒有修改過的,那麼就會將讀操作直接重定向到原始捲上,如果是讀取已經修改過的數據快,那麼就讀取拷貝到快照上的數據快。
快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝,副本(此快照非彼快照)
快照裏的數據只有在它們和原來的邏輯卷數據不同時纔會消耗空間(快照權限最好爲只讀)
1、快照區與原邏輯卷系統是共用很多PE區塊的,快照區與被快照的邏輯卷必須在同一個VG組上
因此係統恢復的時候文件的數量不能高於快照區的實際容量,高於就報錯。
2、在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變纔會使用這些
空間(快照空間可以擴)。
3、當原來的邏輯卷中數據有所改變時,會將舊的數據複製到快照中,這個步驟是自動的。
4、快照中只含有原來的邏輯卷中更改的數據或者自生成快照後的快照中更改的數據。
(邏輯卷的原始數據被保存在快照中,如果想恢復直接複製過去就行)。
5、只針對已有邏輯卷分區有效,也不能在一個非邏輯卷文件系統上使用。
6、刪除邏輯卷則在該邏輯捲上創建的所有快照也會被全部刪除(記得備份)。
7、建立快照的卷大小只需要原始邏輯卷的15%~20%就夠了。也可以使用lvextend放大快照。
再來一遍;看圖
快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享。
左圖爲最初建立系統快照區的狀況,邏輯卷會預留一個區域 (左圖的左側三個PE 區塊) 作爲數據存放處。此時快照區內並沒有任何數據,而快照區與系統區共享所有的PE 數據, 因此你會看到快照區的內容與文件系統是一模一樣的。等到系統運作一陣子後,假設A 區域的數據被更動了 (上面右圖所示),則更動前系統會將該區域的數據移動到快照區,所以在右圖的快照區被佔用了一塊PE 成爲A,而其他B 到I 的區塊則還是與文件系統共享。
實驗平臺:Windows+VMware 12
Linux:Centos6.8
首先,如果我們要做快照,就必須先有邏輯卷存在(這裏面考慮到先有雞還是先有蛋的問題...)
快照不能單獨存在,必須依附於邏輯卷,所以我們先創建邏輯卷
創建邏輯卷;分五步走(之前的我刪除了,現在我重新做下)
創建物理卷
[root@6 ~]# pvcreate /dev/sd{b1,c}
創建卷組
[root@6 ~]# vgcreate vg0 /dev/sd{b1,c}
創建邏輯卷
[root@6 ~]# lvcreate -n lv0 -L +10G vg0
格式化邏輯卷爲ext4系統
[root@6 ~]# mkfs.ext4 /dev/vg0/lv0
掛載邏輯卷
[root@6 ~]# mount /dev/vg0/lv0 /mnt/lv0/
然後就可以基於邏輯卷創建快照了(掛載臨時生效,如永久生效寫配置文件fstab)
創建快照:
[root@6 ~]# lvcreate -L +10G -s -n lv0-snapshot -p r /dev/vg0/lv0
1、此命令的意思是,基於邏輯卷lv0自身創建一個大小爲10G的快照 -s 創建快照。-L指定空間大小,
-n指定快照名,-p指定權限爲只讀,後面dev路徑是指定從誰那裏獲取空間。
2、快照創建成功了,並且活動狀態
3、是卷組和邏輯卷的快照所對應的一些信息。
掛載快照
掛載快照不需要格式化,直接掛載就可以,而且快照可以創建多個。
查看快照裏的文件信息
注意:在這個位置有很多人搞混快照原理,
我們之前說過由於快照區與原本的卷區共用很多PE的區塊的,如果你在快照區看到文件請不要驚訝,
只是快照把這個指針指向了源卷區空間文件上而已,實際看的還是源卷區文件,因爲你現在沒有改文件啊,所以他兩是共享存在!!!
測試,快照區和源卷區文件測試
我在修改f1文件之前快照已經自動把f1文件備份到快照裏了,所以你看到的還是沒有修改過的f1原始文件。
對快照裏的資料進行打包備份,準備還原
[root@6 snap]# tar cjf /tmp/lvm.tar.bz2 *
卸載移除
[root@6 ~]# umount /mnt/snap/
卸載並格式化文件系統
[root@6 ~]# umount /mnt/lv0
[root@6 ~]# mkfs.ext4 /dev/vg0/lv0
掛載解壓恢復數據
[root@6 ~]# mount /dev/vg0/lv0 /mnt/lv0/
[root@6 ~]# tar xjf /tmp/lvm.tar.bz2 -C /mnt/lv0/
[root@6 ~]# ll /mnt/lv0/
刪除快照
刪除快照特別容易,先取消掛載快照umount /mnt/snap
移除快照系統
[root@6 ~]# lvremove /dev/vg0/lv0-snapshot
到此,實驗結束,感謝瀏覽。
注意:如果想徹底刪除快照功能,就把邏輯卷按照安裝的反方向挨個刪除,這樣快照也就不復存在了。
但是要注意備份哦!!!