Возникла задача перенести несколько серверов с железа в виртуальные машины. В моём случае это CentOS 5 и 6 на ESXi. Если не используется multi-pathing и прочие странные штуки, данная задача легко выполняется с помощью vmware Converter, но в данном случае он оказался не в силах помочь.
В итоге появилась довольно-таки простая схема, как это можно реализовать для Linux.
Для перезда в виртуалку рекомендуется использовать следующую схему выделения дисков:
- диск 1 только под разделы /boot (меньше проблем с загрузкой с простого диска) и / (linux не способен проводить каких-либо действий с диском, где у него лежит корень);
- диск 2 под остальные разделы поверх LVM (lvm позволяет изменять размеры разделов без перезгрузки, но данные о изменившемся диске можно обновить только если там нет корневого раздела).
Предположим следующую схему разбиения (с аналогичным раскладом на исходном сервере):
- /boot - 512Mb (под ядра много не надо, но нынче они уже не такие маленькие как раньше);
- / - остальное место на первом диске;
- /var/log - 1Gb (логи неплохо было бы держать отдельно, чтоб в случае переполнения не пострадали рабочие данные на сервере);
- /var - остальное место на втором диске (этот раздел можно было и не выделять или отдать под /home если это рабочая станция, но для демонстрации полезной команды разбиения lvm я его оставил).
Целевая система запускается с загрузочного диска (например, SystemResqueCD).
Разбивается диск (для старых систем лучше использовать таблицу разделов msdos) и примонтировать их:
# parted -a optimal /dev/sda
mklabel msdos
unit mib
mkpart p 1 513
mkpart p 513 -1
set 1 boot on
quit
# parted -a optimal /dev/sdb
mklabel msdos
unit mib
mkpart p 1 -1
quit
# pvcreate /dev/sdb1
# vgcreate system /dev/sdb1
# lvcreate -L 1G -n log system
# lvcreate -l 100%FREE -n var system
# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/sda2
# mkfs.ext4 /dev/system/var
# mkfs.ext4 /dev/system/log
# mount /dev/sda2 /mnt/gentoo
# cd /mnt/gentoo
# mkdir boot
# mkdir var
# mount /dev/sda1 boot/
# mount /dev/system/var var/
# mkdir var/log
# mount /dev/system/log var/log/
Для того, чтобы к этой системе можно было подключиться, необходимо настроить сеть (если нет DHCP) и установить пароль на пользователя root, который и загружается по умолчанию в данном live-cd:
# net-setup
# passwd
На исходной системе необходимо поставить rsync. Для CentOS:
# yum install rsync
Исходная система загружается в single-режиме (система загрузится в минимальном виде):
- при перезагрузке в grub вызвать списко ядер;
- на необходимом ядре нажать «E»
- в новом меню выбрать пункт с ядром (обычно второй)
- нажать «E»
- дописать в конце строки «single»
- нажать «Enter»
- в новом окне нажать «B»
Далее на исходной системе запускается сеть. Для CentOS 5 и 6:
# /etc/init.d/network start
Перенос данных проходит довольно просто, по очереди с каждым разделом (виртуальные ФС надо исключить) силами rsync с кчлюмами:
- a - архивирование, включает:
- r - рекурсивно захадить в директории;
- l - копировать симлинки как симлинки;
- p - сохранять права доступа;
- t - сохранять дату изменения;
- g - сохранять группу;
- o - сохранять пользователя;
- D - сохранять файлы-устройства;
- v - показывать текуций капируемый файл ;
- x - ограничиться только одной файловой системой;
- P:
- --partial - сохранять недокачанный файл;
- --progress - показывать прогресс;
- A - копировать ACL;
- X - копировать расширенные атрибуты;
- --numeric-ids - передавать значения пользователей и групп цифровыми значениями;
- z - сжимать при копировании;
- --update - копировать только более новые файлы.
В качестве dst_ip поставить IP сервера назначения, так же в пути назначения не ставить слэш после директории назначения, иначе путь должен быть на уровне выше (rsync -avPAXx /root/1 /root/2/ скопирует данные в директорию /root/2/1/):
# rsync -avPAXx / root@dst_ip:/mnt/gentoo
# rsync -avPAXx /boot/ root@dst_ip:/mnt/gentoo/boot
# rsync -avPAXx /var/ root@dst_ip:/mnt/gentoo/var
# rsync -avPAXx /var/log/ root@dst_ip:/mnt/gentoo/var/log
Для установки загрузчика необходимо привести к актуальному виду файлы /mnt/gentoo/etc/fstab и /mnt/gentoo/etc/mtab:
- / - /dev/sda2;
- /boot - /dev/sda1;
- /var - /dev/system/var;
- /var/log - /dev/system/log.
Восстанавливаем загрузчик:
# grub-install --root-directory=/mnt/gentoo /dev/sda
# grub --no-floppy
root (hd0,0)
setup (hd0)
quit
Для завершения необходимо установить драйвера на новом месте. Для этого надо зайти в свежую систему с помощью chroot:
# mount -t proc proc proc/
# mount --rbind /sys sys/
# mount --make-rslave sys/
# mount --rbind /dev dev/
# mount --make-rslave dev/
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
Далее ставим репозиторий vmware и установить драйвера:
# vi /etc/yum.repos.d/vmware.conf
[vmware]
name=VMware Tools 6 x64
baseurl=http://packages.vmware.com/tools/esx/latest/rhel6/x86_64
enabled=1
gpgcheck=1
# yum install vmware-tools-esx-kmods vmware-tools-esx-nox kmod-vmware-tools-pvscsi kmod-vmware-tools-vmmemctl
Далее выходим из chroot и перезагружаем сервер:
# exit
# shutdown -r now
После загрузки системы останется поправить только настройки сети.