====== Миграция OpenVZ контейнера на KVM ======
===== Основной процесс =====
Исходные данные:
* сервер-источник - контейнер OpenVZ
* пустой сервер-приемник - виртуальная машина KVM
Используем следующий алгоритм:
* на сервере-приемнике устанавливаем ОС, аналогичную работающей на сервере-источнике
* на сервере-источнике и сервере-приемнике устанавливаем rsync
* на сервере-источнике создаём файл со списком исключений, например **/root/exclude.txt** :
/boot
/dev
/etc/conf.d/net
/etc/fstab
/etc/hosts
/etc/init.d/nova-agent*
/etc/ips
/etc/ipaddrpool
/etc/ips.dnsmaster
/etc/mtab
/etc/modprobe*
/etc/modules
/etc/network/interfaces
/etc/networks
/etc/rc.conf
/etc/resolv.conf
/etc/sysconfig/network*
/etc/sysconfig/hwconf
/etc/sysconfig/ip6tables-config
/etc/sysconfig/kernel
/lib/modules
/net
/proc
/sys
/tmp
/usr/share/nova-agent*
/usr/sbin/nova-agent*
/var/lock
* на сервере источнике устанавливаем **mingetty**
* на сервере-источнике правим **/etc/inittab** примерно к следующему виду:
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
x:5:respawn:/etc/X11/prefdm -nodaemon
* останавливаем основные демоны на сервере-источнике (MySQL, веб-сервер и т.д.)
* запускаем на сервере-источнике rsync со следующими параметрами:
rsync -e "ssh -p 22" --delete --numeric-ids -avpogtSlHz --exclude-from="/root/exclude.txt" / root@<куда>:/
Описание опций:
^ Опция ^ Значение ^
| **%%-e%%** | указывает замену программы удаленной оболочки. В приведённом примере можно опустить, но в случае, например, с SSH на нестандартном порту будет полезно |
| **%%--delete%%** | удалять файлы, которых нет на передающей стороне |
| **%%--numeric-ids%%** | не преобразовывать значения uid/gid по именам пользователя/группы |
| **%%-a%%** | архивный режим, эквивалент для -rlptgoD |
| **%%-v%%** | Этот параметр увеличивает сумму подробностей, которые выводятся в течение передачи. По умолчанию, rsync работает молча. Один -v будет иметь следствием выдачу списка переданных файлов и короткий итог в конце. Два -v раскрывают детали о пропущенных файлах и выдают несколько больше информации в завершение. Большее число может понадобится только при отладке rsync. |
| **%%-p%%** | Копирует все права на приемную сторону точь в точь с оригиналом. Без указания этого параметра каждый новый файл получает те права доступа, что имеет исходный с учетом umask, действующей на приемной стороне, в то время как все другие (включая обновляемые) сохраняют свои уже существующие разрешения (это то же поведение, что имеют другие утилиты копирования файлов, такие как cp). |
| **%%-o%%** | Копирует атрибуты владельца на приемную сторону в точности с оригиналом. На большинстве систем только супер-пользователь имеет право устанавливать владельца файла. Нужно заметить, что если удаленный демон действует в chroot-окружении, то подразумевается наличие параметра --numeric-ids, потому что на удаленной стороне в этом случае нет доступа к именам пользователей в /etc/passwd. |
| **%%-g%%** | Копирует атрибуты группы на приемную сторону в точности с оригиналом. Если удаленная сторона не действует из-под супер-пользователя, то сохранятся только те значения групп, членом которых является пользователь приемной стороны (имеет значение имя группы, а не ее id). |
| **%%-t%%** | Указывает передавать время модификации файлов и обновлять им соответствующий атрибут на приемной стороне. Обратите внимание, что если этот параметр не установлен, то становится неэффективной оптимизация передачи по исключению не изменявшихся по времени файлов; другими словами, пропуск -t или -a будет означать, что следующая передача будет осуществляться с параметром -I, для всех файлов будут сравниваться контрольные суммы, а в журнале появятся соответствующие сообщения о них, даже если они не изменялись. |
| **%%-S%%** | Пытаться эффективнее обработать фрагментацию файлов, чтобы сэкономить пространство на приемной стороне. |
| **%%-l%%** | Если обнаружена символьная ссылка, то она же создается и на приемной стороне. |
| **%%-H%%** | Указывает пересоздать жесткие ссылки на конечной стороне в соответствии с тем, что имеется на исходной. Без этого параметра жесткие ссылки обрабатываются как обычные файлы. |
| **%%-z%%** | С этим параметром rsync сжимает все передаваемые данные файлов. Это полезно на медленных линиях. Метод сжатия, используемый при этом, тот же, что реализует gzip. |
* перезагружаем сервер-приемник.
----
===== Источники =====
* [[https://www.linux.org.ru/forum/general/11736440?lastmod=1435764467926|Миграция серверов с Digital Ocean]]
* [[http://victor-tsedrik.livejournal.com/4740.html|Миграция виртуальных машин с OpenVZ на KVM. Часть 1. Машины на Centos.]]
* [[https://www.linux.org.ru/forum/general/614249|С чем едят mingetty]]
* [[https://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=rsync&category=1|rsync]]
* [[https://habrahabr.ru/post/102849/|Перенос Linux на другой компьютер]]