Конвертация физических систем и Xen VM в контейнеры OpenVZ (Debian Etch)
Коротко: копируйте корневой каталог исходной машины в директорию контейнера с помощью rsync, настройте основные параметры через vzctl, выполните несколько OpenVZ-специфичных исправлений и запустите контейнер. Подготовьте второй сервер с установленным OpenVZ, убедитесь, что исходная система выключена при использовании того же IP, и проверьте сетевые/служебные конфигурации внутри контейнера.
Важно: инструкция написана для Debian Etch и OpenVZ; для других дистрибутивов или более новых версий потребуются небольшие изменения.
Введение
Автор: Falko Timme
Эта инструкция описывает, как конвертировать физическую систему (Debian Etch) или Xen domU (также Debian Etch) в контейнер OpenVZ. Она также применима к другим виртуальным машинам (VMware, VirtualBox, KVM) с незначительными правками. Я не даю гарантии, что всё сработает в вашей среде.
Кратко о терминах:
- OpenVZ — контейнерная виртуализация для Linux.
- domU — гостевая виртуальная машина Xen.
Основная идея и модель мышления
Ментальная модель: контейнер — это просто корневой файловый набор и набор параметров ядра. Мы переносим файловую систему (за исключением псевдофайловых систем) в директорию контейнера, настраиваем параметры OpenVZ и корректируем файлы, которые конфликтуют с работой внутри контейнера (например, getty, mtab, устройства).
Когда этот метод применим:
- Идеально для простых серверов с типичной Linux-структурой (/etc, /var, /home).
- Может потребовать дополнительных шагов для сложных конфигураций (RAID, LVM, собственные init-скрипты, нестандартные ядра).
Предварительная заметка
В примере будем конвертировать server1.example.com (IP 192.168.0.100) в контейнер VEID 211 на сервере server2.example.com, где уже установлен OpenVZ. В статье предполагается, что каталог OpenVZ — /vz, который является символьной ссылкой на /var/lib/vz.
server2:
ln -s /var/lib/vz /vzПримерные требования:
- root-доступ на обоих хостах;
- установлен OpenVZ на сервере назначения;
- сетевой доступ по SSH между машинами.
1. Создание структуры контейнера и базовая конфигурация
На сервере назначения создайте директории для VEID 211 и стандартный конфиг:
server2:
mkdir /vz/root/211 /vz/private/211
cat /etc/vz/conf/ve-vps.basic.conf-sample > /etc/vz/conf/211.confУстановка rsync на обоих серверах (будем копировать файлы):
server1/server2:
apt-get install rsync2. Копирование файлов с помощью rsync
Переносим содержимое корневой файловой системы исходного сервера в директорию контейнера. Исключаем псевдофайловые системы и временные файлы.
server2:
rsync -arvpz --numeric-ids --exclude dev --exclude proc --exclude tmp -e "ssh -l [email protected]" [email protected]:/ /vz/private/211/Примечание: ключ –numeric-ids сохраняет UID/GID. Перенос может занять от нескольких минут до часов в зависимости от объёма данных.
Альтернативы rsync:
- tar по SSH: более простой потоковый перенос, но сложнее восстанавливать прерванные копирования.
- локальное подключение диска: монтирование и копирование файлов напрямую.
3. Настройка параметров OpenVZ
Указываем шаблон ОС (OSTEMPLATE) — OpenVZ должен знать, какое окружение внутри контейнера ожидается:
server2:
vzctl set 211 --ostemplate debian-4.0-i386-minimal --saveНастроим автозапуск, hostname, IP, лимиты и DNS:
server2:
vzctl set 211 --onboot yes --savevzctl set 211 --hostname server1.example.com --save
vzctl set 211 --ipadd 192.168.0.100 --save
vzctl set 211 --numothersock 120 --save
vzctl set 211 --nameserver 145.253.2.75 --nameserver 213.191.92.86 --saveНастройка дискового пространства (пример: soft 10GB, hard 11GB):
server2:
vzctl set 211 --diskspace 10000000:11000000 --saveСовет: если вы будете назначать контейнеру новый IP, заранее продумайте изменение конфигураций сервисов (Apache, базы данных и т. п.). Если оставляете тот же IP — обязательно выключите исходную систему перед запуском контейнера.
4. OpenVZ-специфичные исправления в файловой системе контейнера
Перед первым запуском нужно удалить/изменить файлы, которые конфликтуют с окружением контейнера, и создать необходимые устройства:
server2:
sed -i -e '/getty/d' /vz/private/211/etc/inittab
rm -f /vz/private/211/etc/mtab
ln -s /proc/mounts /vz/private/211/etc/mtabcp /vz/private/211/etc/fstab /vz/private/211/etc/fstab.old
grep devpts /vz/private/211/etc/fstab.old > /vz/private/211/etc/fstab
mkdir /vz/private/211/dev
mknod --mode 666 /vz/private/211/dev/ptmx c 5 2
mkdir /vz/private/211/dev/pts
cp -a /dev/ttyp* /dev/ptyp* /vz/private/211/dev/
rm -f /vz/private/211/dev/null
mknod --mode 666 /vz/private/211/dev/null c 1 3
mknod --mode 444 /vz/private/211/dev/urandom c 1 9
mkdir /vz/private/211/proc
cat /dev/null > /vz/private/211/etc/network/interfacesПояснение: мы убираем getty-запуски (не нужны для контейнера), связываем mtab с /proc/mounts, создаём специальные файлы устройств и очищаем сетевой интерфейс, чтобы не возник конфликтов с сетевой конфигурацией хоста.
5. Запуск контейнера и начальная проверка
Запускаем контейнер и задаём пароль для root внутри контейнера:
server2:
vzctl start 211Установка пароля:
vzctl exec 211 passwdПосле запуска проверьте:
- журнал контейнера: vzctl exec 211 dmesg, /var/log/* внутри контейнера;
- сетевые настройки: ip addr show внутри контейнера;
- службы: systemctl / init скрипты (в Debian Etch — init).
Критерии приёмки
- Контейнер успешно стартует без критических ошибок в логах.
- Сеть отвечает на ping/SSH (если назначен IP).
- Основные сервисы приложения работают корректно.
Когда этот метод может не сработать
- Система использует нестандартный init или собственное ядро.
- В контейнере требуются специфичные модули ядра, отсутствующие на хосте.
- Если система использует LVM/RAID и сервисы завязаны на устройствах — потребуется дополнительная адаптация.
Отладка и распространённые проблемы
- Проблема: контейнер не стартует — проверьте /vz/private/211/root/var/log/syslog и vzctl status 211.
- Сеть не поднимается — убедитесь, что /etc/network/interfaces внутри контейнера корректен и IP не конфликтует.
- Сервисы падают с ошибкой о доступе к устройству — возможно, требуется создать дополнительные dev-узлы или включить соответствующие параметры в конфиге OpenVZ.
Рекомендуемые команды для диагностики:
vzctl status 211
vzctl exec 211 /bin/bash -l
vzlist -aРоль-based чеклисты
Для администратора (подготовка хоста):
- Установить OpenVZ и проверить совместимость ядра.
- Создать /vz и конфигурации.
- Настроить резервное копирование.
Для оператора (перенос контейнера):
- Установить rsync, выполнить перенос.
- Настроить vzctl параметры, проверить логи.
- Убедиться в отсутствии IP-конфликта.
Безопасность и приватность
- Проверьте, что внутри контейнера не остались секретные ключи, которые не должны дублироваться.
- При переносе персональных данных соблюдайте локальные законы о защите данных (GDPR/локальные аналоги). Удалите ненужные логи/журналы перед публикацией контейнера.
Миграционные советы и совместимость
- Тестируйте на временной сети, прежде чем менять IP продакшн-сервера.
- Для других дистрибутивов: путь сетевых конфигураций может отличаться (например, NetworkManager, /etc/sysconfig/network-scripts и т.д.).
- Если переносите 64‑бит систему в 32‑бит шаблон — это несовместимо.
Быстрые шаблоны и чеклисты
Мини-SOP для переноса в 7 шагов:
- Подготовить host2 с OpenVZ.
- Создать директории и конфиг VEID.
- Установить rsync на обоих хостах.
- Скопировать корень с помощью rsync.
- Установить OSTEMPLATE и сетевые параметры.
- Выполнить OpenVZ-специфичные исправления.
- Запустить контейнер и проверить сервисы.
Краткий план восстановления при ошибке
Если контейнер не работает после запуска:
- Остановите контейнер: vzctl stop 211
- Восстановите оригинальные файлы из /vz/private/211/etc/fstab.old
- Проверьте прав доступов и ownership в корне контейнера
- Повторите запуск и проверьте логи
Дополнительные ресурсы
- OpenVZ: http://wiki.openvz.org/Main_Page
- Debian: http://www.debian.org
Резюме
Метод основан на копировании корневой файловой системы и последующей настройке контейнера OpenVZ. Это быстрый путь миграции для стандартных Debian-серверов, но требует внимания к устройствам, сетевым настройкам и специфичным сервисам. Всегда тестируйте на отдельной изолированной сети и имейте резервные копии.
Важно
Перед тем как переводить продакшн-сервер: сделайте полный бэкап и протестируйте контейнер в отдельной среде.
1-строчный словарь
- VEID — идентификатор виртуального окружения (контейнера) в OpenVZ.
Социальный анонс
Коротко: пошаговое руководство по преобразованию Debian Etch (физической машины или Xen domU) в контейнер OpenVZ с примерами команд и списком распространённых проблем.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента