Всем привет!
В последнее время я искал решение для миграции KVM-виртуальных машин с блочным хранилищем (DISK / LVM / SAN) в Proxmox (любой тип хранилища, поддерживаемый/настроенный). Поскольку есть пользователи с огромными виртуалками в продакшене, и простой даунтайм не вариант (а dd — нерабочее решение), я попробовал собрать решение, чтобы перевести и этих клиентов на Proxmox. Разумеется, этот подход зависит от вашей текущей конфигурации, но, думаю, с этой информацией вы сможете адаптировать его под вашу среду.
Без лишних слов, шаги следующие:
0. Создайте резервную копию.
1. На исходном физическом сервере, где у вас KVM, установите nbd-server или nbdkit.
2. Выключите виртуалку.
3. Экспортируйте устройство обратной стороны виртуалки (или устройств) чем-то вроде: `nbdkit -p 9999 file /dev/vgname/lvname`. Можно экспортировать несколько дисков, но на разных портах. Можно экспортировать `/dev/mapper/sandisk` или локальный сырой диск или любое сырое блочное устройство. Безопасную передачу между хостами или другие меры безопасности – ваша задача. Моя рекомендация – хотя бы настроить несколько iptables правил на исходном хосте, чтобы не было трафика с этими портами с каких-либо других хостов, кроме целевого Proxmox.
4. На целевом Proxmox установите nbd-client или nbdkit. Это уже на ваше усмотрение, какая версия NBD лучше подходит. `apt install nbd-client`
5. Сопоставьте удаленный диск локально: `nbd-client remoteip 9999 /dev/nbd0`
6. Создайте временное хранилище, если ваш текущий Proxmox не поддерживает образы дисков виртуальных машин на основе файлов. Что-то вроде: создайте папку `/tmpfs`, Datacenter -> Storage -> Add Directory -> `/tmpfs` ...
7. Создайте виртуальную машину, которую хотите перенести, но без обратного диска. Рекомендую также клонировать MAC-адрес из исходной виртуальной машины. Получите ID виртуальной машины.
8. В Proxmox CLI: Создайте папку типа `/tmpfs/images/vmid` в этой папке: `ln -s /dev/nbd0 transfer0.raw`, `chmod 666 /dev/nbd0` (адаптируйте к вашим потребностям), `qm rescan`.
9. В Proxmox GUI, перейдите к вашей виртуальной машине, дважды щелкните по неиспользуемый диск и настройте его соответствующим образом. В разделе Hardware измените порядок загрузки, чтобы загружаться с этого диска.
10. Я не упоминал ничего о драйверах или других проблемах с миграцией, потому что это, полагаю, самоочевидно, что они понадобятся.
11. Загрузите виртуальную машину.
12. Disk actions -> Move storage
13. TEST
14. Clean up: удалите неиспользуемый диск, удалите Storage tmpfs, `nbd-client -d /dev/nbd0`
15. Наслаждайтесь и дайте знать, если заметили проблему.
В последнее время я искал решение для миграции KVM-виртуальных машин с блочным хранилищем (DISK / LVM / SAN) в Proxmox (любой тип хранилища, поддерживаемый/настроенный). Поскольку есть пользователи с огромными виртуалками в продакшене, и простой даунтайм не вариант (а dd — нерабочее решение), я попробовал собрать решение, чтобы перевести и этих клиентов на Proxmox. Разумеется, этот подход зависит от вашей текущей конфигурации, но, думаю, с этой информацией вы сможете адаптировать его под вашу среду.
Без лишних слов, шаги следующие:
0. Создайте резервную копию.
1. На исходном физическом сервере, где у вас KVM, установите nbd-server или nbdkit.
2. Выключите виртуалку.
3. Экспортируйте устройство обратной стороны виртуалки (или устройств) чем-то вроде: `nbdkit -p 9999 file /dev/vgname/lvname`. Можно экспортировать несколько дисков, но на разных портах. Можно экспортировать `/dev/mapper/sandisk` или локальный сырой диск или любое сырое блочное устройство. Безопасную передачу между хостами или другие меры безопасности – ваша задача. Моя рекомендация – хотя бы настроить несколько iptables правил на исходном хосте, чтобы не было трафика с этими портами с каких-либо других хостов, кроме целевого Proxmox.
4. На целевом Proxmox установите nbd-client или nbdkit. Это уже на ваше усмотрение, какая версия NBD лучше подходит. `apt install nbd-client`
5. Сопоставьте удаленный диск локально: `nbd-client remoteip 9999 /dev/nbd0`
6. Создайте временное хранилище, если ваш текущий Proxmox не поддерживает образы дисков виртуальных машин на основе файлов. Что-то вроде: создайте папку `/tmpfs`, Datacenter -> Storage -> Add Directory -> `/tmpfs` ...
7. Создайте виртуальную машину, которую хотите перенести, но без обратного диска. Рекомендую также клонировать MAC-адрес из исходной виртуальной машины. Получите ID виртуальной машины.
8. В Proxmox CLI: Создайте папку типа `/tmpfs/images/vmid` в этой папке: `ln -s /dev/nbd0 transfer0.raw`, `chmod 666 /dev/nbd0` (адаптируйте к вашим потребностям), `qm rescan`.
9. В Proxmox GUI, перейдите к вашей виртуальной машине, дважды щелкните по неиспользуемый диск и настройте его соответствующим образом. В разделе Hardware измените порядок загрузки, чтобы загружаться с этого диска.
10. Я не упоминал ничего о драйверах или других проблемах с миграцией, потому что это, полагаю, самоочевидно, что они понадобятся.
11. Загрузите виртуальную машину.
12. Disk actions -> Move storage
13. TEST
14. Clean up: удалите неиспользуемый диск, удалите Storage tmpfs, `nbd-client -d /dev/nbd0`
15. Наслаждайтесь и дайте знать, если заметили проблему.
