Инструмент класса «must have in every IT system». Virt-p2v позволяет сделать образ физического сервера и запустить этот образ в дальнейшем на одном из серверов виртуализации KVM/QEMU/Xen.
Аналогичную утилиту я видел для vbox и vmware. Дело предпочтений. Мне же важно, что я могу выдергивать production-серверы, виртуализировать их в KVM и проводить тестовые апгрейды.
Для создания такого исошника нужна федора 14+ и установленный пакет virt-p2v-image-builder. Там запускаете virt-p2v-image-builder -h и внимательно читаете.
Начну, пожалуй, с грустного. В стародавние времена существовал live-cd iso образ virt-p2v. Но, к сожалению, автор проекта — ~rjones (red hat), остался без хостинга для iso-образа. Воот =(
Поэтому фактически данная статья будет преследовать 3 цели:
1) сбор единомышленников (поддержим образ торрентами)
2) обзор virt-p2v
3) ручной способ клонирования физического сервера в виртуальный.
По поводу сбора единомышленников. Пишите на vlad@debian.pro те, кто готовы более или менее регулярно поддерживать раздачу iso образа. Со своей стороны я постараюсь пообщаться с rjones, дабы получить копию образа от него. Думаю, 5 человек, готовых раздавать образ для первого времени будет достаточно.
Теперь обзор.
Чтобы использовать virt-p2v необходимо записать iso образ на болванку и загрузиться с него. С usb-флеш карты работать не будет.
После запуска virt-p2v задаст нам несколько вопросов: ip сервера, на который копируем образ; настройка сети физического сервера, который копируем; устройство, которое является корнем системы вашего сервера; в формат какого гипервизора копировать (как я писал выше — KVM/QEMU/Xen). После этого virt-p2v полезет по ssh на сервер, который мы указали в ответе на первый вопрос. Нам нужно будет указать root пароль удаленного сервера (вход по ssh root’у должен быть разрешен).
После чего на сервере виртуализации нам нужно будет ввести пару команд:
Debian-KVM:~# virsh define p2v-foo-2008MMDDHHMM.conf
Debian-KVM:~# virsh start foo
Конфиг, вероятнее всего, будет в каталоге /etc/libvirt/qemu
Ну а теперь основная часть статьи. Как сделать тоже самое вручную. На самом деле всё очень просто. Но неудобно)
Во-первых, будет куча работы, если у вас несколько HDD, которые действительно используются системой (вам будет нужно повторить шаги для каждого из дисков и потом смонтировать второй и другие диски в виртуальной машине вручную. В смысле не через команду mount, а через virsh. То есть фактически вам нужно будет подключить их к виртуалке).
Нам понадобится любой LiveCD с Linux. Лучше всего здесь подходит Gentoo LiveCD, если честно.
Загружаемся с него. Конфигурируем сеть (ifconfig вам в помощь). Если нужно — оживляем свои софтверные RAID’ы.
После чего выполняем команду:
server:~# dd if=/dev/sda | ssh root@192.168.0.1 'cat > /vms/vds1.img'
Где 192.168.0.1 — IP адрес сервер с KVM гипервизором. Собственно копировать то вы можете это всё куда угодно (например, на свой второй сервер в локальной сети, чтобы минимизировать простой копируемого сервера), но потом .img файл нужно перенести на KVM-хост любым способом.
На KVM хосте выполняем команду:
Debian-KVM:~# virt-install --import --prompt
И отвечаем на вопросы.
После этого коннектимся к хосту через virt-manager, добавляем те устройства, которых нам не хватило (VNC-дисплей, например), роутим виртуалку через нужный brX… в целом занятие не из приятных, но и ничего сложного нет, если вы понимаете, что происходит.
Писать свой XML файл с нуля я бы не советовал. Но можете написать его и попробовать запустить )
Вообще же способ работает. Сегодня потенциальным партнерам я уже продемонстрировал это — они задумались о переезде с пустующих физических серверов на мои VDS.
Статья получилась сильно сумбурной… задавайте свои вопросы. 6 утра, мозг уже не сильно варит…
Буквально сегодня проделывали то же самое, только другим способом:
1) Сделали полный бэкап системы (таром, не дд).
2) Удалали всё лишнее из дампа (логи и др, нечаянно убили /boot).
3) Скинули на внешний винт.
4) Убили систему.
5) Подняли серверную убунту без гуйни на этом винчестере. Настроили в ней сеть и kvm.
6) Подняли несколько виртуалок с разными ос, всё работает.
7) Создали таргетную вирт. Машину и загрузили ей с лайфсд с гуйнёй.
8) Из-под гуйни перебили винт на два раздела. На первый разархивировали тар, на вторую часть установили линукс с гуйнёй (минт).
9) После ребута виртуалки смотрим (по виэнси) список загрузки ос. Нужной федоры там не оказалось, так как мы покоцали бут. Грузим минт. Минт и федора оказались несовместимы по разрядности, поэтому счрутиться и доставить ядро, починить загрузчик не вышло. Поэтому, мы по ssh зашли на сервер с рабочим дебианом (одна из других новоиспеченных виртуалок) и скачали оттуда дебиановский boot себе. Права выставили 777 (чтобы уж наверняка) на всё в boot’е.
10) update-grub
11) init 6 (reboot)
12) В меню загрузки появился пункт нашей федоры!
13) И опять неудача, федора не может найти рут раздел.
14) Перегружаемся в минт и правим /etc/fstab/
15) Fedora 12 загрузилась с одним из последних дебиановских ядер. Терерь подправим конфиги сети и того, что ещё душе угодно.
16) Перегружаемся и радуемся!
У меня такой метод почему-то не сработал, возможно от того что dd делал с аппаратно-программного рейд контроллера. Образ копировался, но стартовать с ним qemu-kvm отказывался, виртуалка просто висла при запуске. Так что пришлось рулить все дедовским методом:
Стартуем «Acronis Snap Deploy Server» с болванки на реальной машине, нужную партицию с реального HDD закатываем в образ.
Стартуем «Acronis Snap Deploy Server» с iso на виртуальной машине, раскатываем образ на виртуальный HDD.
Успехов.
dd-ой подобные штуки вообще редко получаются.
А проприетарщина тоже вещь неприятная.