lvm快照恢复

lvm快照很方便,这个大家都知道啦。但是怎么把一个lv的内容恢复到快照的状态,还真是一件麻烦的事。传统的方式应该有两种:dd和rsync。

假设系统中的VG为lvmdatas,包含LV vol1,vol1有一个快照vol1-snap。

1、dd

dd if=/dev/lvmdatas/vol1-snp of=/tmp/recovery.img #确保拥有足够的磁盘空间
dd if=/dev/recovery.img of=/dev/lvmdaas/vol1
rm /tmp/recovery.img
lvremove -f /dev/lvmdatas/vol1-snap

这种方式是万无一失的,就是需要很多很多的磁盘空间……

其实我在恢复虚拟机时,甚至试过直接把快照内容dd到原始镜像上,我不确定这种方式是否可靠,但是至少我那一次是成功的。

dd if=/dev/lvmdatas/vol1-snap of=/dev/lvmdatas/vol1
lvremove -f /dev/lvmdatas/vol1-snap

2、rsync

dd的方式是直接对块设备进行恢复。rsync则基于文件系统,这要求把原始磁盘和快照都mount上,我不确定是不是会出现磁盘内容紊乱导致mount不上的情况。

mount /dev/lvmdatas/vol1 /mnt/org
mount /dev/lvmdatas/vol1-snap /mnt/snap
rsync -avz --delete /mnt/snap /mnt/org
umount /dev/lvmdatas/vol1
umount /dev/lvmdatas/vol1-snap
lvremove -f /dev/lvmdatas/vol1-snap

3、lvm merge

把snapshot merge到原始镜像中,从lvm的原理来说,这个功能应该不难做,但是不知道为什么一直没人去做。08年的时候,redhat提供了一个这样的patch,并且合并到内核代码树中了,但是好像都没啥人注意到。

这个功能需要kernel  >= 2.6.33 和 lvm2 >= 2.0.59的支持。商业发行版里面,rhel6.1是支持的,rhel6.0不清楚;sles 11 sp1尚不支持,novell什么时候出sp2? 不对,novell还在吗?社区发行版里面,Fedora 15 和 openSUSE 11.4都包含了该功能。

merge的用法很简单

lvconvert --merge  vg_name/snap_name

如果原始磁盘和快照都没有mount,merge会马上开始,否则会在重启时进行。merge完成后,快照会自动删除。

updatedupdated2022-02-222022-02-22