分类: 系统运维
2011-08-28 18:17:30
通过 lvm 为一致性备份做快照 |
通过 lvm 为一致性备份做快照 问题:1、备份一个非常繁忙的服务器,需要停止大量的程序。否则,你将以数据不一致告终。 2、保存数据库或目录。如果一个文件在使用状态,我们就没有任何线索了,除非我们给应用程序时间做一个清 除的关闭。 这样我们不得不关闭程序,做备份,然后重新启动他们。时间的长短。。影响我们的工作。。 解决:使用LVM,我们可以做一个LV瞬间的快照,然后mount它,再备份它。 步骤: # mount /dev/test/HOWTO /mnt # echo > /mnt/a.test.file # ls /mnt/ a.test.file lost+found # ls -l /mnt/ total 13 -rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found Ok,我们现在有些事情要用它一起做。让我们产生这个快照: # lvcreate --size 16m --snapshot --name snap /dev/test/HOWTO lvcreate -- WARNING: all snapshots will be disabled if more than 16 MB are changed lvcreate -- INFO: using default snapshot chunk size of 64 KB lvcreate -- doing automatic backup of "test" lvcreate -- logical volume "/dev/test/HOWTO" successfully created # mount /dev/test/snap /snap # ls /snap total 13 -rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found 现在我们从原处删除a.test.file,并且检查它是否仍然在快照里: # rm /mnt/a.test.file # ls /snap total 13 -rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found 原理: 记得我们不得不设置“--size”参数吗?真正发生的事情是,“snap”卷需要有那些当LVM调用时,在原处要被改变的所有块的一个拷贝。 当我们删除a.test.file时,它的i节点被删除。这引起64KB要被标注成“脏的”--同时原始数据的一个拷贝被写到“snap”卷。这个例子中,我们分配了16MB给快照,因此如果多于16MB的块要被修改,快照就会无效了。 要决定一个快照分区的正确大小,你将不得不推测基于主LV的使用模式、快照要激活的总时间。例如,在午夜,当无人使用系统的情况下,一个几小时的备份可能要求很小的空间。 请注意,快照不是永久的。如果你卸下LVM或重启,它们就丢失了,需要重新创建。 经过我的实验:快照的目的是保持瞬间的数据,而不影响系统的运行。。。(静态备份某一时刻的数据) 相关命令: lvremove--删除lv lvcreate --size 1000M --snapshot --name varsnap /dev/(逻辑卷) --------------------------------------- 应用探讨: 通过 lvm 为一致性备份做快照 假如你的数据在/usr/mysql/var下。。而你的/usr是一个lvm。。 可以通过lvm做一致性快照备份数据。。 lvcreate --size 1000M --snapshot --name varsnap /dev/(逻辑卷) mkdir /bakfile mount /dev/vgX/varsnap /bakfile tar -czvf mysql.tar.gz /bakfile 注:不影响mysql的运行。。。 |