快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。 用讲的好像很难懂,我们用图解说明一下好了:
左图为最初建置系统快照区的状况,LVM 会预留一个区域 (左图的左侧三个 PE 区块) 作为数据存放处。 此时快照区内并没有仸何数据,而快照区与系统区共享所有的 PE 数据, 因此你会看到快照区的内容与文件系统是一模一样的。 等到系统运作一阵子后,假设 A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到忚照区, 所以在右图的快照区被占用了一块 PE 成为 A,而其他 B 到 I 的区块则还是与文件系统共享!
照这样的情况杢看,LVM 的系统快照是非常棒的『备份工具』,因为他只有备份有被更动到的数据, 文件系统内没有被变更的数据依旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此『快照』当时的文件系统就得以『备份』下来,并且快照所占用的容量又非常小!所以您说,这不是很棒的工具又是什么?
那么快照区要如何建立不使用呢?首先,由于快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必项要在同一个 VG 上头。
快照区的建立
#1.先查看VG还剩下多少容量
[root@linux ~]# vgdisplay
--- Volume group ---
VG Name ingvg
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 4
Act PV 4
VG Size 31.94 GB
PE Size 16.00 MB
Total PE 2044
Alloc PE / Size 2044 / 31.94 GB
Free PE / Size 0 / 0 --没有多余的PE可以用。
VG UUID NOdo5r-CHA0-W9D8-wBRj-ydV0-3UGm-XJx0vI
#2.增加VG
[root@linux ~]# pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created
[root@linux ~]# vgextend ingvg /dev/sdf
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Volume group "ingvg" successfully extended
[root@linux ~]# vgdisplay
--- Volume group ---
VG Name ingvg
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 10
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 5
Act PV 5
VG Size 39.92 GB
PE Size 16.00 MB
Total PE 2555
Alloc PE / Size 2044 / 31.94 GB
Free PE / Size 511 / 7.98 GB --多出了511个PE。
VG UUID NOdo5r-CHA0-W9D8-wBRj-ydV0-3UGm-XJx0vI
#3.新建快照区。
[root@linux ~]# lvcreate -l 250 -s -n ingss /dev/ingvg/inglv
Logical volume "ingss" created
# 上述的指令中最重要的是那个 -s 的选顷!代表是 snapshot 快照功能之意!
# -n 后面接快照区的装置名称, /dev/.... 则是要被快照的 LV 完整檔名。
# -l 后面则是接使用多少个 PE 来作为这个快照区使用。
[root@linux ~]# lvdisplay
--- Logical volume ---
LV Name /dev/ingvg/inglv
VG Name ingvg
LV UUID 4KbMKd-AJkf-z0fi-KtWP-zT5C-qirS-IkVFDv
LV Write Access read/write
LV snapshot status source of
/dev/ingvg/ingss [active]
LV Status available
# open 1
LV Size 31.94 GB
Current LE 2044
Segments 4
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Name /dev/ingvg/ingss
VG Name ingvg
LV UUID jdBXbr-A9h8-00U8-oEhi-vC9n-MfRX-mY57ON
LV Write Access read/write
LV snapshot status active destination for /dev/ingvg/inglv
LV Status available
# open 0
LV Size 31.94 GB --被快照的原LV磁盘容量
Current LE 2044
COW-table size 3.91 GB --快照区的实际容量
COW-table LE 250 --快照区占用的PE数量
Allocated to snapshot 0.00%
Snapshot chunk size 4.00 KB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
#/dev/ingvg/ingss快照被建立起来了,他的容量与VG相同。
#4.挂载/dev/ingvg/ingss
[root@linux mnt]# mkdir /mnt/snapshot
[root@linux mnt]# mount /dev/ingvg/ingss /mnt/snapshot/
[root@linux mnt]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 5991232 2656912 3025072 47% /
/dev/sda1 101086 11373 84494 12% /boot
tmpfs 517548 0 517548 0% /dev/shm
/dev/mapper/ingvg-inglv
32172936 180292 30685204 1% /mnt/lvm
/dev/mapper/ingvg-ingss
32172936 180292 30685204 1% /mnt/snapshot
[root@linux snapshot]# ll
总计 40
drwxr-xr-x 101 root root 12288 02-17 20:36 etc
drwxr-xr-x 16 root root 4096 02-17 18:09 log
drwx------ 2 root root 16384 02-17 00:38 lost+found
#注意etc和log是/dev/ingvg/inglv里面的内容。
[root@linux mnt]# umount /mnt/snapshot/
利用快照区复原系统
#1.先将原本的 /dev/ingvg/inglv 内容作些变更,增增减减一些目录吧!
[root@linux mnt]# cd /mnt/lvm/
[root@linux lvm]# ll
总计 40
drwxr-xr-x 101 root root 12288 02-17 20:36 etc
drwxr-xr-x 16 root root 4096 02-17 18:09 log
drwx------ 2 root root 16384 02-17 00:38 lost+found
[root@linux lvm]# rm -rf /mnt/lvm/log/
[root@linux lvm]# cp -a /boot/ /lib/ /sbin/ .
[root@linux lvm]# ll
总计 64
drwxr-xr-x 4 root root 4096 02-15 23:55 boot
drwxr-xr-x 101 root root 12288 02-17 20:36 etc
drwxr-xr-x 13 root root 4096 02-16 18:24 lib
drwx------ 2 root root 16384 02-17 00:38 lost+found
drwxr-xr-x 2 root root 12288 02-16 18:24 sbin
[root@linux lvm]# lvdisplay /dev/ingvg/ingss
--- Logical volume ---
LV Name /dev/ingvg/ingss
VG Name ingvg
LV UUID HnpL5n-3mEu-afIq-jCCL-62ss-ElDy-N90beh
LV Write Access read/write
LV snapshot status active destination for /dev/ingvg/inglv
LV Status available
# open 0
LV Size 31.94 GB
Current LE 2044
COW-table size 3.91 GB
COW-table LE 250
Allocated to snapshot 2.85% --从这里可以看出快照区已经被使用了。
Snapshot chunk size 4.00 KB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
#2.利用快照区将原本的文件系统备份。
[root@linux ~]# mount /dev/ingvg/ingss /mnt/snapshot
[root@linux ~]# cd /mnt/snapshot
[root@linux snapshot]# ll
总计 40
drwxr-xr-x 101 root root 12288 02-17 20:36 etc
drwxr-xr-x 16 root root 4096 02-17 18:09 log
drwx------ 2 root root 16384 02-17 00:38 lost+found
[root@linux snapshot]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 5991232 2664400 3017584 47% /
/dev/sda1 101086 11373 84494 12% /boot
tmpfs 517548 0 517548 0% /dev/shm
/dev/mapper/ingvg-inglv
32172936 395048 30470448 2% /mnt/lvm
/dev/mapper/ingvg-ingss
32172936 284352 30581144 1% /mnt/snapshot
# 看吧!两者确实不一样了!开始将快照区内容复制出来吧!
[root@linux snapshot]# mkdir /mnt/backups
[root@linux snapshot]# tar -jcv -f /mnt/backups/lvm.tar.bz2 *
# 此时你就会有一个备份资料,亦即是 /backups/lvm.tar.bz2 了!
为什么要备份呢?为什么不可以直接格式化 /dev/ingvg/inglv 然后将 /dev/ingvg/ingss 直接复制给 inglv 呢? 要知道 ingss 其实是 inglv 的快照,因此如果你格式化整个 inglv 时,原本的文件系统所有数据都会被搬移到 ingss。 那如果 ingss 的容量不够大 (通常也真的不够大),那么部分数据将无法复制到 ingss 内,数据当然无法全部还原啊! 所以才要在上面表格中制作出一个备份文件的!了解乎?接下来让我们准备还原
inglv 的内容吧!
# 3. 将 ingss 卸除并移除 (因为里面的内容已经备份起来了)
[root@linux ~]# umount /mnt/snapshot
[root@linux ~]# lvremove /dev/ingvg/ingss
Do you really want to remove active logical volume "vbirdss"? [y/n]: y
Logical volume "vbirdss" successfully removed
[root@linux ~]# umount /mnt/lvm
[root@linux ~]# mkfs -t ext3 /dev/ingvg/inglv
[root@linux ~]# mount /dev/ingvg/inglv /mnt/lvm
[root@linux ~]# tar -jxv -f /mnt/backups/lvm.tar.bz2 -C /mnt/lvm
[root@linux ~]# ll /mnt/lvm
drwxr-xr-x 105 root root 12288 Mar 11 16:59 etc
drwxr-xr-x 17 root root 4096 Mar 11 14:17 log
drwx------ 2 root root 16384 Mar 11 16:59 lost+found
# 是否与最初的内容相同啊!这就是透过快照杢还原的一个简单的方法啰!
换个角度来想想,我们将原本的 inglv 当作备份数据,然后将 ingss 当作实际在运作中的数据, 任何测试的动作都在 ingss 这个快照区当中测试,那么当测试完毕要将测试的数据删除时,只要将快照区除去即可! 而要复制一个 inglv 的系统,再作另外一个快照区即可!这样是否非常方便啊? 这对于教学环境中每年都要帮学生制作一个练习环境主机的测试,非常有帮助呢!#1.新建一个大一些的快照
[root@linux lvm]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 5991232 2664408 3017576 47% /
/dev/sda1 101086 11373 84494 12% /boot
tmpfs 517548 0 517548 0% /dev/shm
/dev/mapper/ingvg-inglv
32963440 284052 31004944 1% /mnt/lvm
[root@linux lvm]# lvdisplay
--- Logical volume ---
LV Name /dev/ingvg/inglv
VG Name ingvg
LV UUID 4KbMKd-AJkf-z0fi-KtWP-zT5C-qirS-IkVFDv
LV Write Access read/write
LV Status available
# open 1
LV Size 31.94 GB
Current LE 2044
Segments 4
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
[root@linux lvm]# vgdisplay
--- Volume group ---
VG Name ingvg
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 16
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 5
Act PV 5
VG Size 39.92 GB
PE Size 16.00 MB
Total PE 2555
Alloc PE / Size 2044 / 31.94 GB
Free PE / Size 511 / 7.98 GB
VG UUID NOdo5r-CHA0-W9D8-wBRj-ydV0-3UGm-XJx0vI
[root@linux lvm]# lvcreate -s -l 511 -n ingss /dev/ingvg/inglv
Logical volume "ingss" created
[root@linux lvm]# vgdisplay
--- Volume group ---
VG Name ingvg
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 18
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 1
Max PV 0
Cur PV 5
Act PV 5
VG Size 39.92 GB
PE Size 16.00 MB
Total PE 2555
Alloc PE / Size 2555 / 39.92 GB
Free PE / Size 0 / 0
VG UUID NOdo5r-CHA0-W9D8-wBRj-ydV0-3UGm-XJx0vI
[root@linux lvm]# lvdisplay
--- Logical volume ---
LV Name /dev/ingvg/inglv
VG Name ingvg
LV UUID 4KbMKd-AJkf-z0fi-KtWP-zT5C-qirS-IkVFDv
LV Write Access read/write
LV snapshot status source of
/dev/ingvg/ingss [active]
LV Status available
# open 1
LV Size 31.94 GB
Current LE 2044
Segments 4
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Name /dev/ingvg/ingss
VG Name ingvg
LV UUID oIDgZj-TkjC-wb9e-N93F-6n0m-KivT-pHECUp
LV Write Access read/write
LV snapshot status active destination for /dev/ingvg/inglv
LV Status available
# open 0
LV Size 31.94 GB
Current LE 2044
COW-table size 7.98 GB
COW-table LE 511
Allocated to snapshot 0.00%
Snapshot chunk size 4.00 KB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
#2.隐藏inglv 挂载ingss
[root@linux ~]# umount /mnt/lvm/
[root@linux ~]# mount /dev/ingvg/ingss /mnt/snapshot/
[root@linux ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 5991232 2664412 3017572 47% /
/dev/sda1 101086 11373 84494 12% /boot
tmpfs 517548 0 517548 0% /dev/shm
/dev/mapper/ingvg-ingss
32963440 284052 31004944 1% /mnt/snapshot
#3.开始恶搞
[root@linux mnt]# cd /mnt/snapshot/
[root@linux snapshot]# ll
总计 32
drwxr-xr-x 101 root root 12288 02-17 20:36 etc
drwxr-xr-x 16 root root 4096 02-17 18:09 log
drwx------ 2 root root 16384 02-17 00:38 lost+found
[root@linux snapshot]# rm -rf etc/ log/
[root@linux snapshot]# ll
总计 16
drwx------ 2 root root 16384 02-17 00:38 lost+found
#4.还原本快照区
[root@linux ~]# umount /mnt/snapshot/
[root@linux ~]# lvremove /dev/ingvg/ingss
Do you really want to remove active logical volume ingss? [y/n]: y
Logical volume "ingss" successfully removed
[root@linux ~]# lvcreate -s -l 511 -n ingss /dev/ingvg/inglv
Logical volume "ingss" created
[root@linux ~]# mount /dev/ingvg/ingss /mnt/snapshot/
[root@linux ~]# ll /mnt/snapshot/
总计 32
drwxr-xr-x 101 root root 12288 02-17 20:36 etc
drwxr-xr-x 16 root root 4096 02-17 18:09 log
drwx------ 2 root root 16384 02-17 00:38 lost+found
LVM 相关指令汇整与 LVM 的关闭
1. 先卸除系统上面的 LVM 文件系统 (包括快照与所有 LV);
2. 使用 lvremove 移除 LV ;
3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
4. 使用 vgremove 移除 VG:
5. 使用 pvremove 移除 PV;
6. 最后,使用 fdisk 修改 ID 回来啊!
[root@linux ~]# umount /mnt/lvm/
[root@linux ~]# umount /mnt/snapshot/
[root@linux ~]# lvremove /dev/ingvg/ingss
Do you really want to remove active logical volume ingss? [y/n]: y
Logical volume "ingss" successfully removed
[root@linux ~]# lvremove /dev/ingvg/inglv
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Do you really want to remove active logical volume inglv? [y/n]: y
Logical volume "inglv" successfully removed
[root@linux ~]# vgchange -a n ingvg
/dev/cdrom: read failed after 0 of 2048 at 0: 输入/输出错误
/dev/cdrom: read failed after 0 of 2048 at 4294836224: 输入/输出错误
/dev/cdrom: read failed after 0 of 2048 at 4294955008: 输入/输出错误
/dev/cdrom: read failed after 0 of 2048 at 0: 输入/输出错误
/dev/cdrom: read failed after 0 of 2048 at 4096: 输入/输出错误
/dev/cdrom: read failed after 0 of 2048 at 0: 输入/输出错误
0 logical volume(s) in volume group "ingvg" now active
[root@linux ~]# vgremove ingvg
/dev/cdrom: open failed: 只读文件系统
Volume group "ingvg" successfully removed
[root@linux ~]# pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Labels on physical volume "/dev/sdb1" successfully wiped
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Labels on physical volume "/dev/sdc1" successfully wiped
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Labels on physical volume "/dev/sdd1" successfully wiped
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Labels on physical volume "/dev/sde1" successfully wiped
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
Labels on physical volume "/dev/sdf" successfully wiped
[root@linux ~]# pvscan
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
No matching physical volumes found
[root@linux ~]# pvdisplay
[root@linux ~]# vgscan
Reading all physical volumes. This may take a while...
/dev/cdrom: open failed: 只读文件系统
Attempt to close device '/dev/cdrom' which is not open.
[root@linux ~]# vgdisplay
[root@linux ~]# lvscan
[root@linux ~]# lvdisplay