关于LVM的快照功能
LVM快照是一种以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小的修改。如果快照将存储空间消耗殆尽,我们可以使用lvextend来扩容。而如果我们需要缩减快照所占用卷的大小,可以使用lvreduce。实验如下:
目标逻辑卷信息如下:
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg0 lvm2 a-- 7.00g 0
/dev/sdd1 vg0 lvm2 a-- 7.00g 1.99g
$ vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- 13.99g 1.99g
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- 12.00g
现在对逻辑卷lv0创建快照,命名为snaplv0
$ lvcreate -s -n snaplv0 -p r -L 1G /dev/vg0/lv0
Logical volume "snaplv0" created.
$ vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 2 1 wz--n- 13.99g 1016.00m
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 owi-aos--- 12.00g
snaplv0 vg0 sri-a-s--- 1.00g lv0 0.00
这里/dev/vg0/lv0的挂载点为/mnt。往/mnt里面写入300MB的随机文件,再观察快照情况,可以看 到,快照对应的Data一项有所增长:
$ dd if=/dev/urandom of=/mnt/2.txt bs=1M count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 27.5877 s, 11.4 MB/s
$ ls
1.txt 2.txt data
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 owi-aos--- 12.00g
snaplv0 vg0 sri-a-s--- 1.00g lv0 29.42
用snaplv0对逻辑卷进行恢复,注意恢复之前需要先将对应的逻辑卷卸载。恢复之后可以看到,原有的snaplv0消失,因此可以得出结论,LVM的快照是一次性的:
$ umount /mnt
$ lvconvert --merge /dev/vg0/snaplv0
Merging of volume snaplv0 started.
lv0: Merged: 71.0%
lv0: Merged: 91.9%
lv0: Merged: 100.0%
$ ls /dev/vg0
lv0
$ mount /dev/vg0/lv0 /mnt
$ ls /mnt
1.txt data
如果想要删除LVM快照,用lvremove命令,后面跟上快照设备文件的绝对路径即可,例如:
$ lvremove /dev/vg0/snaplv0