LVM快照Snapshot備份

studywell發表於2016-01-28
LVM快照Snapshot備份

部分轉自:

總結邏輯卷快照的意思就是:
對A拍個照建立B,A上資料一旦有變化就先把原來的內容複製到B上在更改A;而B的空間未用完前,B上內容都是A快照時的一致性內容;

命令總結:
針對快照進行檔案系統的備份:lv_snap一定要預留一定空間;
建立:# lvcreate -L4.4G -s -n LogVol02s VolGroup00/LogVol02;
# mkdir /mnt/LogVol02s;
# mount -o nouuid,norecovery,ro /dev/vg1/lv1-snap /mnt/lv1-snap/; # 快照可直接掛載,建議只讀方式
# tar -zcvpf /tmp/backup.tar.gz /mnt/LogVol02s/*; # 用tar命令進行檔案備份;
# lvremove /dev/VolGroup00/LogVol02s; # 備份完成後刪除快照;

常用Linux命令使用技巧:LVM快照Snapshot備份
快照(snapshot)是LVM所提供的一個非常有用的特性。它的原理是複製 Origin 原始卷的後設資料(metadata)來建立一個邏輯卷,並沒有複製物理捲上的任何資料, 因此它的建立過程是實時瞬間完成的。快照是特殊型別的邏輯卷,它含有建立時刻所指定的原始邏輯卷的完整資料,您可以操作快照而無需擔心資料的變更令備份失效。

LVM 快照利用一種稱為“寫時複製(COW - Copy-On-Write)”的技術來跟蹤和維持其資料的一致性。它的原理比較簡單,就是跟蹤原始捲上塊的改變, 在這些資料被改變之前將其複製到快照自己的預留空間裡(顧名思義稱為寫時複製)。 當對快照進行讀取的時候,被修改的資料從快照的預留空間中讀取,未修改的資料則重定向到原始捲上去讀取,因此在快照的檔案系統與裝置之間多了一層COW裝置。

利用快照您可以凍結一個正在使用中的邏輯卷,然後製作一份凍結時刻的備份,由於這個備份是具有一致性的,因此非常的適合於用來備份實時系統。例如,您的執行中的資料庫可能即使在備份時刻也是不允許暫停服務的,那麼就可以考慮使用LVM的快照模式,然後再針對此快照來進行檔案系統級別或者塊裝置級別的資料備份。

# lsmod | grep dm; #使用snapshot需要核心模組dm-snapshot;
# modprobe dm-snapshot; #如有需要,必須先載入此模組;

# lvs; # 先檢視一下目前LV的大小;
------------------------------------------------------------------------------
  LV       VG         Attr   LSize Origin Snap%  Move Log Copy%  Convert
  LogVol00 VolGroup00 -wi-ao 6.88G                                    
  LogVol01 VolGroup00 -wi-ao 1.00G                                    
  LogVol02 VolGroup00 -wi-ao 4.00G                                    
  LogVol03 VolGroup00 -wi-ao 5.00G                  
------------------------------------------------------------------------------
說明:此實驗目標是備份邏輯卷LogVol02,邏輯卷LogVol03掛載於/backup用來儲存備份檔案;

理論上,您所建立的快照卷的大小應該是原始卷的1.1倍大小,但鑑於建立快照的目的多是為臨時備份資料,因此實際使用時可視您的備份速度和資料變更的頻繁程度來決定快照卷的大小。例如,您預計完成一個完整備份大概需要1個小時,而在這個時間之內資料變更的大小不會超過100M,那麼您就可以安全地建立100M大小的快照卷。

# vgs; # 看看卷組VG夠不夠空間建立快照;
------------------------------------------------------------------------------
  VG         #PV #LV #SN Attr   VSize  VFree
  VolGroup00   3   4   0 wz--n- 23.81G 7.94G
------------------------------------------------------------------------------
如上所示,目前卷組VolGroup00還有大概8G的空間,足以建立快照;

開始建立邏輯卷VolGroup00/LogVol02的快照(注意這裡取1.1倍大小空間):

# lvcreate -L4.4G -s -n LogVol02s VolGroup00/LogVol02;
------------------------------------------------------------------------------
  Rounding up size to full physical extent 4.41 GB
  Logical volume "LogVol02s" created
------------------------------------------------------------------------------

# lvs; # 看看剛建立的快照;
------------------------------------------------------------------------------
  LV        VG         Attr   LSize Origin   Snap%  Move Log Copy%  Convert
  LogVol00  VolGroup00 -wi-ao 6.88G                                      
  LogVol01  VolGroup00 -wi-ao 1.00G                                      
  LogVol02  VolGroup00 owi-ao 4.00G                                      
  LogVol02s VolGroup00 swi-a- 4.41G LogVol02   0.02                      
  LogVol03  VolGroup00 -wi-ao 5.00G                                
------------------------------------------------------------------------------

# lvscan; # 看看剛建立的快照;
------------------------------------------------------------------------------
  ACTIVE            '/dev/VolGroup00/LogVol00' [6.88 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [1.00 GB] inherit
  ACTIVE   Original '/dev/VolGroup00/LogVol02' [4.00 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol03' [5.00 GB] inherit
  ACTIVE   Snapshot '/dev/VolGroup00/LogVol02s' [4.41 GB] inherit
------------------------------------------------------------------------------

# /bin/ls -1 -d /dev/mapper/VolGroup00-LogVol02s*
------------------------------------------------------------------------------
/dev/mapper/VolGroup00-LogVol02s
/dev/mapper/VolGroup00-LogVol02s-cow
------------------------------------------------------------------------------

快照卷無需做格式化等步驟,可以直接對快照捲進行掛載,解除安裝等操作,而且操作完成之後,就應該立即刪除快照,以減輕系統的I/O負擔。 快照不會自動更新,長久保留是沒有意義的。

針對快照進行塊裝置的備份:
# dd if=/dev/VolGroup00/LogVol02s of=/backup/LogVol02.dd; # 用dd命令進行塊備份;

針對快照進行檔案系統的備份:
# mkdir /mnt/LogVol02s;
# mount /dev/VolGroup00/LogVol02s /mnt/LogVol02s; # 快照可直接掛載;
# tar -zcvpf /tmp/backup.tar.gz /mnt/LogVol02s/*; # 用tar命令進行檔案備份;
# lvremove /dev/VolGroup00/LogVol02s; # 備份完成後刪除快照;

通常建立快照卷的主要目的是做備份用途,可以寫一個簡單的備份指令碼來自動建立快照,然後掛載進行備份,備份完成後又自動解除安裝和刪除。因為快照的建立速度非常快,所以使用快照來操作備份作業不僅可以解決一致性問題, 而且可以減少備份時間。

請參考如下程式碼:

# vi snapshot_backup.sh; #建立備份指令碼;
------------------------------------------------------------------------------
#!/bin/bash

today=`date "+%Y%m%d"`;
lvcreate -L1G -s -n LogVol02s /dev/VolGroup00/LogVol02;
mount /dev/VolGroup00/LogVol02s /disk/VolGroup00/LogVol02s;
tar -zcvf /tmp/snapshot_backup_$today.tar.gz /disk/VolGroup00/LogVol02s/*;
umount /dev/VolGroup00/LogVol02s;
lvremove -f /dev/VolGroup00/LogVol02s;
------------------------------------------------------------------------------
chmod 755 snapshot_backup.sh; #設定執行許可權;

可以將此備份指令碼設定成每天定時執行,就可當成是一個完整備份的方案。

順便提一些,如要從dd的備份中恢復,反過來操作即可。

例如,先用dd命令摧毀邏輯卷LogVol02中的資料,以便進行恢復測試:
# dd if=/dev/zero of=/dev/VolGroup00/LogVol02 bs=512 count=1024;

這時嘗試掛載邏輯卷LogVol02將會失敗:
# mount /dev/mapper/VolGroup00-LogVol02 /opt;

如下命令將 dd 備份檔案直接寫入LogVol02邏輯卷,即可恢復資料:
# dd if=/backup/LogVol02.dd of=/dev/VolGroup00/LogVol02;

再嘗試掛載所恢復的邏輯卷LogVol02,成功掛載後再檢查資料:
# mount /dev/mapper/VolGroup00-LogVol02 /opt;
 



===============================================================================
XFS:
[root@server0 ~]# mount -o nouuid,norecovery,ro /dev/vg1/lv1-snap /mnt/lv1-snap/

掛載快照,儘量使用ro的方式,將不會破壞快照卷中的資料
===============================================================================

[root@server0 ~]# dmsetup ls --tree
vg1-lv2--snap (252:5)
 ├─vg1-lv2--snap-cow (252:7)
 │  └─ (253:17)
 └─vg1-lv2-real (252:6)
    ├─ (253:17)
    └─ (253:18)
vg1-lv2 (252:1)
 └─vg1-lv2-real (252:6)
    ├─ (253:17)
    └─ (253:18)


快照自動增長:經測試,設定下面引數不能自動增長
[root@server0 ~]# vim /etc/lvm/lvm.conf
snapshot_autoextend_threshold = 70
snapshot_autoextend_percent = 20
[root@server0 ~]# systemctl restart lvm2-monitor.service


注:快照卷 和 原卷 使用同一VG空間

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-1983571/,如需轉載,請註明出處,否則將追究法律責任。

相關文章