KVM
Install KVM/libvirt
yum install qemu-kvm libvirt libvirt-python virt-install libguestfs-tools
Create MacVtap Bridge
cat > /usr/share/libvirt/networks/internal.xml <<EOF
<network>
<name>internal</name>
<forward mode="bridge">
<interface dev="enp4s0"/>
</forward>
</network>
EOF
virsh net-define /usr/share/libvirt/networks/internal.xml
virsh net-start internal
virsh net-autostart internal
virsh net-list
Add Guest's VM interface to MacVtap Bridge
virsh edit DCOSM03
<interface type='direct'>
<mac address='52:54:00:d9:fc:4f'/>
<source dev='enp4s0' mode='bridge'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Create Host Bridge
brctl addbr inSW
brctl addif inSW em3
brctl addif inSW em4
brctl stp inSW on
Clone KVM image
virt-clone -o COS7x64 -n COS7x64.4G.40G.Docker.Template -f COS7x64.4G.40G.Docker.qcow2
virsh dumpxml COS7x64 > COS7x64.4G.40G.Docker.xml
Resize QCOW2 image
qemu-img resize COS7x64.4G.40G.Docker.qcow2 +200G
cp COS7x64.4G.40G.Docker.qcow2 COS7x64.4G.40G.Docker-orig.qcow2
virt-resize --expand /dev/sda2 COS7x64.4G.40G.Docker-orig.qcow2 COS7x64.4G.40G.Docker.qcow2
virsh start COS7x64
virsh console COS7x64
lvextend --extents +100%FREE /dev/centos/root /dev/vda2
xfs_growfs /dev/centos/root
There are three options that modern `qemu-img` supports:
(1) 'preallocation=metadata': allocates qcow2 metadata, and it's still
a sparse image.
$ qemu-img create -f qcow2 -o preallocation=metadata test1-metadata.qcow2 1G
Formatting 'test1-metadata.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off refcount_bits=16
328K -rw-r--r--. 1 root root 1.1G Jun 3 03:20 copy-test1-metadata.qcow2
(2) 'preallocation=full': allocates zeroes and makes a non-sparse image.
$ qemu-img create -f qcow2 -o preallocation=full test2-full.qcow2 1G
Formatting 'test2-full.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 preallocation='full' lazy_refcounts=off refcount_bits=16
$ ls -lash test2-full.qcow2
1.1G -rw-r--r--. 1 root root 1.1G Jun 3 03:31 test2-full.qcow2
(3) 'preallocation=falloc': which uses posix_fallocate() to "allocate
blocks and marking them as uninitialized", and is relatively faster
than writing out zeroes to a file:
$ qemu-img create -f qcow2 -o preallocation=falloc test3-falloc.qcow2 1G
Formatting 'test3-falloc.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 preallocation='falloc' lazy_refcounts=off refcount_bits=16
$ ls -lash test3-falloc.qcow2
1.1G -rw-r--r--. 1 root root 1.1G Jun 3 03:32 test3-falloc.qcow2
You can test and compare between (2) and (3) what works best for you.
Create Virtual NAT Network
cat > /usr/share/libvirt/networks/internal.xml <<EOF
<network>
<name>internal</name>
<bridge name="inSW"/>
<forward/>
<ip address="192.168.3.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.3.100" end="192.168.3.199"/>
</dhcp>
</ip>
</network>
EOF
virsh net-define /usr/share/libvirt/networks/internal.xml
virsh net-start internal
virsh net-autostart internal
virsh net-list
Deactivate Network
virsh net-destroy default
virsh net-autostart --network default --disable
Create Virtual Bridge Network
cat > /usr/share/libvirt/networks/internal.xml <<EOF
<network>
<name>internal</name>
<forward mode="bridge"/>
<bridge name="inSW"/>
</network>
EOF
virsh net-define /usr/share/libvirt/networks/internal.xml
virsh net-start internal
virsh net-autostart internal
virsh net-list
Register Domain(Virtual Machine)
virsh define DCOSBoot.xml
virsh start DCOSBoot
virsh autostart DCOSBoot
Add an interface to Domain(Guest VM)
virsh attach-interface --domain SEOut --type bridge --source InternetSW --model virtio --persistent
Dump Domain Configuration to a File
virsh dumpxml SEOut > SEOut.xml
Notes for pfSense VM Guest
With the current state of VirtIO network drivers in FreeBSD, it is necessary to check Disable hardware checksum offload under System > Advanced on the Networking tab and to manually reboot pfSense
https://www.netgate.com/docs/pfsense/virtualization/virtio-driver-support.html
Update VM's Device setting
cat > /usr/share/libvirt/networks/ChangeNet.xml <<EOF
<interface type='bridge'>
<source bridge='outSW'/>
<model type='virtio'/>
</interface>
EOF
virsh update-device COSv7.2x64.PIAF ChangeNet.xml
Last updated
Was this helpful?