Имаме bare-metal сървър A и искаме да копираме виртуална машина от него на bare-metal сървър B. Ако виртуалната ни машина е голяма примерно 80GB и връзката между двете машини е на 1GB то трансфера ще отнеме около 20 минути.
Ако виртуалната ни машина реално е голяма 1GB, трансфера пак ще отнеме толкова, защото ние ще прехвърлим всичките 80GB – 79GB от които нули.
В този пост ще споделя начин с tar как да избегнем това досадно прехвърляне на излишни данни на sparse файлове.
Създаване на sparse файл
За теста създадох виртуална машина с големина на хард диска 80GB :
Добавянето на нов хард диск във vmware по принцип не е сложно. Обаче ако следваме стъпките описани в тяхната документация ще трябва да рестартираме нашата linux машина, за да може тя да види новия диск. В този пост ще споделя как става добавянето на нов хард диск на линукс машина, без тя да бъде рестартирана след това – (VMware add new hard disk to linux server without reboot).
root@monitor:~# fdisk -l
Disk /dev/sda: 160 GiB, 171798691840 bytes, 335544320 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe52d3a30
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 335542271 334540802 159.5G 5 Extended
/dev/sda5 1001472 335542271 334540800 159.5G 8e Linux LVM
Disk /dev/mapper/monitor--vg-root: 149.5 GiB, 160545374208 bytes, 313565184 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/monitor--vg-swap_1: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Така изглежда линукс машината ни с един 160гб хард диск.
Предполага се, че вече сме добавили диска от vSphere клиента и следва да изпълним следните команди в линукса :
for i in `ls /sys/class/scsi_host` ; do echo "- - -" > /sys/class/scsi_host/$i/scan; done
И воала! Новият ни 320гб хард диск е вече видим и може да го форматираме.
Особенно е, че трябва да се направи bridge на интерфейса който ще използваме към виртуалните машини. При мен това беше eth1 , а /etc/network/interfaces след включването на bridge-a изглеждаше по този начин :
auto br1
iface br1 inet static
address 192.168.168.1
network 192.168.168.0
netmask 255.255.255.0
broadcast 192.168.168.255
bridge_ports eth1
bridge_stp off
bridge_fd 0
Важно да спомена, че това не е главният интерфейс на сървъра и съответно няма default gateway.
До тук всичко точно и лесно, обаче проблемите започнаха да идват един след друг.
За самото управление на KVM (Kernel-based Virtual Machine) средата исках да използвам програмата virt-manager (има я и за MacOS). За тази цел трябваше да пусна демона libvirtd да слуша на tcp порт.
В противен случай дава следната грешка при опит за връзка към сървъра от страна на virt-manager : Verify that the ‘libvirtd’ daemon is running
Добавя се следният ред в /etc/default/libvirt-bin :
libvirtd_opts="-l"
и демона вече може да бъде достъпван отвън. Хубаво е да се сложи и точно орпеделено айпи на което да работи с цел сигурност.
Тук излезе и следващият проблем : /etc/init.d/libvirt-bin не искаше да се страртира вече, защото даваше грешка :
Jan 18 00:12:16 border libvirtd[3021]: Cannot read CA certificate '/etc/pki/CA/cacert.pem': No such file or directory
Jan 18 00:12:16 border systemd[1]: libvirt-bin.service: Main process exited, code=exited, status=6/NOTCONFIGURED
Jan 18 00:12:16 border systemd[1]: Failed to start Virtualization daemon.
Оказа се, че бях пропуснал да инсталирам сертификат които libvirtd искаше да имам задължително. Използвах стъпките от http://libvirt.org/ и си създадох сертификатите.
След това вече можех да стартирам процеса libvirt-bin и да се свържа към сървъра чрез virt-manager.
Всичко останало мина по план, и успях да инсталирам виртуална машина с Windows 10 без проблеми.