- PVSM.RU - https://www.pvsm.ru -

В данной заметке я хочу рассказать как просто перенести Linux систему с физического сервера или полной виртуализации (KVM,XEN,VMware) в контейнер OpenVZ. По данной теме достаточно материалов, но я расскажу о самом простом способе.
Для начала немного теоретических выкладок. Какие основные плюсы можно получить от контейнерной виртуализации:
Но также есть и минусы:
Мне понадобилось преобразовать виртуальную машину VMware с CentOS5. Конкретно меня заинтересовал проект VirtualPBX [1], нужная связка для его работы настраивается достаточно непросто, но автор проекта выкладывает VMware образ для быстрого развертывания, образ базируется на CentOS 5.
Итак, для начала скачиваем и запускаем образ VirtualPBX с помощью VMware player, работает все отлично, но для постоянной работы мне не удобно использовать VMware образ. В моем распоряжении находится несколько серверов Proxmox VE 2.1 [2] с KVM,OpenVZ виртуализацией и web-based управлением. Поэтому, недолго думая, приступаем к переносу VirtualPBX из VMware образа в контейнер OpenVZ. Для переноса ОС воспользуемся tar методом, в идеале лучше использовать для этого rsync.
На хосте с Proxmox скачаем шаблон для CentOS 5 и создадим СT контейнер с использованием данного шаблона, задав нужные вам параметры! Запускаем созданный контейнер и проверяем его работу (подключением через ssh или к консоли контейнера через web интерфейс Proxmox), далее остановим его и перейдем на машину, которую нужно перенести. Данные действия можно выполнить и из консоли Proxmox без использования web интерфейса.
На физической (VMware образе в моем случае) машине создаем файл с исключением каталогов и файлов для tar архивирования:
# nano non_tar
.bash_history
lost+found
/dev/*
/mnt/*
/tmp/*
/proc/*
/sys/*
/usr/src/*
/etc/shadow
/etc/inittab
/etc/mtab
/etc/rc.sysinit
/etc/fstab
/etc/sysconfig/network
/etc/modprobe.d/blacklist
/etc/resolv.conf
/etc/sysconfig/network-scripts/*
Далее архивируем корень операционной системы, исключая директории и файлы из созданного ранее списка:
# tar --numeric-owner -czvf /tmp/virtualPBX_6309.tar.gz -X /root/non_tar /
Копируем полученный архив через ssh на хост машину виртуализации (Внимание: копируется именно на хост машину, а не в контейнер):
# scp virtualPBX_6309.tar.gz root@IP_OpenVZ_Host:/tmp
Подключаемся на хост машину по ssh и переходим в каталог, где находится наша развернутая из шаблона CentOS 5 /var/lib/vz/private/100, где 100 — уникальный идентификатор OpenVZ виртуалки, соответственно у Вас, скорее всего, будет другой.
# cd /var/lib/vz/private/100
И разворачиваем наш архив поверх шаблона (убедитесь, что вы находитесь в директории недавно развернутого шаблона, чтобы не перезаписать корневой раздел хост машины или другого OpenVZ контейнера):
# tar xvpfz /tmp/virtualPBX_6309.tar.gz
В принципе, на этом этапе можно запустить наш контейнер и насладиться работой OC под OpenVZ c вашими настройками.
Заметки на полях: Для интереса попробовал развернуть на шаблон CentOS 6, но виртуалка работала не совсем корректно, особо разбираться не стал, так как обычно предпочитаю использовать debian-based дистрибутивы.
Приведенный способ очень прост, а если использовать для копирования rsync, то можно перенести ОС почти в реальном времени с минимальным простоем.
Хотелось бы еще сказать пару слов о обновлении VirtualPBX. Так как в образе содержатся не последние сборки проекта, сделаем маленький скрипт для обновления:
# touch /usr/bin/virtualpbx
# chmod +x /usr/bin/virtualpbx
# nano /usr/bin/virtualpbx
Добавим следующий код:
#!/bin/sh
read -p 'Введите номер-версию для обновления (например: 6446):' REPLY
wget http://virtual-pbx.googlecode.com/files/VirtualPBX-$REPLY.tgz && echo "Загрузка успешно" || echo
"Загрузка не удалась, возможно, введен неправильный номер сборки или поменялся метод нумерации проекта"
if [ -f VirtualPBX-$REPLY.tgz ]; then
tar -xzf VirtualPBX-$REPLY.tgz
rm -f VirtualPBX-$REPLY.tgz
cd VirtualPBX-$REPLY
if [ $? -eq 0 ]; then
echo "Обновление успешно!!!"
else
echo "Обновление завершилось неудачно!!!"
exit 1
fi
exit 0
else
echo "Обновление завершилось неудачно!!!"</li>
fi
exit 1
Теперь для обновления достаточно дать команду
# virtualpbx
и ввести нужный номер ревизии для установки.
Уже после написания черновика для статьи, узнал что автор предусмотрел проверку обновлений. Внутри есть скрипт /opt/VirtualPBX/contrib/utils/check_updates.pl, раз в сутки он проверяет наличие обновлений и если находит апдейт, то в админском интерфейсе появляется красная надпись в верху.
Описанным выше методом можно перенести и другие дистрибутивы Linux, изменяя список файлов и каталогов специфичных для ОС (в моем примере файл non_tar), примеры настроек для переноса можно посмотреть на Wiki [3]. Удачных вам экспериментов!
материалы использовавшиеся для подготовки статьи:
tdev.me/2011/02/create-trixbox-2-8-template-for-openvz/ [4]
wiki.openvz.org/Creating_a_CentOS_5.0_Template [5]
Автор: beho1der
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/bash/10412
Ссылки в тексте:
[1] VirtualPBX: http://code.google.com/p/virtual-pbx/
[2] Proxmox VE 2.1: http://pve.proxmox.com/wiki/Main_Page
[3] Wiki: http://wiki.openvz.org/Category:Templates
[4] tdev.me/2011/02/create-trixbox-2-8-template-for-openvz/: http://tdev.me/2011/02/create-trixbox-2-8-template-for-openvz/
[5] wiki.openvz.org/Creating_a_CentOS_5.0_Template: http://wiki.openvz.org/Creating_a_CentOS_5.0_Template
Нажмите здесь для печати.