We have bare-metal server A and we want to copy the virtual machine from A to bare-metal server B. If the virtual machine is 80GB and the connectivity between the two servers is 1GB the transfer will be ready for 20 minutes.
If our virtual machine is 1GB big, the transfer will still take so much because we will transfer all 80GB – 79GB of which zeros.
In this post I will share a way with tar how to avoid this annoying transfer of redundant data to sparse files.
Create a sparse file
For the test, I created a virtual machine with a size of 80GB hard drive :
Добавянето на нов хард диск във 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 без проблеми.