Превращение работающей системы Linux в экземпляр KVM на другом компьютере

У меня есть две физические машины, которые я хочу виртуализировать.

Я не могу (физически) подключить жесткие диски с любой машины к новой машине, которая будет выступать в качестве их хоста VM, поэтому я считаю, что копирование всей структуры системы с использованием dd не может быть и речи.

Как лучше всего перенести эти машины со своего оборудования в среду KVM? Я установил пустые неформатированные логические тома LVM для размещения своих файловых систем, имея в виду, что предоставление виртуальным машинам реального раздела для работы обеспечивает более высокую производительность, чем прикрепление образа в файловой системе.

Буду ли я лучше создавать новые установки ОС и перебирать различия?

FWIW, две машины, которые будут виртуальными машинами, работают под управлением CentOS 5, а на хост-машине работает Ubuntu Server 10.04 без особой важной причины. Я сомневаюсь, что это имеет большое значение, так как это все еще будет KVM и libvert.

3 ответа

Решение

Возможно, вы могли бы передать вывод от dd через SSH-туннель к вашей целевой машине. Я знал, что это будет сделано относительно успешно в виртуальной машине VMWare.

Хорошая информация в основном ответе здесь и содержит инструкции о том, что делать, если SSH не работает (на некоторых liveCD все равно есть SSH-сервер, поэтому проблем не должно быть): Как настроить клонирование диска с помощью dd, netcat и ssh туннель?

P2V Linux с физического на виртуальный KVM - без автоматизированных инструментов

Живая миграция P работает Debian Wheezy 7.11 для V KVM на Proxmox VE v5.4

mdadm программный RAID1 P диски к KVM virtio дискам

мигрировать с большого P диски на меньшие V диски

предисловие

Целью этих шагов было взять физический Linux P узел запускает live-production и виртуализирует его. Без необходимости создавать и размещать диски объемом несколько терабайт, а также не использовать md raid в V Гость, потому что целевой гипервизор (Proxmox 5) использовал ZoL/ZFS. Также хотел уменьшить время простоя / перезагрузки на работающем P узел.

Эти шаги могут быть не идеальными, но они должны приблизить вас к решению и привести полезные ссылки, которые я нашел по пути.

Я решил опубликовать ответ на этот вопрос после тщательного поиска в Google на https://unix.stackexchange.com/ и https://faultserver.ru/. Это казалось наиболее актуальным вопросом для моего ответа, хотя на момент написания этой статьи ему было 9 с лишним лет.

Вот некоторые связанные вопросы, которые я нашел, и этот ответ также призван решить:
P2V с rsync
Как создать виртуальную машину с живого сервера?
Как перенести физическую систему на виртуальный сервер KVM с доступом только к сети?
Преобразование физической машины в виртуальную без ее отключения
Миграция физической машины в KVM
VMware преобразования Linux физической машины
Как перенести установку Linux с нуля на виртуальную машину

ШАГ 1

поддержка virtio

# On the P node
# check the kernel has the virtio support
grep -i virtio /boot/config-$(uname -r)
# when no, that is an issue out of scope of these instructions. contact me.

# if lsinitrd is available, check if the initramfs already has the modules
lsinitrd /boot/initrd.img-$(uname -r) | grep virtio
# when yes, your virtio is already in the initramfs, continue to next step

# when no, add the modules to the initramfs
# backup existing initrd.img
cp -iv /boot/initrd.img-$(uname -r) /boot/BACKUP_initrd.img-$(uname -r)

# non Debian way
mkinitrd --with virtio_console --with virtio_pci --with virtio_blk -f /boot/initrd.img-$(uname -r) $(uname -r)

# The Debian way
# https://wiki.debian.org/DebianKVMGuests
echo -e 'virtio_console\nvirtio_blk\nvirtio_pci' >> /etc/initramfs-tools/modules
# check correctly append new lines etc, correct manually if needed
cat /etc/initramfs-tools/modules
# compile new initramfs
update-initramfs -u

# OPTIONAL if safe
# !!! WARNING DOWNTIME -- reboot P node to test everything is ok with the new initramfs
shutdown -r now

ШАГ 2

KVM prep - разделы BIOS

# boot a new KVM guest on SystemRescueCD or similar

# create the BIOS/UEFI partition(s)
# https://help.ubuntu.com/community/DiskSpace#BIOS-Boot_or_EFI_partition_.28required_on_GPT_disks.29
# https://help.ubuntu.com/community/Installation/UEFI-and-BIOS/stable-alternative#Create_a_partition_table

# follow the linked guides above to create the relevant BIOS partitions/disks.

ШАГ 3

Подготовка к KVM - раздел (ы) BOOT и DATA

# BOOT partition
# inspect the P boot partition - note the parameters
# CRITICAL the new V boot partition should be identical to the partition on the P.
# make the V boot partition using your preferred partitioning tool


# on P node, make a copy of the boot partition
# umount the boot fs for backup
umount /boot
# backup boot partition
gzip --stdout /dev/md1 > ~user/boot.disk.md1.img.gz
# re-mount boot fs
mount /boot

# on the KVM live CD
cd /tmp # or somewhere with > some space for the boot image
scp user@hostname.com:boot.disk.md1.img.gz .

gunzip boot.disk.md1.img.gz
# copy the P boot partition to the V boot partition
dd if=boot.disk.md1.img of=/dev/vda1
# verify consistency
fsck.ext3 /dev/vda1

# list the detected file systems, visual check for the expected results
fsarchiver probe simple

# on the KVM live CD make your data partitions, the size you wish
# mirroring the P is not required, obviously needs to be enough space for the data.

# CRITICAL the binaries/tools used to make the data file systems must be for the same kernel generation i.e. from the node being converted, otherwise the system will fail to mount the rootfs during boot.
# https://unix.stackexchange.com/questions/267658/

# CRITICAL target file systems must have enough inodes
mkefs -t ext4 -N 1500000 /dev/vda2
mkefs -t ext4 -N 1500000 /dev/vda3

cd /mnt/
mkdir linux
mount /dev/vda2 linux/
cd linux/
mkdir -p var boot
mount /dev/vda3 var/

шаг 4

данные rsync

# consider mounting the fs ro, or at the very least stopping services for the final rsync
nohup rsync --bwlimit=7m --human-readable --itemize-changes --verbose --archive --compress --rsync-path='sudo rsync' --rsh='ssh -p22345' --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/boot --exclude=/var/spool user@hostname:/ . 1>../rsync.stdout 2>../rsync.stderr

# check the logs are ok, and as expected

# final sync, stop services, and/or ro the fs(s)
rsync --bwlimit=7m --human-readable --itemize-changes --verbose --archive --compress --rsync-path='sudo rsync' --rsh='ssh -p22345' --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/boot --exclude=/var/spool user@hostname:/ .

шаг 5

обновить grub

mount /dev/vda1 boot/
mkdir -p proc dev sys
mount -o bind /proc /mnt/linux/proc
mount -o bind /dev /mnt/linux/dev
mount -o bind /sys /mnt/linux/sys

chroot /mnt/linux /bin/bash

export PATH=$PATH:/bin:/sbin:/usr/sbin/ # check what is required for your P
grub-install /dev/vda
grub-install --recheck /dev/vda
update-grub

# update /etc/fstab with the new id/names/options
vim /etc/fstab

# Only required if you're P node had md RAID
# https://dertompson.com/2007/11/30/disabling-raid-autodetection-in-ubuntu/
aptitude purge mdadm

# required mount points
mkdir -p /mnt /proc /sys /dev /run

# required because I didn't rsync /var/spool
mkdir -p /var/spool/cron/atspool /var/spool/cron/crontabs /var/spool/cron/atjobs /var/spool/postfix /var/spool/rsyslog

шаг 6

проверить KVM и внести необходимые изменения пост P2V

# reboot to KVM guest normal boot disk

# fix a screen bug that appeared after P2V
aptitude reinstall screen

# ensure boot logging is enabled
# https://wiki.debian.org/bootlogd
aptitude install bootlogd

# networking
# check that the MAC address assigned to the KVM matches what the KVM kernel reports
ip link

# modify net interfaces, taking note of the interface name with the correct MAC address
vim /etc/network/interfaces

# update DNS if required
vim /etc/resolv.conf

# update apache2 envvars if required
vim /etc/apache2/envvars

# update hosts
vim /etc/hosts

# reboot
shutdown -r now

шаг 7

финальные тесты и проверки

#### post reboot
# check dmesg and/or kvm console for boot it issues
dmesg -x
dmesg -x --level=err --level=warn

# check boot log for issues, useful if physical console cannot be easily viewed
# formatting: https://stackoverflow.com/q/10757823
sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot |less -r

Вы можете скопировать образы дисков на логические тома LVM и предоставить их в качестве образа диска для виртуальной машины. Убедитесь, что вы отключили NTP и NTPDATE на виртуальных серверах.

Я конвертировал некоторые старые образы, используя Mondo для создания загрузочных образов восстановления. Это позволило мне изменить размер разделов во время переустановки.

Другие вопросы по тегам