很多读者非常关心如何使用vzdump克隆/备份/恢复OpenVZ虚拟机。Vzdump是一款OpenVZ虚拟机的备份和恢复工具软件,这篇教程将会教会你怎样使用Vzdump克隆/备份/恢复虚拟机。
这篇教程我已经测试成功!
我在这篇文章中使用两个OpenVZ服务器:
Server1.example.com:IP 192.168.0,100
Server2.example.com:IP 192.168.0.101
(两台都使用的是Debian Etch的系统,设置的过程大家可以参考这篇教程Installing And Using OpenVZ On Debian Etch-但是vzdump同时也支持其他版本的linux)
我在server1.example.com服务器上运行着一个主机名为test.example.com的虚拟机,它的ip地址是192.168.1.102且他的VEID是102.我想备份这个虚拟机,并把它恢复在server2.example.com这台服务器上。
我们可以原封不动的把虚拟机恢复在server2.example.com的服务器上(例如相同的ip地址和主机名),但是运行克隆在server2的虚拟机时,我们必须停止在server1.example.com服务器上的虚拟机。否则的话,ip地址和主机名将会冲突;第二种方法我们在恢复虚拟机之前,使用vzctl set命令改变一些参数例如ip地址和主机名。这样的话,我们可以同时运行两个虚拟机(原本运行在server1.example.com上的虚拟机和克隆在server2.example.com)第二种方法是克隆虚拟机的最好的方法。
首先我们必须安装Vzdump和它所依赖的rsync,在debian系统中,命令如下:
server1/server2:
apt-get install vzdump rsync
方法2:
wget http://download.openvz.org/contrib/utils/vzdump/vzdump_1.2-4_all.deb apt-get install cstream ssmtp dpkg -i vzdump_1.2-4_all.deb
这一章仅需要在server1服务器上操作就可以了
在server1.example.com上,想创建一个VEID为102的虚拟机的备份,先看一下vzdump的帮助
man vzdump
来学习下如何使用vzdump.
要备份你服务器上所有的虚拟机,你可以使用下列命令
vzdump –compress –dumpdir /home/backup –stop –all
–compress 意思是: 压缩备份的文件 (压缩为一个.tgz文件).
–dumpdir确定你想存储备份的文件夹,如果你不定义一个dumpdir,默认为/vz/dump或者/var/lib/vz/dump(依赖你的版本)。
–stop 停止虚拟机,常见备份,然后启动虚拟机。如果你使用—stop你的虚拟机将会停掉几分钟.一个更快的方案是你使用…
–suspend:挂起虚拟机,虚拟机备份这时会拷贝via rsync到一个临时文件.虚拟机将会在定调几秒后立刻得以恢复,然后这个dump被创建使用的是临时文件夹下的拷贝。我推荐使用这种方法如果你不想等太久的话。
你也可以省去–stop 和 –suspend直接备份一个正在运行的虚拟机,大多数情况下这是没有问题的,但是可能会使备份不同意,因此请慎用!
–all创建所有可用虚拟机的备份,如果你想备份一个特定虚拟机的备份,使用虚拟机的VEID来替换。
要想把创建VEID为102的虚拟机备份在/home/backup,并且想在备份的时候停止虚拟机,使用下列命令
vzdump –compress –dumpdir /home/backup –stop 102
要想创建一个dump到默认文件夹(/vz/dump or /var/lib/vz/dump),使用命令
vzdump –compress –stop 102
输出结果将会如下所示
server1:/vz/dump# vzdump –compress –stop 102
INFO: starting backup for VPS 102 (/var/lib/vz/private/102)
INFO: starting first sync /var/lib/vz/private/102 to /var/lib/vz/dump/tmp9009
INFO: stopping vps
Stopping container …
Container was stopped
Container is unmounted
INFO: final sync /var/lib/vz/private/102 to /var/lib/vz/dump/tmp9009
INFO: restarting vps
Starting container …
Container is mounted
Adding IP address(es): 192.168.0.102
Setting CPU units: 1000
Configure meminfo: 65536
Set hostname: test.example.com
File resolv.conf was modified
Container start in progress…
INFO: vps is online again after 15 seconds
INFO: Creating archive ‘/var/lib/vz/dump/vzdump-102.tgz’ (/var/lib/vz/dump/tmp9009/102)
Total bytes written: 340428800 (325MiB, 11MiB/s)
INFO: backup for VPS 102 finished successful (1.37 minutes)
server1:/vz/dump#
不像停止,仅仅挂起虚拟机,使用命令
vzdump –compress –suspend 102
输出结果如下所示
server1:~# vzdump –compress –suspend 102
INFO: starting backup for VPS 102 (/var/lib/vz/private/102)
INFO: starting first sync /var/lib/vz/private/102 to /var/lib/vz/dump/tmp10842
INFO: suspend vps
Setting up checkpoint…
suspend…
get context…
Checkpointing completed succesfully
INFO: final sync /var/lib/vz/private/102 to /var/lib/vz/dump/tmp10842
INFO: resume vps
Resuming…
INFO: vps is online again after 4 seconds
INFO: Creating archive ’/var/lib/vz/dump/vzdump-102.tgz’ (/var/lib/vz/dump/tmp10842/102)
Total bytes written: 340428800 (325MiB, 24MiB/s)
INFO: backup for VPS 102 finished successful (1.57 minutes)
server1:~#
在备份之后,我们看一下dump的目录…
ls -l /vz/dump/
你将会看到一个以.tgz为后缀的文件:
server1:~# ls -l /vz/dump/
total 147864
-rw-r–r– 1 root root 1170 2008-11-20 17:40 vzdump-102.log
-rw-r–r– 1 root root 151249685 2008-11-20 17:40 vzdump-102.tgz
server1:~#
你现在就可以拷贝这个dump到其他的OpenVZ服务器上了,使用scp把/vz/dump/vzdump-102.tgz这个备份拷贝到server2.example.com的/home文件夹下);
scp /vz/dump/vzdump-102.tgz [email protected] :/home
(这一章仅仅是针对server2的!)
在server2.example.com,你现在就可以恢复这个虚拟机了,使用下列命令….
vzrestore /vz/dump/vzdump-101.tar 101
在这里250是恢复虚拟机新的VEID-你也可以使用任何在server2.example.com上没有被使用的VEID-你甚至可以再次使用102,如果server2.example.com上没有使用的话。
如果你不想修改虚拟机的设置(例如。Ip地址,主机名),你现在就可以启动它了,但是请确认在server1.example.com上的原始的虚拟机已经停止,否则会导致ip冲突。
vzctl start 250
如果你想同时运行两个虚拟机(原始的和克隆的),你必须克隆虚拟机启动前改变其ip地址和主机名.
要设置一个新的主机名,运行下列命令:
vzctl set 250 –hostname test2.example.com –save
要设置一个新的ip地址,我们必须先删除原来的。
vzctl set 250 –ipdel 192.168.0.102 –save
然后我们设置一个新的
vzctl set 250 –ipadd 192.168.0.250 –save
最后我们就可以启动克隆的虚拟机了。
vzctl start 250
异常处理
出现
Can't locate LockFile/Simple.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/share/perl5/PVE/VZDump/OpenVZ.pm line 29. BEGIN failed--compilation aborted at /usr/share/perl5/PVE/VZDump/OpenVZ.pm line 29. Compilation failed in require at /usr/share/perl5/PVE/VZDump.pm line 33. BEGIN failed--compilation aborted at /usr/share/perl5/PVE/VZDump.pm line 33. Compilation failed in require at /usr/sbin/vzdump line 27. BEGIN failed--compilation aborted at /usr/sbin/vzdump line 27.
命令行更新perl
apt-get install liblockfile-simple-perl搞定!