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

Миграция ОС в OpenVZ контейнер

Миграция ОС в OpenVZ контейнер
   В данной заметке я хочу рассказать как просто перенести Linux систему с физического сервера или полной виртуализации (KVM,XEN,VMware) в контейнер OpenVZ. По данной теме достаточно материалов, но я расскажу о самом простом способе.
   Для начала немного теоретических выкладок. Какие основные плюсы можно получить от контейнерной виртуализации:

  • Минимальные накладные расходы на виртуализацию
  • Прозрачность файловой системы контейнера с хост машины
  • Высокая скорость загрузки контейнера
  • Простота живой миграции

Но также есть и минусы:

  • Контейнер виртуализации использует ядро хост системы
  • В стандартные ядра популярных Linux дистрибутивов 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