В одном из предыдущих постов я писал о миграции Linux в виртуальную среду. Там я использовал Acronis True Image для создания образа жесткого диска и развертывания этого образа в виртуальной машине.
Данный способ вполне рабочий, но немного подумав я пришел к выводу: «А зачем мне Акронис??». В итоге я открыл для себя более хардкорный способ миграции Linux в виртуальную среду. Данный способ более универсальный и наверное надежный но требует больше телодвижений.
Это все было красиво в теории до недавнего времени, когда я удачно мигрировал один из боевых серверов Debian в виртуальную среду VMware.
В целом ситуация такая же как описывалось в предыдущей статье:
Есть сервер с работающим и настроенным CentOS на борту, нам нужно между голым железом и операционкой сделать прокладку в виде гипервизора ESXi/XenServer/Virtualbox и т.п. При этом, у нас нету второго сервера, нету vCenter, соответственно, нету возможности использовать «легальные» и поддерживаемые утилиты типа VMware Converter для P2V миграций.
В данной ситуации у меня был Debian, что в общем-то не особо принципиально.
Последовательность действий такова:
1. Подготовка сервера к миграции
2. Загрузка с LiveCD Linux и архивирование файлов
3. Заливание файлов на внешнее хранилище
4. Форматирование дисков и установка гипервизора (VMware ESXi)
5. Настройка гипервизора и создание виртуальной машины
6. Разбивка дисков на виртуальной машине
7. Копирование и распаковка архивов с внешнего хранилища
8. Настройка Grub
9. Перезагрузка и наслаждение результатом
10. Осознание своей крутости
Преимущества данного способа в том, что в качестве внешнего хранилища мы можем использовать не только локальные устройства типа флешек, винчестеров и т.п. но также можем залить файлы на удаленный сервер (я использовал бэкапный сервер провайдера).
В процессе миграции мы также можем безболезненно изменить разбивку дисков как нам захочется, это тоже своего рода небольшое преимущество.
1. К подготовительным операциям можно отнести генерирование нового файла initrd со включенным модулем mptbase, если он еще не включен (проверить можно с помощью lsmod), что бы избежать ошибки, о которой я писал здесь. Данный модуль обеспечивает поддержку LSI Logic адаптеров, которые эмулируются по умолчанию в виртуальной машине VMware.
Здесь я уже описывал данную процедуру для CentOS. Для Дебиана она немного другая, т.к. здесь используется mkinitramfs вместо mkinitrd. Для Debian это выглядит как-то так:
Загружаем модуль в ядро и убеждаемся что он присутствует:
$ sudo modprobe mptbase$ sudo lsmod | grep mptbase mptbase 48382 2 mptspi,mptscsih
Добавляем данный модуль в список включенных в initrd модулей:
$ sudo echo "mptbase" >> /etc/initramfs-tools/modules
Бэкапим существующий файл:
$ sudo mv /boot/initrd.img-2.6.32-5-amd64 /boot/initrd.img-2.6.32-5-amd64.back
Создаем новый файл с таким же именем:
$ sudo mkinitramfs -o /boot/initrd.img-2.6.32-5-amd64 2.6.32-5-amd64
Первый атрибут — это название целевого файла, второй — точная версия текущего ядра.
После создания файла перезагружаемся, дабы убедиться, что ничего не сломали ;)
Если загрузились удачно, еще раз проверяем наличие модуля mptbase:
$ sudo lsmod | grep mptbase
должны увидеть что-то вроде:
mptbase 48382 2 mptspi,mptscsih
Также в качестве подготовительных работ я рекомендую почистить всякий мусор на дисках: лишние бэкапы, гигабайты старых логов, кеши, темпы и т.п. Это здорово ускорит процесс миграции.
2. Загружаемся с LiveCD, который мы заранее подготовили :) Рекомендую использовать LiveCD точно такого же дистрибутива как и мигрируемая ось. То есть, если у нас на сервере установлен Debian Squeeze amd64 то лучше подготовить LiveCD с Debian Squeeze amd64.
Если точно такого же загрузочного дистрибутива не существует, то нужно постараться что бы LiveCD был такой же разрядности (32-бита, или 64-бита) и не был очень древним. Все это не руководство к действию, а просто рекомендации, которые могут избавить от лишней головной боли в процессе миграции.
В общем загрузились. Монтируем разделы нашего линукса например в /mnt и начинаем паковать по очереди все нужные папки. Я использовал tar, но если есть проблемы с местом можно еще и gzip-нуть, gzip займет больше времени но позволяет добиться хорошей степени сжатия (в некоторых случаях до 10-15 раз).
В общем я делал как-то так:
$ cd /mnt$ tar cf bin.tar bin$ tar cf boot.tar boot$ tar cf etc.tar etc..$ tar cf var.tar var
Такие папки как /dev, /proc, /sys, /tmp можно не архивировать, просто потом главное не забыть создать их в новой файловой системе ;)
Желательно также записать или запомнить символические ссылки, которые лежат в корневом каталоге (/lib64, /vmlinuz, /initrd.img)
3. После того как мы получили кучку архивов, нужно слить их куда-то во внешний мир, для параноиков можно даже в нескольких экземплярах.
Здесь процесс зависит от того, какое хранилище вы планируете использовать. Если это фтп-сервер или NFS — настраиваем сеть и вперед, если это винчестер или флешка — подключаем, монтируем ну и т.д.
4. Если вы все важные данные скопировали на внешний источник и руки уже чешутся побыстрее все отформатировать — остановитесь на минуту и подумайте «Ничего ли я не забыл забэкапить..?» и заодно «Зачем мне все это?!?!?!» :))
Подумали? Можно приступать к установке гипервизора. В моем случае, как я уже и говорил, это VMware ESXi версии 5.0.
VMware упростили установку ESXi по максимуму, разобраться не составит проблем даже домохозяйке. Программа установки задает всего несколько вопросов: язык, устройство для установки, пароль суперпользователя.
ВНИМАНИЕ: Кастомную разбивку диска VMware исключили, все делается в автоматическом режиме, поэтому диск, который вы выберете во время установки будет полностью переразбит и данные на нем будут уничтожены!! Будьте осторожны!
Надеюсь установка VMware ESXi не вызовет трудностей. Если охота почитать мануалы перед установкой — на сайте VMware они в открытом доступе.
5. После установки, у VMware ESXi нужно настроить Management сеть. Для этого с локальной консоли нажимаем «F2» вбиваем root и пароль, который указали при установке, и попадаем в консоль администрирования ESXi сервера — DCUI.
Идем в Configure Management Network и прибиваем статический IP (или оставляем DHCP), маску, ДНСы и vLAN если нужно.
Выходим из консоли сохраняя настройки и лезем на веб-морду ESXi. Там мы можем найти прямую ссылку на дистрибутив vSphere клиента и ссылку на официальную документацию по продуктам.
Документация по желанию, а клиент придется скачать. Скачали, установили все по-дефолту — Next -> Next -> Next -> Finish.
Запускаем клиент и подключаемся к серверу. До этого момента вопросов и проблем никаких не должно быть, т.к. здесь все элементарно и интуитивно понятно.
Подключившись клиентом, заходим в Inventory и создаем новую виртуальную машину указывая ей тип SCSI контроллера LSI Logic SAS (по умолчанию). Все остальные параметры на свое усмотрение, или оставляем дефолтные, главное что бы размер виртуального диска смог вместить все данные, которые мы забекапили (не забываем про раздел подкачки).
6. Монтируем LiveCD iso-шку в виртуальный привод и грузимся с него. Разбиваем наш виртуальный диск как душе угодно тулзовиной fdisk. Монтируем новые разделы в /mnt в соответствии с разбивкой. Например, если мы делаем /boot отдельным разделом, то сначала монтируем корневой раздел в /mnt, создаем папку boot в /mnt и монтируем бутовый раздел в /mnt/boot.
7. Подключаем наш внешний источник, куда мы забекапили файлы сервера. Копируем архивы в /mnt и распаковываем.
Создаем пустые папки и символические ссылки, которые были в корневом разделе, в общем приводим файловую систему в человеческий вид.
Здесь так же придется поправить точки монтирования в файлике /mnt/etc/fstab таким образом что бы они соответствовали новой разбивке.
ВАЖНО: Если у вас разделы монтировались по UUID то обращаю внимание на то, что они будут новые и нужно их заменить, или смонтировать разделы по имени устройства.
8. Не спешим перезагружаться, нам еще нужно пнуть загрузчик!
Не могу сказать точно в чем была причина, но у меня система не завелась, пока я не обновил GRUB.
Данная процедура описана для последней суперкрутой замечательной и многофункциональной версии самого лучшего в мире загрузчика GRUB2, с последней версией которого, у меня все никак руки не доходят разобраться. Для более старой версии GRUB процедура будет несколько другая.
Есть несколько способов обновить загрузчик, но я выбрал chroot. Для данного способа убеждаемся в том, что все разделы нашего виртуального диска смонтированы также как в пункте 6, а также завязываем /dev и /proc на /mnt/dev, /mnt/proc :
$ sudo su# mount -t proc none /mnt/proc# mount -o bind /dev /mnt/dev
меняем окружение:
# chroot /mnt /mnt/bin/bash
обновляем загрузчик:
# update-grub
вывод команды должен быть похож на это:
Generating grub.cfg ... Found linux image: /boot/vmlinuz-2.6.32-5-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-amd64 doneВАЖНО: Если перед тем как сделать бэкап вы не сгенерировали новый файлик initrd, о котором я писал в пункте 1, то сейчас самое время это сделать!
9. Перезагружаем виртуалку и смотрим что получилось.
Здесь 2 варианта:
— все завелось, взлетело, загрузилось
— выплюнуло ошибку
10. По результатам пункта 9 мы либо наслаждаемся хорошо проделанной работой, либо траблшутим косяки :)
Один из возможных косяков описан здесь.
У меня все взлетело, надеюсь у вас тоже :)
После успешной миграции, советую также установить VMware Tools на ваш линукс, это даст большую степень интеграции с гипервизором, соответственно и дополнительные возможности. Эту процедуру я опишу как-нибудь отдельной статьей.
Ну вот и все…успешных миграций! ;)