====== Миграция из контейнера (openvz, lxc) в KVM ======
===== Подготовка к миграции =====
На целевом сервере следует создать виртуалку со схожими с контейнером параметрами и загрузиться в linux live CD (GRML). Размечаем диск одним разделом и создаем на нем файловую систему (рекомендуется **ext3**). Также следует настроить сеть на виртуалке.
===== Миграция =====
# Монтируем диск на сервере с KVM
mount /dev/sda1 /mnt
# Копируем данные из источника (с ноды openvz или из другого контейнера)
rsync -aAX --info=progress2 root@ovz_node:/vz/root/87999e47-d980-46a2-b446-af6edc8434af/ /mnt/
# После завершения копирования монтируем все, что требуется для работы
# и переходим в гостевую ОС системы
#
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /sys /mnt/sys
chroot /mnt bash
# Заменяем fstab
echo '/dev/sda1 / root defaults 0 0' > /etc/fstab
# resolv.conf
#
rm /etc/resolv.conf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
#
# Установка ядра - ищем самое свежее
# Для некоторых ОС ниже см. рабочие примеры установки ядра
#
# ubuntu
# Ставим свежее ядро
apt install -y linux-image-generic linux-headers-generic
# Можно поискать требуемое ядро
apt search linux-image | grep generic | grep -v unsigned
# И установить именно его
# ubuntu 22.04
apt install -y linux-image-6.8.0-40-generic linux-headers-generic
# ubuntu 20.04
apt install -y linux-image-5.4.0-99-generic linux-headers-generic
# debian 10,11,12
apt install -y linux-image-amd64 linux-headers-amd64 grub2
# debian 11
apt update
apt install -y linux-image-5.10.0-31-amd64 linux-headers-5.10.0-31-amd64 grub2
# Исправление GRUB
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset consoleblank=0 elevator=noop"
GRUB_CMDLINE_LINUX="consoleblank=0 systemd.show_status=true net.ifnames=0 biosdevname=0"
###
# конфигурируем сеть. у меня виртуалка получает IP по DHCP
##
echo '### https://vps-server.ru/vps
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp' > /etc/network/interfaces
grub-install /dev/sda
update-grub
update-initramfs -u
в непонятных случаях помогает скрипт в кроне:
#!/bin/bash
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
ifconfig eth0 inet 91.194.3.25 netmask 255.255.255.128 broadcast 91.194.3.127
ip r a default via 91.194.3.126 dev eth0
systemctl > /root/systemctl.txt
service ssh restart
===== Особенности переноса данных на выделенные серверы =====
При переносе данных с виртуальных машин и выделенных серверов на выделенные серверы следует до начала переноса создать разметку на дисках целевого сервера, а также собрать необходимые массивы дисков и т.п. Затем смонтировать массивы в директорию /mnt в соответствии с назначенными точками монтирования, например: / в /mnt/, /boot /mnt/boot, vz /var/lib/vz и т.д.
==== Копирование данных ====
#
# Исключение лишних директорий и файлов при копировании.
#
rsync -aAX --info=progress2 --exclude={'vz','/proc','/sys','/dev','/mnt'} /source /dest
==== Установка загрузчика, в т.ч. EFI ====
mount /dev/sdXY /mnt
mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt$i; done
chroot /mnt
grub-install /dev/sdX
update-grub
exit
# EFI
mount -t efivarfs none /sys/firmware/efi/efivars