lvm snapshot(lvm 快照)


lvm快照有多種實現方法,其中一種是COW(Copy-On-Write),不用停止服務或將邏輯卷設為只讀就可以進行備份,當一個 snapshot創建的時候只是拷貝原始卷里的元數據,而不是物理上的數據,所以snapshot的創建特別快。原始卷寫入數據snapshot記錄哪些數據發生變化,並備份舊數據,當恢復的時候就可以把舊數據恢復到對應位置。

介紹下LVM管理的相關命令

  • pvcreate ,pvmove ,pvremove ,pvscan ,pvdisplay
  • vgcreate ,vgremove ,vgscan ,vgdisplay ,vgreduce ,vgextend
  • lvcreate ,lvmove ,lvremove ,lvscan ,lvdisplay ,lvreduce ,lvextend ,lvresize ,lvchk

LVM備份恢復示例:

現有一個Disk /dev/sdb: 17.2 GB,先將它划分為兩個分區,一個作為源分區做成lvm,一個作為備份數據保存點

[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcaf172f9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    16779263     8388608   83  Linux
/dev/sdb2        16779264    33554431     8387584   83  Linux

1、創建lvm

[root@localhost ~]# pvcreate /dev/sdb1                         整個磁盤17G
[root@localhost ~]# vgcreate vgtest /dev/sdb1
[root@localhost ~]# lvcreate -L 7G -n srcdata vgtest
[root@localhost ~]# vgextend vgtest /dev/sdb2         把另一個分區也划入vgtest卷組
[root@localhost ~]# mkfs -t ext3 /dev/vgtest/srcdata
[root@localhost ~]# mount /dev/vgtest/srcdata /mymnt/mnt

2、模擬初始數據

[root@localhost ~]# tar zcf /mymnt/mnt/backup.gz /etc/*
[root@localhost ~]# echo 'hello world'> test.txt

當前lvm下已經有兩個文件了,模擬磁盤備份前狀態

3、創建快照

使用一個10G的大小對7G的lv創建快照有如下提示

[root@localhost ~]# lvcreate -L +10G -n snapsrc -s /dev/vgtest/srcdata (-s表示創建快照)
  Reducing COW size 10.00 GiB down to maximum usable size 7.03 GiB.
  Logical volume "snapsrc" created

查看,發現快照卷已經創建出來了,大小是7G
[root@localhost ~]# lvdisplay

--- Logical volume ---
LV Path                /dev/vgtest/snapsrc
LV Name                snapsrc
VG Name                vgtest
LV UUID                ZIx3hb-80iW-R2Nf-XET6-9wfA-MG8K-6A3bRe
LV Write Access        read/write
LV Creation host, time localhost.localdomain, 2016-04-20 10:37:14 +0800
LV snapshot status     active destination for srcdata
LV Status              available
# open                 0
LV Size                7.00 GiB
Current LE             1792
COW-table size         7.03 GiB
COW-table LE           1800
Allocated to snapshot  0.00%                  這個是快照lv特有的,顯示用了多少空間
Snapshot chunk size    4.00 KiB
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     8192
Block device           253:3

隨着原始卷寫入數據,快照卷的使用率也會增加。測試下往原始卷寫入30M數據,使用率變成0.42%

[root@localhost ~]# cd /mymnt/mnt/
[root@localhost mnt]# dd if=/dev/zero of=./addfile bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.0974659 s, 323 MB/s
[root@localhost mnt]# lvdisplay | grep %
  Allocated to snapshot  0.42%

再新增一個文件[root@localhost mnt]# ls -lr /etc/* >b.txt,此時在執行快照之后原始卷新增了兩個文件。此時如果想恢復之前的狀態,要先卸載原始卷,再使用--merge(合並)恢復。

[root@localhost mymnt]# umount mnt
[root@localhost mymnt]# lvconvert --merge /dev/vgtest/snmpsrc
  Merging of volume snmpsrc started.
  srcdata: Merged: 100.0%
  Merge of snapshot into logical volume srcdata has finished.
  Logical volume "snmpsrc" successfully removed
[root@localhost mymnt]# mount /dev/vgtest/srcdata mnt

至此原始卷就恢復到備份前的狀態了。


1、快照還有一種恢復方法就是,創建快照后直接掛載,把其中數據復制備份

[root@localhost mnt]# lvcreate -L +7G -n backuplv -s /dev/vgtest/srcdata
[root@localhost mnt]# mount /dev/vgtest/backuplv /mymnt/dstmnt/
[root@localhost mymnt]# tar -zcf dstmnt/dstmnt.tar.gz /mymnt/dstmnt/*     掛載后使用tar打包備份

備份好之后卸載快照卷,並lvremove 移除快照卷,以節省空間。

2、另外使用dump也可以實現備份恢復數據

[root@localhost ~]# dump -0u /tmp/data.bak.dump /snap
[root@localhost ~]#  mkdir /data
[root@localhost ~]# cd /data/
[root@localhost ata]#  restore -rf /tmp/data.bak.dump

3、 也可以使用dd將快照卷備份,然后直接替換還原

dd if=/dev/vgtest/srcdata of=/backupsrcdata.dd  備份
dd if=/backupbackupsrcdata.dd of=/dev/vgtest/srcdata  還原


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM