Привет всем 👋,
Данная заметка посвящена задаче, где требуется клонировать виртуальную машину с одной KVM-ноды и восстановить её на соседнем сервере.
Создаем образ VM
Подключаемся на сервер, где расположена старая виртуальная машина. Допустим, наша VM называется - vm126340
. При помощи утилит lsblk
+ grep
находим путь к ее LVM-партици:
lsblk | grep vm126340
├─lvm0-1420_vm126340 253:53 0 14.7G 0 lvm
Из этого вывода можно понять:
lvm0
- volume-группа, где размещается lvm-партиция,1420_vm126340
- название lvm-раздела,
С этими данными можно получить более детальную информацию о разделе с помощью команды:
lvdisplay /dev/lvm0/1420_vm126340
--- Logical volume ---
LV Path /dev/lvm0/1420_vm126340
LV Name 1420_vm126340
VG Name lvm0
LV Write Access read/write
LV Creation host, time kvm12, 2024-02-15 21:12:49 +0600
LV Status available
# open 0
LV Size <14.65 GiB
Current LE 3750
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:53
Теперь создаем новую сессию в tmux. Это нужно для защиты процесса создания образа: если по какой-то причине нас выбросит с сервера, процесс не прервется, и мы сможем снова подключиться к текущей сессии.
tmux
Далее создаем образ командой:
dd if=/dev/lvm0/1420_vm126340 of=/image/lvm_vm126340.img bs=16M status=progress
Разбор аргументов:
if=/dev/lvm0/1420_vm126340
— input file, источник. В данном случае это логический том с именем1420_vm126340
, который располагается в volume-группеlvm0
.of=/images/lvm_vm126340.img
— output file, файл-образ, куда будут записаны данные. Файл будет создан в каталоге /images.bs=16M
— размер блока копирования. Данные будут читаться и записываться блоками по 16 мегабайт, что ускоряет процесс по сравнению с умолчанием (512 байт).status=progress
— выводит информацию о процессе копирования в реальном времени, показывая объем обработанных данных.
После завершения создания образа копируем его на соседний KVM-хост, где будем восстанавливать.
Копируем командой:
scp /images/lvm_vm126340.img root@kvm18:/images/
Переходим к следующему этапу…
Восстановление образа
Перед восстановлением через VMmanager или консоль Shell необходимо создать виртуальную машину с аналогичными параметрами.
Допустим, мы создали VM, и её имя — vm126340_clone. Как и в примере ранее, идентифицируем диски этой виртуалки, аналогичным способом.
lsblk | grep vm126340_clone
├─lvm0-1991_vm126340_clone 253:89 0 15G 0 lvm
На втором сервере также заходим в tmux и запускаем процесс восстановления:
dd if=/images/lvm_vm126340.img of=/dev/lvm0/1991_vm126340_clone bs=16M status=progress oflag=direct conv=fsync
Разбор параметров:
if=/images/lvm_vm126340.img
— Файл-образ ранее сохраненного логического тома.of=/dev/lvm0/1991_vm126340_clone
— целевой диск/логический том, куда записываются данные.bs=16M
— размер блока чтения/записи (16 мегабайт).status=progress
— показывает процесс копирования в реальном времени (сколько данных уже записано).oflag=direct
— передает данные напрямую в целевой диск, минуя кеш операционной системы (ускоряет запись и снижает нагрузку на оперативную память).conv=fsync
— гарантирует, что данные будут сразу записаны на диск, а не останутся в кэше.
Перед запуском
dd
виртуальная машина должна быть выключена.
После завершения процесса подключаемся к виртуалке и настраиваем сеть. Задача выполнена — ещё один закрытый тикет ✅.