學會用QEMU/KVM虛擬機後,電腦再也沒有裝第二個系統

Ivon Huang
·
(edited)
·
IPFS
·

雙重開機,這恐怕是剛接觸Linux的用戶都會使用的保險手段吧,明明想把Linux當daily-driver,卻還是研究怎麼雙重開機,不論是出於要使用工作軟體,或是單純想玩遊戲的目的,而不得不保留Windows在硬碟上作為應急手段。或是把Linux當作學習開發用途而已,變成Windows才是主要的生活。

然而,這樣的使用方式已經遠去一年多了,現在的工作環境全都只有Linux,筆電還是個人電腦皆然。雙系統,ない!就算有也只是distro-hopping(切換)到另一套Linux發行版而已。

想也知道會有不得不使用其他系統軟體的時候,不論是學校功課,還是某款程式怎麼也無法用Wine跑,甚或是想嘗試編譯iOS的軟體,這個時候就會想到用虛擬機解決吧。虛擬機的軟體很有名的,就是Orcale VirtualBox和VMware了,他們易於使用,教學又多,還跨平台。

但是呢瑞凡,你知道市面上好用的虛擬機軟體除了Virtulabox和Vmware外,還有QEMU/KVM這個高效率的虛擬機軟體嗎?

QEMU/KVM同樣跨平台,特別適用於Linux,可以在Linux電腦執行Windows、MacOS、Androd-x86、ChromeOS、樹莓派、FreeBSD、OpenIndiana,可以拿來跑常用軟體和打3D遊戲之用,再也不需要在電腦實機裝第二個系統了。諸如安全問題、隱私侵犯(Windows本身就是間諜軟體)的問題也在虛擬機中得到緩解。

Windows guest
MacOS guest
Android-x86 guest
ChromeOS Flex guest

下面來講解為什麼QEMU/KVM是Linux上最強的虛擬機軟體,它的優點和缺點。

QEMU最早由ffmpeg的作者Fabrice Bellard開發,一般搭配紅帽開發的KVM使用,因而稱為QEMU/KVM,這樣才是完全體。不過這邊行文方便還是簡稱QEMU。

模擬各式各樣的硬體

QEMU跟一般的虛擬機軟體不同之處在於,QEMU比較像模擬器(emulator),而不只是虛擬化(virtualization)而已。QEMU可以模擬CPU型號、硬碟、網路卡、音效卡、TPM,以及諸多機器的架構,從x86到ARM、Sparc、RISC-V皆然。例如QEMU能在x86電腦上模擬ARM裝置這類異質架構,作為學習開發之用。

論執行效率,在Host OS和Guest OS皆為x86架構、主機板開啟CPU虛擬化支援的情況下,QEMU還會配合Linux核心的KVM模組來提升速度,以Windows來說就是虛擬機開啟Hyper-V的效果,但Linux可沒有要花錢解鎖的「系統功能」啊。

圖片來源: https://www.lijyyh.com/2015/12/linux-kvm-set-up-linux-kvm.html

QEMU亦提供Virtio的一系列半虛擬化技術,提升虛擬機的硬碟、圖形、網路卡速度效能。舉例來說,如果Guest OS也是Linux,並且Host OS的GPU支援Virtual GL renderer技術的話,可以直接讓虛擬機達成3D加速,提升圖形效能。目前Intel和AMD皆支援此技術,Nvidia因為驅動程式開源不友好因而支援度很差。

QXL基本顯示卡 vs VirGL的3D加速

還有因為是開放原始碼,QEMU也有提供Windows和MacOS版,並能改為配合該平台的虛擬機加速技術運作,像QEMU就支援Hyper-V和Hypervisor.framework。近年來QEMU甚至有移植到Android和iOS上,但這二個平台沒有成熟的虛擬機加速可用,所以QEMU就只能靠純模擬的方式下去跑,效能十分低落。

Android手機用QEMU跑Windows 7

強大卻不好上手,似是Linux專武

不過QEMU大多是配合Linux使用,Windows和MacOS上比較少人用。因為QEMU就跟Linux系統一樣方便按照需求裁剪,既可以只靠指令啟動,也可以配合圖形化前端方便管理,例如QEMU配上Virtual Manager和Libvirtd的管理服務,讓QEMU變成類似VirtualBox一樣有易上手的前端,並易於在伺服器上管理服務。

也是因為這樣的自由特性,QEMU讓新手不是那麼好上手。QEMU在其他平台即使有了前端管理程式,也要對命令行有點概念,還有利用的系統特性很依賴Linux,因此在其他平台會變的「不好用」、「不直觀」,要像VirtualBox那樣開箱即用的軟體是很難的了。

除了利用Linux核心的KVM以外,QEMU還能配合VFIO核心模組將實機硬體直通(passthrough)到虛擬機器內,例如在Host OS將獨立顯示卡停用(當然前提是CPU有內顯可用,且基本上只有Linux能這樣做),此顯示卡便可讓QEMU掛接到虛擬機器中成為其顯卡。這樣Windows虛擬機就能跑3D應用程式!這樣再配合一些同步視訊音訊的技術,虛擬機就能拿來玩遊戲了。這對不支援VirGL的Guest OS十分有效:直接將顯示卡送給你,總沒有圖形效能的問題了吧。

左邊:Host的3D效能。右邊:直通顯示卡的Guest虛擬機的3D效能

對Linux的桌面有研究的用戶,甚至可以寫個指令稿讓使用者登入桌面後馬上掛接顯示卡並啟動虛擬機(single GPU passthrough),變成好像在使用另一個系統一樣。

可以說QEMU/KVM跟Linux的相性最好,其他平台不是不行用,而是要達到極致效能很麻煩,到頭來對那些系統用戶來說,用VirtualBox或VMware可能會省事些。


熟練使用QEMU之後,我已經一年沒在自己的實體電腦開過Windows了,都被鎖在虛擬機裡面。虛擬機的硬碟就是一個qcow2檔,方便做快照備份。

建立虛擬機不用花太多功夫,是安裝某某系統前用來測試執行效果的最佳選擇。

實務上,不能過度依賴虛擬機,在常用文書、影像處理軟體的workflow都用自由軟體替代,遊戲用Steam Proton解決後,只有很少數的情況下才會刻意去開Windows虛擬機完成作業。

CC BY-NC-ND 2.0

Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!

Ivon Huang自由軟體、航空、20世紀歷史愛好者。 這裡記載的東西究竟會成為未來的碎片,在那最果之處,反射出匯集各處思念的光芒。 My Blog: https://ivonblog.com
  • Author
  • More

將suckless.org極簡網頁設計哲學付諸實現

Linux電腦好用的必裝軟體,從文書處理到玩遊戲一次滿足

半回憶錄形式的2022年Matters回顧問卷