Миграция линуксового PGP в виде Virtual Appliance.

У этого продукта есть удобная возможность сделать полный бекап и восстановление конфигурации. Это поможет мне провести миграцию с минимальным даунтаймом. Сначала мигрирую копию сервера, устанавливаю другой IP адрес, потом обновляю до актуальной конфигурации и возвращаю оригинальный IP.
Первым делом сохраняю *.vmdk на жесткий диск и конвертирую в *.vhd. Есть разные утилиты для преобразований, даже родные от Microsoft. Я сделал это с помощью бесплатной программы StarWind V2V Image Converter.
Получившийся файл PGP Server_1.vhd скопировал на локальный диск сервера Hyper-V через административный расшаренный ресурс \\servername\c$
В Hyper-V Manager создаю виртуальную машину с именем PGP и указываю использовать существующий диск.
Иду в настройки получившейся машины, удаляю Network Adapter и добавляю Legacy Network Adapter. Пока не стоит специальных драйверов можно пользоваться только этой сетевой картой. Состояние сетевой карты должно быть Not connected! Иначе при успешном старте может быть конфликт IP адресов с работающим сервером. Если работающего сервера у вас нет, можете действовать на свое усмотрение.
Запускаем…. первая ошибка.

mount: could not find filesystem '/dev/root'

setuproot: moving/dev failed: No such file or directory

switchroot: mount failed: No such file or directory
Kernel panic — not syncing: Attempted to kill init!


Это связано с тем, что диск в VmWare был типа SCSI а в HyperV стал IDE.
Значит нужно загрузиться с загрузочного диска и подправить нужные настройки.
Сразу скажу – загрузиться с дистрибутива CentOS 5.5 не получилось, выходил kernel panic. Надо брать поновее — CentOS-6.4-x86_64-bin-DVD1.iso, список серверов для скачки — isoredirect.centos.org/centos/6/isos/x86_64/

Подключаю скачанный образ CentOS 6.4 и загружаюсь в режиме восстановления, сеть подключать не обязательно. Выхожу в shell.
Первым делом, как было написано в информационных окнах во время запуска OS, запускаю #chroot /mnt/sysimage/

Дальше в двух файлах меняю sda* на hda*
— /etc/grub.conf
— /etc/fstab

Командой passwd сбрасываю рутовый пароль. Если хотите работать более безопасно, заведите еще и отдельного пользователя.
Что бы иметь возможность подключаться по ssh, в файле /etc/sshd/sshd_config параметр PasswordAuthentication меняю с no на yes.
В директории /etc/sysconfig/network-scripts/ смотрим наличие и содержимое файлов ifcfg-ethN. У меня там только один файл ifcfg-eth0. Захожу в него через vi и меняю IP на другой, что бы не было конфликта с работающим сервером. Опять же, если таковых нет, пропускайте.

Перезагружаю сервер и радостно наблюдаю успешную загрузку, прерываемую лишь неудачными стартами некоторых PGP-шных сервисов из-за смены IP. Но это не страшно, когда верну IP назад, все поднимется успешно.
Подключаю сеть и проверяю подключение по SSH.
Бинго! На этом этапе можно сохраниться, точнее заснепшотиться. Линукс, особенно без установленных integration tools, лучше снапшотить в выключенном состоянии

Создаю файл /etc/yum.repos.d/mainrepo.repo следующего содержания
[MainRepo]
name= MainRepo
baseurl=http://mirror.centos.org/centos/5/os/i386/
enabled=1
gpgcheck=0


По вечерам с этим репозиторием проблемы, поэтому можно поменять на другой.
baseurl= ftp://ftp.muug.mb.ca/mirror/centos/5/os/i386/

Тестирую
#yum clean all
#yum list

Должен выйти список компонент репозитория.

Обновляю систему. Для этого добавляю в файл /etc/yum.conf строку

exclude=centos-release-* perl-* initscripts-* openldap*
Первые три компоненты обновить с налету не получилось, дальше копать не стал. А обновленный openldap несовместим с текущей версией PGP, поэтому оставляем его старым.

Запускаю обновление
#yum update

Несмотря на формальную версию Centos 5.5, после обновления все компоненты находятся на уровне CentOS 5.9, в которой осуществлена встроенная поддержка Hyper-V

Меняю обратно в двух файлах меняю hda* на sda*
— /etc/grub.conf
— /etc/fstab

В grub.conf имеет смысл менять только для нового ядра, тогда в случае проблем можно загрузиться и попасть в режим восстановления.

Смотрю в /etc/grub.conf версию новоустановленного ядра и пути к загрузочным файлам.

splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-348.el5PAE)
root (hd0,0)
kernel /vmlinuz-2.6.18-348.el5PAE ro root=/dev/sda2 noexec=off
initrd /initrd-2.6.18-348.el5PAE.img
title CentOS (2.6.18-348.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/sda2 noexec=off
initrd /initrd-2.6.18-348.el5.img


Включаю модули поддержки виртуализации
#mkinitrd /boot/initrd-2.6.18-348.el5PAE.img 2.6.18-348.el5PAE --preload hv_storvsc --preload hv_vmbus --preload hv_utils --preload hv_netvsc --preload hid-hyperv --preload hid-base-hv -f
#mkinitrd /boot/initrd-2.6.18-348.el5.img 2.6.18-348.el5 --preload hv_storvsc --preload hv_vmbus --preload hv_utils --preload hv_netvsc --preload hid-hyperv --preload hid-base-hv -f

#shutdown –h now

Удаляю устаревший сетевой адаптер и добавляю обычный.

После включения проверяю успешную загрузку модулей командой
#lsmod | grep hv

После успешной загрузки и проверки бекаплю работающий PGP, ставлю на новом IP старого и восстанавливаю бекап.
Даунтайм около 2-х минут.