QEMU/KVM on ThinkPad X230T Laptop with Dual-boot: Difference between revisions
Line 13: | Line 13: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Setup the virtual machine == | == Setup the virtual machine == | ||
The setup of the virtual machine is done via the <code>virt-manager</code> GUI. The first "special" thing according to my setup is that both operating systems are installed in UEFI mode, so the virtual machine should be UEFI | The setup of the virtual machine is done via the <code>virt-manager</code> GUI. The first "special" thing according to my setup is that both operating systems are installed in UEFI mode, so the virtual machine should be UEFI with chipset Q35. In order to pass-through the physical SSD/HDD you need to do setup ad follow. | ||
<syntaxhighlight lang="xml" line="1" highlight="5"> | <syntaxhighlight lang="xml" line="1" highlight="5"> | ||
<disk type="block" device="disk"> | <disk type="block" device="disk"> | ||
Line 27: | Line 27: | ||
== Install the guest tools == | == Install the guest tools == | ||
The final step of the setup is installing the [[QEMU/KVM Guest tools#Windows Guest tools|QEMU/KVM Guest tools for Windows]], thus the screen will be automatically resized within the SPICE client of <code>virt-manager</code>. | The final step of the setup is installing the [[QEMU/KVM Guest tools#Windows Guest tools|QEMU/KVM Guest tools for Windows]], thus the screen will be automatically resized within the SPICE client of <code>virt-manager</code>. | ||
== The final configuration of the VM == | == The final configuration of the VM == | ||
<syntaxhighlight lang="shell" line="1"> | <syntaxhighlight lang="shell" line="1"> | ||
Line 209: | Line 208: | ||
</domain> | </domain> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== References == | == References == | ||
* Ask Ubuntu: [https://askubuntu.com/questions/144894/add-physical-disk-to-kvm-virtual-machine Add physical disk to KVM virtual machine] | * Ask Ubuntu: [https://askubuntu.com/questions/144894/add-physical-disk-to-kvm-virtual-machine Add physical disk to KVM virtual machine] |
Revision as of 09:58, 13 August 2022
I was in need to access Windows 10 from Kali Linux on my dual booted Lenovo ThinkPad X230T device. So here are the things I've done to achieve that.
Test the Virtualization Capabilities of the System
Check weather the system supports virtualization and it is enabled via the BIOS. The following command must return at least 1
:
egrep -c '(vmx|svm)' /proc/cpuinfo
Install QEMU, KVM, LIBVIRT
Within the older versions of Debian based OS, like as Ubuntu 20.04, we was in need to install the packages qemu qemu-kvm
, but in mot recent operating systems as Kali 2022 we need to install qemu-system-x86
instead.
sudo apt install qemu-system-x86 libvirt-daemon libvirt-clients bridge-utils virt-manager virtinst libosinfo-bin ovmf remmina
In order to get rid of the password dialogue for virt-manager
– "System policy prevents management of local virtualization systems" – I've added my Linux user to the libvirt
group.
sudo usermod -aG libvirt $USER
Setup the virtual machine
The setup of the virtual machine is done via the virt-manager
GUI. The first "special" thing according to my setup is that both operating systems are installed in UEFI mode, so the virtual machine should be UEFI with chipset Q35. In order to pass-through the physical SSD/HDD you need to do setup ad follow.
<disk type="block" device="disk">
<driver name="qemu" type="raw" cache="none" discard="unmap"/>
<source dev="/dev/sda"/>
<target dev="sda" bus="sata"/>
<address type="drive" controller="0" bus="0" target="0" unit="0"/>
</disk>
Note you don't need to type the 5th line if your using virt-manager
to edit the XML entry for the drive – it will be generated automatically on save.
In most how-to manuals they propose to use <target dev="vdX" bus="virtio"/>
, but it is not possible to use virtio
while there is not driver installed within the Windows 10 OS. So you need to install the driver first… or during the installation of Windows if it is new installation.
Install the guest tools
The final step of the setup is installing the QEMU/KVM Guest tools for Windows, thus the screen will be automatically resized within the SPICE client of virt-manager
.
The final configuration of the VM
virsh dumpxml "Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97" | tee "Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97_2021.07.04_img.xml"
<domain type='kvm'>
<name>Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97</name>
<uuid>55e58096-7aa3-4ca8-b18c-cb35aeadfde5</uuid>
<title>Windows10 edk2.OVMF.CSM QXL.SPICE.AC97</title>
<description>UEFI: https://www.kraxel.org/repos/jenkins/edk2/</description>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://microsoft.com/win/10"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>8388608</memory>
<currentMemory unit='KiB'>8388608</currentMemory>
<vcpu placement='static'>8</vcpu>
<iothreads>1</iothreads>
<os>
<type arch='x86_64' machine='pc-q35-4.2'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-with-csm.fd</loader>
<nvram>/var/lib/libvirt/qemu/nvram/Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97_VARS.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vpindex state='on'/>
<synic state='on'/>
<stimer state='on'/>
<reset state='on'/>
<vendor_id state='on' value='1234567890ab'/>
<frequencies state='on'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
<ioapic driver='kvm'/>
</features>
<cpu mode='host-passthrough' check='partial'>
<topology sockets='1' cores='4' threads='2'/>
</cpu>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback' io='threads' discard='ignore'/>
<source file='/mnt/vm-pool/vms/Windows10.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/mnt/vm-pool/images/virtio-win-0.1.185--spice-guest-tools--w10-dla.iso'/>
<target dev='sdb' bus='sata'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='2'/>
</disk>
<controller type='usb' index='0' model='qemu-xhci' ports='15'>
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='1' port='0x10'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
</controller>
<controller type='pci' index='2' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='2' port='0x11'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='3' port='0x12'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
</controller>
<controller type='pci' index='4' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='4' port='0x13'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
</controller>
<controller type='pci' index='5' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='5' port='0x14'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
</controller>
<controller type='pci' index='6' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='6' port='0x15'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
</controller>
<controller type='pci' index='7' model='pcie-to-pci-bridge'>
<model name='pcie-pci-bridge'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</controller>
<controller type='pci' index='8' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='8' port='0x16'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
</controller>
<controller type='pci' index='9' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='9' port='0x17'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
</controller>
<controller type='pci' index='10' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='10' port='0x18'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</controller>
<controller type='scsi' index='0' model='lsilogic'>
<address type='pci' domain='0x0000' bus='0x07' slot='0x01' function='0x0'/>
</controller>
<interface type='direct'>
<mac address='52:54:00:1c:0e:3a'/>
<source dev='eno2' mode='bridge'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<gl enable='no'/>
</graphics>
<sound model='ac97'>
<address type='pci' domain='0x0000' bus='0x07' slot='0x02' function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</memballoon>
</devices>
</domain>
References
- Ask Ubuntu: Add physical disk to KVM virtual machine
- Ronaldevers.nl: Adding a Physical Disk to a Guest with Libvirt / KVM
- Charleslabri.com: Adding Passthrough Physical Disk in KVM Guests
- Ask Fedora: Why does virt-manager ask for authentication password?