Perintah Baris QEMU/KVM: NVMe Emulation; Linux, FreeBSD & Windows 11 Sebagai Sistem Tetamu (Guest OSs)
Virtual Machines / Mesin Maya
Hajat di hati hendak emulate pemacu NVMe
, maka kuturuti hati ini. Memandangkan pemacu simpanan kita memang jenis M.2 NVMe
, boleh tahan laju dan berdesup jugalah perginya.
Dah alang-alang kan, kita cuba jugalah emulate di external HDD.
Hah, boleh tu memanglah boleh! Kit dah namanya pon HDD yak! Tak ande ler laju mana belaghinya ter. Tapinya nak ngabokan boleh le kita cuba mengajukkan ter. Kitnya entohlah. Macam perasaannya ter tak berapa nok sampei gitulah nak digambokan.
Pendek katanya, proses nak mengajuk pemacu ini memerlukan hos yang memiliki jenis pemacu ini jugalah. Barulah kena penggunaannya.
Em tak apelah jadilah ter koi memulakan kalam di sini. Sekadar mewujudkan muqaddimahnya. Mengkala baca dek oghang asing ni, ha bior lantokkan dia terpinga nok teranseleit pun tak dapat.
Saya sediakan opsyen Qemu yang seragam buat ketiga-tiga jenis sistem pengoperasian dan baris tambahan untuk disuaikan dengan setiap satunya.
Sebelum itu, salin OVMF_VARS.fd
atau OVMF_VARS.4m.fd
(bergantung kepada keserasian dengan sistem pengoperasian) ke dalam direktori yang dikhususkan untuk setiap OS bagi pengasingan UEFI firware.
cp /usr/share/edk2/x64/OVMF_VARS.4m.fd ~/qemu/linux/firmware # Linux
cp /usr/share/edk2/x64/OVMF_VARS.fd ~/qemu/bsd/firmware # FreeBSD
cp /usr/share/edk2/x64/OVMF_VARS.4m.fd ~/qemu/win11/firmware # Windows 11
Perintah dengan opsyen-opsyen seragam
qemu-system-x86_64 -enable-kvm \
-machine type=q35,vmport=off,usb=on \
-usb -device usb-tablet -device virtio-balloon -daemonize \
-vga qxl -display gtk,gl=on,show-cursor=on \
-display spice-app,gl=on -device virtio-serial-pci \
-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on \
Opsyen untuk bootloader firmware (UEFI
)
FreeBSD:
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=$HOME/qemu/bsd/firmware/OVMF_VARS.fd \
Linux dan Windows 11:
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
-drive if=pflash,format=raw,file=$HOME/qemu/linux/firmware/OVMF_VARS.4m.fd \
Opsyen untuk peruntukan memori dan CPU
Linux & FreeBSD:
-m 2G -cpu host -smp 4 \
Windows 11:
-m 6G -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time -smp 12 \
Opsyen untuk sambungan Internet
Linux & FreeBSD:
-nic user,model=virtio-net-pci,id=nic0,hostfwd=tcp::60022-:22 \
Windows 11:
-nic user,model=virtio-net-pci,id=nic0,smb=$HOME/qemu/share/win \
Opsyen untuk resolusi auto bagi paparan grafik dan clipboard
Bagi Linux dan Windows 11 sahaja:
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent \
Opsyen wajib bagi Windows 11
-chardev socket,id=chrtpm,path=$HOME/tmp/mytpm/swtpm-sock \
-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 \
Opsyen untuk memuatkan cakera (NVMe
) dan fail-fail ISO
Linux & FreeBSD:
-device nvme,serial=deadbeef,drive=nvm \
-drive index=0,media=disk,if=none,id=nvm,aio=native,cache.direct=on,file=$HOME/qemu/bsd/disks/disk.img \
-drive index=1,media=cdrom,file=$HOME/qemu/bsd/isos/Live.iso
Windows 11:
-device nvme,serial=deadbeef,drive=nvm \
-drive index=0,media=disk,if=none,id=nvm,aio=native,cache.direct=on,file=$HOME/qemu/win11/disks/disk.img \
-drive index=1,media=cdrom,file=$HOME/qemu/win11/isos/Win11_23H2_English_x64.iso \
-drive index=2,media=cdrom,file=$HOME/qemu/win11/isos/virtio-win-0.1.240.iso
Opsyen tambahan sekiranya perlu
- Untuk audio:
-device intel-hda -device hda-duplex -device hda-micro \
- Untuk memanjangkan port USB:
-device ich9-usb-ehci1,id=usb \
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3 \
NOTA TAMBAHAN: |
---|
1) Linux (UEFI) |
2) FreeBSD (UEFI) |
3) Windows 11 |
Nota tambahan untuk Linux (UEFI):
- Assign bilangan
CPU Cores
dengan-smp
. Komputer riba saya memiliki CPU dengan6-core
, bermakna jumlahThreads
-nya ialah12
. Maka saya tugaskan bilangan Cores-nya sebanyak4
(quad-core) untuk kesemua jenis sistem pengoperasian tetamu ini, jumlah yang popular gitu (serasa diri inilah). Kalau tidak dinyatakan, sistem tetamu hanya akan memiliki1-core
sahaja. - Tambah
-boot [options]
sekiranya perlu kepada keutamaan susunan jenis media semasa proses booting. - Boleh setup SSH server di VM dan connect ke dalam SSH VM melalui baris '
ssh -p 60022 user@127.0.0.1
' di sistem hos dengan memanjangkan port TCP hos melalui opsyen '-nic user,hostfwd=tcp::60022-:22
'. - Baris tambahan '
-virtfs local,path=$HOME/path_to_shared-folder,mount_tag=hostshare,security_model=none,id=fsdev0
' boleh digunakan untuk perkongsian data antara sistem hos dan tetamu sekiranya tidak mahu menggunakan SSH connection atau SSHFS. Kemudian, mount di VM dengan baris perintah 'mount -m -t 9p -o trans=virtio,version=9p2000.L hostshare /mnt/shared
'.
Nota tambahan untuk FreeBSD (UEFI):
spice-vdagent
untuk fungsi menyalin dan menampal dari Hos > Tetamu > Hos (clipboard
) sepertinya tidak available untuk FreeBSD. Compiling from source has also failed.- Saya gunakan File System
ZFS
(single stripe device) untuk VM ini. - Ada konfigurasi tambahan yang mesti dilakukan untuk masuk ke dalam
Xorg
. Sila rujuk Tutorial: FreeBSD 12 on KVM + UEFI (OVMF) = Working Xorg ini.Selepas memasang pakej
xorg
dan juga window manager atau desktop environment pilihan hati, mulakan dengan konfigurasiXorg
sebagai root.Xorg -configure
Ambil perhatian kepada output yang memaparkan ralat di bahagian bawah sekali. Jika tiada sebarang konfigurasi lanjut dibuat, log masuk ke
Xorg
akan gagal.X.Org X Server 1.20.14 X Protocol Version 11, Revision 0 Build Operating System: FreeBSD 13.0-RELEASE-p11 amd64 Current Operating System: FreeBSD freebsdvm 13.1-RELEASE FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC amd64 Build Date: 07 June 2022 01:52:09AM Current version of pixman: 0.40.0 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Sat Jun 18 23:32:06 2022 List of video drivers: scfb modesetting vesa scfb trace: probe start (++) Using config file: "/root/xorg.conf.new" (==) Using system config directory "/usr/local/share/X11/xorg.conf.d" Xorg detected your mouse at device /dev/sysmouse. Please check your config if the mouse is still not operational, as by default Xorg tries to autodetect the protocol. Your xorg.conf file is /root/xorg.conf.new To test the server, run 'X -config /root/xorg.conf.new' (EE) Server terminated with error (2). Closing log file.
Langkahnya adalah dengan menyalin dan menampal
xorg.conf.new
ke dalam direktori/usr/local/etc/X11
dan namakan semula fail sebagaixorg.conf
.cp xorg.conf.new /usr/local/etc/X11/xorg.conf
Buka fail yang telah disalin ke direktori yang berkenaan itu dengan editor yang disukai, serta gantikan baris
Driver "modesetting"
di bawahSection "Device"
kepadaDriver "scfb"
.Section "Device" ... Identifier "Card0" #Driver "modesetting" Driver "scfb" BusID "PCI:0:1:0" EndSection
Setelah itu, bolehlah cuba log masuk ke dalam pengurus tetingkap / Desktop Environment yang dipasang.
Nota tambahan untuk Windows 11:
Ada beberapa perkara yang perlu dilakukan untuk memasang VM Windows 11
. Hal ini adalah diakibatkan oleh cip komputer (microcontroller) yang dilekatkan kepada motherboard di dalam kebanyakan peranti moden sekarang ini yang dinamakan sebagai Trusted Platform Module (TPM).
Perlu pasang pakej swtpm
terlebih dahulu sama ada dari git
stefanberger / swtpm atau dari distribusi masing-masing. Arch Linux
ada menyediakan pakej ini dalam repositori community.
Perintah baris untuk SWTPM:
swtpm socket --tpmstate dir=$HOME/tmp/mytpm \
--ctrl type=unixio,path=$HOME/tmp/mytpm/swtpm-sock \
--log level=20 --tpm2
Di terminal baru, gunakan perintah baris QEMU sebagaimana di atas untuk pemasangan.
Tanpa sebarang intervensi, ralat di bawah ini pasti akan keluar:-
Ralat ini boleh diselesaikan dengan command regedit
. Caranya adalah seperti berikut, terima kasih kepada ProgrammingKnowledge2
yang menyediakan tutorial-nya di Fix: This PC can’t run Windows 11 error | How to Fix Cannot Install Windows 11 on VirtualBox.
Jalankan semula QEMU
dan apabila sampai di bahagian ini, tekan kekunci ‘Shift + F10
’.
Kemudian, masukkan perintah regedit
.
Bahagian ini akan dipaparkan,
Pergi ke ‘Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup
’. Kemudian, right-click di Setup, dan tambah kunci baru; (New > Key)
. Masukkan nama kunci LabConfig
.
Setelah itu, right-click dekat LabConfig
, pilih DWORD (32-bit) Value
, masukkan nama BypassTPMCheck
.
Right-click pula BypassTPMCheck
itu, dan modify dengan menggantikan nilai ‘0’ kepada ‘1’.
Tambah lagi DWORD (32-bit) Value
dengan memasukkan nama BypassSecureBootCheck
serta modify nilai data kepada ‘1’ seperti di atas.
Tiada lagi ralat yang menyatakan bahawa PC tidak dapat menjalankan Windows 11 kerana tidak menepati syarat/keperluan minimum.
QEMU NVMe Ctrl
.- Kalau perasan, saya tetapkan soket
swtpm
untuk dilangsungkan ke dalam$HOME/tmp
kerana saya malas nak buat direktori baru i.e.mytpm
sebagai root. Pilihan masing-masing. Boleh langsungkan soket ini ke direktori/tmp
sekiranya itu yang dimahukan. - Jika mengalami kesulitan untuk mendapatkan Internet connection, boleh gunakan opsyen
-nic
denganmodel=rtl8139
selain daripada modelvirtio-net-pci
:--nic user,ipv6=off,model=rtl8139,mac=84:1b:77:c9:03:a6,id=nic0,smb=$HOME/path_to_shared-folder \
Semak model yang available di Terminal:
$ qemu-system-x86_64 -nic model=help Supported NIC models: e1000 e1000-82544gc e1000-82545em e1000e i82550 i82551 i82557a i82557b i82557c i82558a i82558b i82559a i82559b i82559c i82559er i82562 i82801 ne2k_pci pcnet rtl8139 tulip virtio-net-pci virtio-net-pci-non-transitional virtio-net-pci-transitional vmxnet3
- Lihat maklumat mengenai jumlah
Cores
diTask Manager > Performance > CPU
.Virtual processors
itu adalah merujuk kepada bilanganCores
yang telah diberikan kepada sistem tetamu ini iaitu 4. Jikalau Windows 11 ini ialah sebuah sistem pengoperasian sebenar di dalam peranti, maka bahagian ini akan memaparkan maklumat CPU dengan perincianCores
manakalaLogical processors
pula ialah jumlahThreads
. - Menurut
ArchWiki
, ada pelbagai cara bagi mendapatkan paparan grafik yang tinggi kualitinya atau hampir sama dengan persembahan sistem sebenar.
Untuk distribusiLinux
, GPUvirtio
sudah agak matang namun bagiWindows
pula, terlalu sedikit maklumat diperolehi yang melibatkan GPU ini.
Katanya, kaedah paling popular sekarang ialah kaedahPCI GPU Passthrough
jika ingin mendapatkan persembahan yang hampir sama dengan sistem sebenar. Walaubagaimanapun, tak kuasalah saya hendak mencuba kaedah ini semata sebabnya renyah bebenar caranya dan juga tak ada keperluan bagi saya. Saya tidak bermain games mahupun mempunyai kerja yang melibatkan sebarang penggunaan aplikasi3D
dari VM.
Jadinya saya tunjukkan imej perbezaan paparan antara kad grafikqxl
danvirtio
sajalah untukVM Windows 11
ini.
Kedua-duanya menunjukkan paparan skrin denganResolusi 1920x1080
danskrin berskala 125%
(Kena besarkan sikitlah bagi terang gitu pemandangannya).Paparan skrin penuh VM:Paparan skrin TIDAK penuh VM:Paparan skrin penuh VM:Paparan skrin TIDAK penuh VM:Kesimpulannya:
Hurm… Macam hampir kelihatan sama saja paparan skrinnya apabila dalam mod penuh. Namun di luar skrin penuh, kad grafik
VirtIO
tidak mampu melaras skrin secara automatik berbanding kad grafikQXL
. JadiQXL
ialah pemenang di sini.