OpenVZ: резервное копирование и клонирование контейнеров

Запись создана октября 20, 2009

В последние несколько месяцев активно работаю с OpenVZ. Соответственно вопрос который возникает после того как система развернута, это резервное копирование.

Расскажу как реализовать его проще всего, на примере CentOS 5.3

[root@root ~]# yum install cstream perl-LockFile-Simple
[root@root ~]# rpm -Uvh http://www.proxmox.com/cms_proxmox/cms/upload/vzdump/vzdump-1.1-2.noarch.rpm
[root@root ~]# rpm -Uvh http://www.proxmox.com/cms_proxmox/cms/upload/vzdump/vzdump-1.2-4.noarch.rpm
[root@root ~]# vzdump --help
Unknown option: help
usage: /usr/sbin/vzdump OPTIONS [--all | VPSID]

        --exclude VPSID         exclude VPSID (assumes --all)
        --exclude-path REGEX    exclude certain files/directories
        --stdexcludes           exclude temorary files and logs

        --compress              compress dump file (gzip)
        --dumpdir DIR           store resulting files in DIR
        --tmpdir DIR            store temporary files in DIR

        --mailto EMAIL          send notification mail to EMAIL.
        --quiet                 be quiet.
        --stop                  stop/start VPS if running
        --suspend               suspend/resume VPS when running
        --snapshot              use LVM snapshot when running
        --size MB               LVM snapshot size

        --node CID              only run on pve cluster node CID
        --lockwait MINUTES      maximal time to wait for the global lock
        --stopwait MINUTES      maximal time to wait until a VM is stopped
        --bwlimit KBPS          limit I/O bandwidth; KBytes per second

        --restore FILENAME      restore FILENAME

Согласно хелпу был написан простой скриптик для резервного копирования.

[root@root ~]# cat /bin/backup.sh
#!/bin/bash


mkdir  /vz/dump/`date "+%Y%m%d"`

/usr/sbin/vzdump --suspend --compress --exclude-path /tmp/ --all --mailto your@mail.com --dumpdir /vz/dump/`date "+%Y%m%d"`/

данный скрипт будет создавать в папке /vz/dump/ папку с текущей датой и в нее складывать дампы, пожатые в tgz, контейнеров. И слать уведомление на your@mail.com
скриптик этот нужно закинуть в крон, сам его допилить слегка для того чтобы убивались старые бакапы (man find).

для восстановления следует использовать vzdump с ключиком —restore
отсюда вытекает возможность клонировать контейнер.

vzdump --compress --suspend 110
vzdump --restore /vz/dump/vzdump-110.tgz 120
vzctl set 120 --hostname newhostname.com --save
vzctl set 120 --ipdel 192.168.0.110 --save
vzctl set 120 --ipadd 192.168.0.120 --save
vzctl start 120

в версии 1.2 восстановление делается так:
vzrestore /vz/vzdump-110.tgz 130

таким образом мы сделали копию контейнера 110 с VID 120, сменили ему ip и хостнейм. По тому же принципу накладываются новые ограничения.

возможные проблемы:

[root@server ~]# vzdump --compress --suspend --dumpdir /backup/ --tmpdir /backup/tmp/ 120
.................
Nov 19 20:10:51 INFO: Error: No checkpointing support, unable to open /proc/cpt: No such file or directory
Nov 19 20:14:34 ERROR: Backup of VM 120 failed - command '/usr/sbin/vzctl chkpnt 120 --suspend' failed with exit code 16

это лечится с помощью:

modprobe vzcpt

еще одна:

[root@vm1 ~]# vzdump --help
Can't locate PVE/VZDump.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/sbin/vzdump line 27.
BEGIN failed--compilation aborted at /usr/sbin/vzdump line 27.

лечится так:

[root@vm1 ~]# cp -r /usr/share/perl5/PVE/ /usr/lib/perl5/5.8.8/

Если возникли вопросы или нужна помощь, буду рад помочь.

» Запись из раздела CentOS Linux, OpenVZ | 3 комментария

Комментарии



3 комментария to “OpenVZ: резервное копирование и клонирование контейнеров”

  1. Дмитрий on декабря 31, 2009 20:37

    Хм, а как установить утилиты vzdump, vzrestore?

  2. Артур Шакиров on декабря 31, 2009 21:22

    внимательно статью прочтите, в самом начале указано как установить.

  3. Alexey on апреля 26, 2010 23:19

    Большое спасибо за статью! :) Столкнулся с ошибкой ‘Can’t locate PVE/VZDump.pm in @INC’, а в статье нашёл решение :)




Ответить