Цель: Вот я склонировал VM базирующейся на связке QEMU + KVM применительно к Ubuntu 18.04 Server amd64, а что дальше — ведь нужно же ее как-то подготовить перед использование, по аналогии как делается с Windows системами через sysprep. А у меня Ubuntu система — значит и для нее данную процедуру по обезличиванию нужно проделать.

Как я делал клонирование VM, через virt-manager подключаюсь к своему хосту (Ubuntu 18.04 Server + QEMU/KVM), открываю снапшоты у VM, откатываюсь на необходимый и после в свойствах контейнера VM запускаю процесс: «Виртуальная машина» – «Клонировать». VM успешно склонировалась, но вот если запустить эталонную виртуальную машину и склонированную наблюдается что при различных MAC-адресах они обе получают одинаковый IP-адрес от роутера.

Сейчас я с нуля пройдусь по шагам клонирования VM через консоль командной строки на хосте QEMU+KVM хост на базе Ubuntu 18.04 Server amd64

ekzorchik@navy:~$ ssh -l ekzorchik 172.33.33.25

ekzorchik@srv-bionic:~$ sudo virsh list --all

Id Name State

----------------------------------------------------

- FOX_PXE_1804_Server shut off

- generic shut off

- UServer1804 shut off → клонирую вот эту систему (снапшот откатил через virt-manager)

- Userver1804_2 shut off

- UServer1804_3 shut off

- W7X64 shut off

ekzorchik@srv-bionic:~$

Шаг №1: Проверяю что утилита virt-sysprep доступна в консоли если это не так, то устанавливаю на хост необходимый пакет:

ekzorchik@srv-bionic:~$ virt-sysprep

Command 'virt-sysprep' not found, but can be installed with:

sudo apt install libguestfs-tools

ekzorchik@srv-bionic:~$ sudo apt-get install -y libguestfs-tools

ekzorchik@srv-bionic:~$ virt-sysprep -V

virt-sysprep 1.36.13

Шаг №2: Клонирую необходимую виртуальную машину:

ekzorchik@srv-bionic:~$ sudo virt-clone --connect qemu:///system --original UServer1804 --name UServer1804_CLONE --file /var/lib/libvirt/images/UServer1804_CLONE.qcow2

Allocating 'UServer1804_CLONE.qcow2' | 40 GB 00:07

Clone 'UServer1804_CLONE' created successfully.

Шаг №3: Делаем Sysprep для склонированной VM (она у меня под именем UServer1804_CLONE)

ekzorchik@srv-bionic:~$ sudo virt-sysprep -d UServer1804_CLONE

[ 0.0] Examining the guest ...

[ 2.5] Performing "abrt-data" ...

[ 2.5] Performing "backup-files" ...

[ 2.9] Performing "bash-history" ...

[ 2.9] Performing "blkid-tab" ...

[ 2.9] Performing "crash-data" ...

[ 2.9] Performing "cron-spool" ...

[ 2.9] Performing "dhcp-client-state" ...

[ 2.9] Performing "dhcp-server-state" ...

[ 2.9] Performing "dovecot-data" ...

[ 2.9] Performing "logfiles" ...

[ 3.0] Performing "machine-id" ...

[ 3.0] Performing "mail-spool" ...

[ 3.0] Performing "net-hostname" ...

[ 3.0] Performing "net-hwaddr" ...

[ 3.0] Performing "pacct-log" ...

[ 3.1] Performing "package-manager-cache" ...

[ 3.1] Performing "pam-data" ...

[ 3.1] Performing "passwd-backups" ...

[ 3.1] Performing "puppet-data-log" ...

[ 3.1] Performing "rh-subscription-manager" ...

[ 3.1] Performing "rhn-systemid" ...

[ 3.1] Performing "rpm-db" ...

[ 3.1] Performing "samba-db-log" ...

[ 3.2] Performing "script" ...

[ 3.2] Performing "smolt-uuid" ...

[ 3.2] Performing "ssh-hostkeys" ...

[ 3.2] Performing "ssh-userdir" ...

[ 3.2] Performing "sssd-db-log" ...

[ 3.2] Performing "tmp-files" ...

[ 3.2] Performing "udev-persistent-net" ...

[ 3.2] Performing "utmp" ...

[ 3.2] Performing "yum-uuid" ...

[ 3.2] Performing "customize" ...

[ 3.2] Setting a random seed

[ 3.2] Setting the machine ID in /etc/machine-id

[ 3.2] Performing "lvm-uuids" ...

ekzorchik@srv-bionic:~$

О доступных операциях с помощью virt-sysprep

ekzorchik@srv-bionic:~$ sudo virt-sysprep --list-operations

Шаг №4: Проверяю, а запуститься ли теперь виртуальная машина с системой внутри нее. Но вот все те так уже и хорошо, в консоли VM (через virt-manager) вижу:

ekzorchik@srv-bionic:~$ sudo virsh start UServer1804_CLONE

Domain UServer1804_CLONE started

Booting from Hard Disk…

error: disk `lvmid/IDENTIFICATE` not found

Entering rescue mode…

grub rescue>

Вопрос почему?

Как я понял, загрузчик не смог найти /boot раздел для обычной загрузки и вывалился в ошибку указал раздел с указанным lvmid — мол хозяин поправь я тебя специально в режим восстановления GRUB RESCUE отправил.

На заметку: В режиме grub rescue> доступны только 4 команды, но это более чем достаточно, а команды: ls, set, unset, insmod

Шаг №5: Посредством команды ls в режиме восстановления grub отобразим все же какие разделы видит grub

grub rescue> ls

(hd0) (hd0,msdos1) (lvm/srv--bionic--vg-swap_1) (lvm/srv--bionic--vg-root)

grub rescue>

Шаг №6: В моем случаем у меня система полностью установлена на LVM, т. е. Раздел boot расположен на lvm разделе, а значит укажем загрузчику использовать раздел lvm:

grub rescue> ls (lvm/srv--bionic--vg-root)/boot/

./ ../ config-4.15.0-48-generic grub/ System.map-4.15.0-48-generic vmlinuz-4.15.0-48-generic initrd.img-4.15.0-48-generic

grub rescue> set prefix=(lvm/srv--bionic--vg-root)/boot/grub

grub rescue> set root=(lvm/srv--bionic--vg-root)

grub rescue>

Шаг №7: Загружаем необходимые модули дабы внесенные изменения запустили систему:

На заметку: Самым правильным способом считаю самим пройтись и определить какие модули нужны будут для загрузки и добавить, а не пользоваться найденными на просторах статей интернета. Так Вы запомните ошибки и сообщения которые возникают когда система не может загрузится и для Вас не будет в дальнейшем паники, что делать? У меня такого никогда не было.

grub rescue> insmod lvm

grub rescue> insmod normal

grub rescue> normal → пробуем загрузить систему, если все хорошо система загрузится как обычно:

Ubuntu 18.04.2 LTS srv-bionic tty1

Hint: Num Lock on

srv-bionic login:

и IP адрес уже получила не такой как у основной ВМ с которой выполнялось клонирование:

ekzorchik@srv-bionic:~$ ip r

default via 172.33.33.1 dev ens0 proto dhcp src 172.33.33.17 metric 100

172.33.33.0/24 dev ens0 proto kernel scope link src 172.33.33.17

172.33.33.1 dev ens0 proto dhcp scope link src 172.33.33.17 metric 100

Если же система не загрузилась, то вот пример наиболее часто встречающихся модулей на загрузку:

grub rescue> insmod ext2

grub rescue> insmod lvm

grub rescue> insmod part_msdos

На заметку: На действующей системе можно посмотреть какие модули при загрузке используется посмотрев файл: cat /boot/grub/grub.cfg

Авторизуюсь в системе и отправляю ее в ребут дабы убедиться что она загрузится самостоятельно:

ekzorchik@srv-bionic:~$ sudo reboot

Но вот не задача, снова такая же ошибка, что опять и так каждый раз вручную править — это бред, нужно разобрать реальное практическое решение. Повторяю шаги выше, но систему не перезагружаю.

ekzorchik@srv-bionic:~$ sudo grub-install /dev/vda

ekzorchik@srv-bionic:~$ sudo update-grub

ekzorchik@srv-bionic:~$ sudo reboot

и вот после перезагрузки система запустилась без какой-либо ошибки. Теперь работает.

На этом у меня пока все, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru