Stupid KVM Tricks
+virt-install ubuntu16.04
+Create the disk image
+qemu-img create -f qcow2 /var/lib/libvirt/images/xenial.qcow2 20G
Command to run the install
+virt-install \
+ --name xenial \
+ --ram 4096 \
+ --disk path=/var/lib/libvirt/images/xenial.qcow2,size=20 \
+ --vcpus 4 \
+ --os-type linux \
+ --os-variant ubuntu16.04 \
+ --network bridge=br0 \
+ --graphics none \
+ --console pty,target_type=serial \
+ --location ./ubuntu-16.04.3-server-amd64.iso \
+ --extra-args 'console=ttyS0,115200n8 serial'
+
+
+Change the Network Interface
+br0 gets addresses from the network router, but what if you want +your vm to have be on the virbr0 192.168.122.0/24 subnet?
+virsh edit xenial
And then 'J' all the way down to the bottom, change the interface name from br0 to +virbr0,
+virsh start xenial
and then look for the machine with nmap
+nmap -sn 192.168.122.0/24
Clone the VM
+In this case we don't have to pre-allocate the disk image because virt-clone will do that +for us.
+virt-clone --original xenial --name xenial-clone \
+ --file /var/lib/libvirt/images/xenial-clone.qcow2
+
+
+Clone the VM to another Machine
+First dump the xml that defines the virtual machine.
+virsh dumpxml xenial > xenial.xml
+
+
+Then copy both xenial.xml
and xenial.qcow2
to the new host machine. On the new kvm
+host you'll want to at least make sure your vm has the correct CPU architecture.
+The command to get a list of supported kvm cpu architectures is:
virsh cpu-models <arch>
+# i.e.
+virsh cpu-models x86_64
+
+
+After you edit xenial.xml
and update the correct cpu architecture, mv xenial.qcow2
+to /var/lib/libvirt/images/
, clone it. virt-clone
will handle generating new
+mac addresses for the network interfaces.
<cpu mode='custom' match='exact'>
+ <model fallback='allow'>Haswell-noTSX</model>
+ </cpu>
+# i.e. change to above to
+ <cpu mode='custom' match='exact'>
+ <model fallback='allow'>SandyBridge</model>
+ </cpu>
+
+
+
+virt-clone --original-xml xenial.xml --name xenial-clone \
+ --file /var/lib/libvirt/images/xenial-clone.qcow2
+
+
+What is the os-type and os-variant type names?
+osinfo-query os
misc
+-
+
- Start the vm
virsh start xenial
+ - List all the vms
virsh list --all
+ - Stop the vm
virsh destroy xenial
+ - Delete the vm
virsh undefine xenial
+
virsh help
+The virsh help
command returns a long chart of help information. But each section has
+a keyword.
Take for instance the command virsh help monitor
. From this we
+see the domiflist
subcommand (among others). Unfortunately domifaddr
doesn't seem to
+work on the Ubuntu:16.04 host, but there are other ways to find the ip address of
+a virtual machine.
So now if you want to see what host interface the vm xenial
is attached to,
+type.
virsh domiflist xenial
+
+
+which returns:
+Interface Type Source Model MAC
+-------------------------------------------------------
+vnet1 bridge virbr0 virtio 52:54:00:58:bf:75
+
+
+So now we can find the address of virbr0 on the host machine.
+ifconfig virbr0
+
+
+which returns:
+virbr0 Link encap:Ethernet HWaddr 52:54:00:38:87:38
+ inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:1351 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:3037 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:232346 (232.3 KB) TX bytes:502916 (502.9 KB)
+
+
+and thus we know what subnet to scan with nmap to find the ip address of the vm
+nmap -sn 192.168.122.0/24
+
+
+