前言
Ubuntu 是全球廣泛使用的 Linux 發行版之一。不論是個人用戶還是企業環境,都深受喜愛,也被大量應用於伺服器建置與開發環境。如果你想在 Ubuntu 上實現真正的虛擬化,「KVM(Kernel-based Virtual Machine)」會是非常強大的選擇。
KVM 是一種整合在 Linux 核心中的 Hypervisor 型虛擬化技術,能利用硬體虛擬化支援(如 Intel VT、AMD-V),帶來高效能和穩定性。KVM 完全開源,讓你可以低成本建構專業的虛擬化平台,是其最大特色。
提到虛擬化技術,許多人可能會覺得很複雜。但其實只要結合 Ubuntu 與 KVM,即使是初學者也能輕鬆建立與管理虛擬機。當然,如果你是希望有效活用現有物理伺服器資源的中高階用戶,或想將實際業務系統虛擬化的現場工程師,也非常推薦使用 KVM。
本文將詳細介紹如何在 Ubuntu 上建構 KVM 虛擬化環境,包含基本操作、實戰技巧及常見問題排解。「打算導入 KVM」、「想讓 Ubuntu 虛擬化環境更加好用」的朋友,請務必看到最後!
KVM 與其他虛擬化技術比較
虛擬化技術有許多種,在 Ubuntu 環境中常用的除了 KVM,還有 VirtualBox 和 VMware。這裡會詳解它們各自的特點、差異,以及選擇 KVM 的優缺點。
主要虛擬化技術類型
- KVM(Kernel-based Virtual Machine)
KVM 是直接整合在 Linux 核心中的虛擬化功能,前提是主機作業系統必須是 Linux。它能活用硬體虛擬化支援(如 Intel VT、AMD-V),讓虛擬機效能優異,足以勝任實際業務環境。可透過指令操作或管理工具(如 virt-manager)彈性管理。 - VirtualBox
VirtualBox 是 Oracle 公司推出的桌面虛擬化軟體,支援 Windows、Mac、Linux 等多平台。介面簡單易懂,非常適合個人或學習用途。不過,相較於 KVM,較不適合商用環境或高負載情境。 - VMware(VMware Workstation/ESXi 等)
VMware 是商業用途常用的虛擬化產品,功能強大、支援完善,但須購買授權。大型企業常見,但成本相對較高。
KVM 的優點
- 高效能與穩定性
KVM 作為 Linux 核心一部分,資源分配效率高,能細緻調控每台虛擬機的 CPU 與記憶體分配,穩定可靠,適合正式環境。 - 完全開源、無授權費
KVM 完全開源,無需支付授權費。非常適合想低成本打造虛擬化基礎架構的用戶。 - 多樣化管理工具與自動化支援
可用指令工具(如 virsh、virt-install)或 GUI 管理(如 virt-manager),易於自動化腳本整合,適合 DevOps 與基礎設施管理。
KVM 的缺點
- 僅限 Linux 主機使用
KVM 必須運行於 Linux 核心上,無法在 Windows 或 Mac 主機上直接使用。 - 需要一定 Linux 知識
雖然有 GUI 工具,但網路設定或細部調整仍需一定 Linux 指令與專業知識。
什麼情況下適合選用 KVM?
- 想高效活用實體伺服器資源
- 需在正式業務或伺服器用途採用虛擬化
- 想用低成本打造專業虛擬化平台
- 有自動化 Linux 伺服器與基礎架構管理需求
KVM 是熟悉 Linux 的用戶與工程師的首選,也是想挑戰專業伺服器運維的新手不可錯過的虛擬化技術。
在 Ubuntu 建立 KVM 環境【安裝與初始設定】
要在 Ubuntu 上運用 KVM,需先確認硬體條件、進行一些準備與實際安裝作業。本章將按步驟說明導入流程,幫助初學者也能順利建構環境。
必要條件與事前檢查
使用 KVM 前,需確認電腦或伺服器 CPU 是否支援「虛擬化技術」(Intel VT 或 AMD-V)。
先用下列指令檢查虛擬化功能是否啟用:
egrep -c '(vmx|svm)' /proc/cpuinfo
若顯示數值大於 1,即可使用虛擬化。
同時也需使用 64 位元 Ubuntu。
安裝 KVM 及必要套件
請依序執行下列指令,安裝 KVM 本體及相關管理工具(如 libvirt、virt-manager):
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
qemu-kvm
:KVM 虛擬化本體libvirt-daemon-system
,libvirt-clients
:虛擬機管理服務bridge-utils
:網路橋接工具virt-manager
:可用 GUI 管理虛擬機
使用者群組設定與權限授予
安裝後,請將目前用戶加入 KVM 及 libvirt 群組,這樣可無需管理員權限操作虛擬機。
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)
需登出並重新登入或重開機,讓設定生效。
KVM 服務啟動確認
確認 KVM 安裝正確、服務是否運作中。
sudo systemctl status libvirtd
顯示「active (running)」即為正常。
也可用下列指令確認 KVM 是否有效:
virsh list --all
若能看到(目前應為空)虛擬機清單,表示 KVM 環境已正確建置。
虛擬機的建立與基本操作
KVM 環境準備好後,就可以實際建立虛擬機並進行操作了。KVM 支援圖形管理工具(virt-manager)和命令列操作(virt-install、virsh),可根據需求選擇。這裡會分別介紹兩種方式。
使用 virt-manager(GUI)建立虛擬機
virt-manager 是一款直觀的 GUI 工具,可用於建立與管理虛擬機。如果你使用 Linux 桌面環境,推薦利用 virt-manager 來操作。
- 從「應用程式」選單或命令列啟動
virt-manager
。 - 點擊左上角的「新增」按鈕。
- 指定安裝媒體(如 ISO 映像),選擇來賓作業系統類型(例如:Ubuntu、Windows)。
- 設定要分配給虛擬機的 CPU 數量、記憶體和磁碟容量等資源。
- 確認設定後點擊「完成」,虛擬機就會建立並顯示安裝畫面。
使用 virt-manager,也可以輕鬆進行虛擬機的啟動、關機、重啟、快照、網路與磁碟新增等操作。
使用 virt-install(CLI)建立虛擬機
若用於伺服器或遠端環境,透過命令列建立虛擬機會更方便。以下是 virt-install
指令的基本用法範例:
sudo virt-install
--name ubuntu-vm
--memory 2048
--vcpus 2
--disk size=20
--cdrom /path/to/ubuntu.iso
--os-type linux
--os-variant ubuntu20.04
--network network=default
--graphics vnc
--name
:虛擬機名稱--memory
:分配記憶體(MB)--vcpus
:分配 CPU 核心數--disk size=20
:虛擬磁碟大小(GB)--cdrom
:指定安裝用 ISO 映像路徑--os-type
,--os-variant
:作業系統類型與版本--network
:網路連線方式--graphics
:顯示方式(如 VNC)
執行命令後,虛擬機會自動啟動,並可透過 VNC 連線進行安裝作業。
虛擬機的啟動、關機、刪除、快照
KVM 虛擬機的日常操作也很簡單,常用指令如下:
- 啟動虛擬機
virsh start <虛擬機名稱>
- 關閉虛擬機
virsh shutdown <虛擬機名稱>
- 強制關閉虛擬機
virsh destroy <虛擬機名稱>
- 刪除虛擬機(如需同時刪除磁碟,請留意)
virsh undefine <虛擬機名稱>
- 建立快照
virsh snapshot-create-as <虛擬機名稱> <快照名稱>
這些操作也可以透過 virt-manager 的 GUI 進行。
網路設定與擴充
在 KVM 運行虛擬機時,網路設定十分重要。預設設定可滿足多數需求,但在業務或正式伺服器環境下,常需進行客製化。本章將說明 KVM 網路基本知識及常用進階設定。
預設 NAT(virbr0)與橋接網路差異
安裝 KVM 後,會自動建立「virbr0」這個虛擬橋接網路,採 NAT(Network Address Translation)方式,其特點如下:
- virbr0(NAT 方式)特點
- 虛擬機可存取外部網際網路
- 但若要從主機或其他網路直接連接虛擬機,須設定 port forwarding 等
- 適用於家用、開發或測試環境
相對地,「橋接網路」讓虛擬機直接加入與主機相同的實體網段。
- 橋接網路特點
- 虛擬機可與主機在同一網路上互通
- 也能從其他實體電腦或伺服器直接存取虛擬機
- 適合內部伺服器或對外公開服務等正式運用
建立自訂橋接網路(LAN 連線用)步驟
若需讓本機外的其他設備可直接連入虛擬機,需建立橋接網路。以下為常見設定步驟(假設主機網卡為 eth0
):
- 安裝 bridge-utils(如已安裝可略過)
sudo apt install bridge-utils
- 編輯網路設定檔
Ubuntu 18.04 之後預設用 Netplan,請編輯/etc/netplan/01-netcfg.yaml
等設定檔。例如:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
bridges:
br0:
interfaces: [eth0]
dhcp4: yes
- 套用設定
sudo netplan apply
- 在 KVM 設定虛擬網卡為新橋接(br0)
在 virt-manager 或 virsh 內,將虛擬機的網卡切換至 br0。
虛擬機 IP 固定與 Port Forward 設定
- 固定 IP 位址
可於虛擬機作業系統內設靜態 IP,或在 DHCP 伺服器上依 MAC 位址設定保留。 - NAT 時的 Port Forward 設定
可用 virsh 指令或 libvirt XML 設定,將特定 port(如 SSH、Web)由主機轉發至虛擬機。範例(SSH 22 port 轉發):
virsh nat-forward --network default --add-port tcp:2222:22
※進階設定可編輯 libvirt 設定檔或配合 firewalld 控制。
儲存管理與磁碟操作
在 KVM 虛擬機運作時,儲存設計與磁碟管理也相當重要。本章說明虛擬磁碟的類型、建立方法、儲存池管理,以及磁碟擴充與快照的活用方式。
虛擬磁碟(qcow2、raw)類型與用途
KVM 虛擬磁碟主要有兩種格式:
- qcow2 格式
- KVM 標準虛擬磁碟格式
- 支援快照、壓縮、省空間功能
- 適合彈性運用及測試環境
- raw 格式
- 無額外轉換或壓縮的純磁碟映像檔
- 適合重視效能或追求最大化 I/O 效率的情境
一般推薦使用 qcow2 格式,但可依需求選擇。
儲存池建立與管理
KVM 透過「儲存池」管理虛擬機所用磁碟空間。
- 預設儲存池
安裝後預設路徑為/var/lib/libvirt/images/
,虛擬磁碟會建立在此目錄下。 - 新建儲存池(範例)
- 建立資料夾
sudo mkdir /data/kvm-images sudo chown libvirt-qemu:kvm /data/kvm-images
- 用 virt-manager 或 virsh 新增儲存池。virsh 範例:
virsh pool-define-as --name mypool --type dir --target /data/kvm-images
virsh pool-autostart mypool
virsh pool-start mypool
虛擬磁碟擴充與快照活用
- 虛擬磁碟擴充
需要增加磁碟空間時,可用qemu-img
指令擴充(支援 qcow2、raw 格式):
sudo qemu-img resize /var/lib/libvirt/images/ubuntu-vm.qcow2 +10G
之後須於虛擬機 OS 內擴展分割區或檔案系統。
- 快照活用
qcow2 格式支援快照,可儲存任意時點的狀態。
virsh snapshot-create-as <虛擬機名稱> <快照名稱>
快照對於設定調整、系統升級前備份、測試環境回滾等情境特別實用。
安裝與管理來賓作業系統
以下介紹在 KVM 虛擬機安裝作業系統的要點,包括常見 OS 安裝步驟、ISO 映像檔用法及運作時的效能提升技巧。
常見來賓作業系統安裝步驟
KVM 支援 Ubuntu、CentOS、Windows 等多種 OS,這裡以 Ubuntu 與 Windows 為例:
- Ubuntu 安裝步驟
- 從 Ubuntu 官方網站下載最新版 ISO 映像。
- 使用 virt-manager,選擇「新增虛擬機」與「本地安裝媒體」,指定下載的 ISO。
- 設定虛擬機 CPU、記憶體與磁碟空間後,開始安裝。
- 依畫面指示完成 Ubuntu 的安裝流程。
- Windows 安裝步驟
- 從 Microsoft 官方下載 Windows 評價版或 ISO。
- 用 virt-manager 或 virt-install 建立新虛擬機並選擇該 ISO。
- 安裝 Windows 時建議加載「virtio 驅動程式」,能提升磁碟及網路效能。可將 virtio ISO 掛載為第二張光碟,在安裝過程套用。
ISO 映像取得與掛載
- 安裝作業系統時建議使用從官方下載的 ISO 映像。
- 建立虛擬機時直接指定 ISO 路徑,即可作為虛擬光碟掛載。
- 若需,也能同時掛載多個 ISO(如 OS 與驅動程式)。
來賓 OS 運作技巧與效能優化
- 最佳化資源分配
分配給虛擬機的 CPU、記憶體應適量。分配過多會影響主機或其他虛擬機效能。 - 安裝 virtio 驅動程式
Windows 或舊版 Linux 建議安裝 virtio driver,可大幅提升磁碟與網路速度。 - 停用不必要服務
於虛擬機上停用未使用的服務,善用資源。 - 活用 KVM 客戶端工具
安裝 QEMU Guest Agent,可精確取得虛擬機資訊並輔助管理。
實戰應用範例與自動化小技巧
KVM 不只是建立與管理虛擬機,更可廣泛應用於各種業務與開發情境。結合腳本或自動化工具,可大幅提升管理效率。本章將介紹 KVM 的實戰應用案例與自動化建議。
伺服器用途的應用案例
- 開發與測試環境分隔
可針對不同專案分別建立虛擬機,靈活切換軟體版本與環境設定。測試新 OS 或軟體時,也不影響正式環境,是最大優勢之一。 - 內部服務建置
如檔案伺服器、Web 伺服器、資料庫等服務可分開在不同虛擬機執行,降低障礙風險與維護成本。
同時,透過虛擬機的快照與備份,也能輕鬆復原或複製服務。
透過 CLI 或 Ansible 進行自動化建置
- 指令自動建立多台虛擬機
可用腳本配合virt-install
或virsh
自動批次建立多台虛擬機。例如 shell script 批次建立:
for i in {1..5}
do
virt-install --name test-vm-$i --memory 1024 --vcpus 1
--disk size=10 --cdrom /path/to/ubuntu.iso
--os-type linux --os-variant ubuntu20.04 --graphics none --network network=default --noautoconsole
done
- 用 Ansible 管理自動化建置
利用自動化工具 Ansible,只需撰寫 Playbook,即可批次建立 KVM 虛擬機、設定系統、安裝應用程式等。
適用於需管理大量伺服器或追求配置一致性的情境。
雲端化管理的實用技巧
- 虛擬機模板化
可將常用的初始狀態虛擬機保存為模板,快速部署新伺服器,節省時間。 - API 與 Web 管理工具整合
libvirt 提供 API,可與其他管理系統整合,亦可利用 Web 管理工具(如 Cockpit),視覺化管理大規模虛擬化環境。
疑難排解與常見錯誤對策
在 KVM 環境運作時,常見問題包括虛擬機啟動失敗、網路無法連線等。本章介紹常見問題類型、解決方法,以及如何查閱日誌與善用社群資源。

KVM 常見問題類型
- 虛擬機無法啟動/無法建立
- 硬體虛擬化功能(Intel VT、AMD-V)未啟用
- 記憶體或磁碟空間分配不足
- 儲存池或 ISO 路徑錯誤
- 網路連線異常
- 虛擬網卡設定錯誤
- 橋接/NAT 設定失誤、DHCP 配置不當
- 防火牆或安全設定影響
- 效能過低
- 資源分配不當
- 未安裝 Virtio 驅動(特別是 Windows 來賓)
- 磁碟 I/O 瓶頸
日誌查閱與基本解決流程
遇到問題時,首先要查閱日誌記錄:
- 系統日誌查詢
sudo journalctl -xe
檢查有無 KVM 或 libvirt 相關錯誤訊息。
- libvirt 專用日誌
可查看/var/log/libvirt/
目錄下的日誌(如 libvirtd.log)。 - 單一虛擬機日誌
用 virt-manager 或 virsh 查看虛擬機狀態,於「詳細資訊」或「日誌」頁籤查錯。 - 網路狀態查詢
ip a
brctl show
virsh net-list --all
這些可用來檢查網卡、橋接等網路設定。
疑難排解基本流程
- 釐清問題發生時機、狀況
- 查閱上述日誌與設定檔
- 根據情況調整設定、重啟服務或重建虛擬機測試
官方文件與社群資源活用
遇到無法解決的問題時,可利用以下資源:
- 官方說明文件
Ubuntu 官方 KVM 文件
libvirt 官方文件 - 社群論壇、Q&A 平台
- Ubuntu 論壇
- Ask Ubuntu
- Stack Overflow
- 利用錯誤訊息搜尋
將錯誤訊息以中文、英文查詢 Google,多數情境都能找到案例。
安全性與效能最佳化
為了讓 KVM 環境穩定且安全地運作,安全措施與效能優化是不可忽視的重點。本章介紹虛擬化基礎架構的防護要點,以及實用的資源最佳化技巧。
強化虛擬化環境的安全措施
- 關閉不必要服務,維持最小化設定
虛擬機內未使用的服務建議停用,以減少潛在攻擊面。同理,主機 OS 也應關閉不必要的服務。 - 嚴格設定防火牆與存取權限
主機與虛擬機皆應妥善設置防火牆(如 ufw、firewalld),避免未授權連線。
SSH 建議更換預設 port、啟用公開金鑰認證、可搭配 fail2ban 增強防護。 - 虛擬機隔離(網路區段分離)
將重要伺服器分開不同虛擬網路,或於實體層面分離網路,可防止單一資安事件波及全體。 - 定期執行更新
主機與虛擬機的安全修補及軟體更新要隨時保持最新。
資源分配最佳化(CPU/記憶體/磁碟 I/O)
- 基本資源管理
根據每台虛擬機需求分配 CPU、記憶體,主機端保留足夠資源,以維持全體穩定。
過度分配會導致主機和其他虛擬機效能下降。 - 磁碟 I/O 優化
儲存裝置常成為效能瓶頸,建議為重點虛擬機分配 SSD 等高速存儲。
qcow2 格式若頻繁使用快照,會影響效能,請留意運用平衡。 - 善用 virtio 驅動
安裝 virtio driver 可顯著提升虛擬機的磁碟與網路效能。
備份與快照自動化
- 定期建立快照
正式運作的虛擬機建議定期建立快照,以便發生問題時能快速回復。 - 備份虛擬磁碟與設定檔
定期將 qcow2/raw 虛擬磁碟映像及 libvirt XML 設定檔備份至其他儲存空間或外部伺服器。 - 結合自動化工具
可用 cron 或 Ansible 等自動化工具定時備份或快照,減少人工作業。
總結與進階學習資源
本文從 Ubuntu 上的 KVM 虛擬化環境建置、操作到實戰應用、疑難排解,並補充了安全與效能優化的重點。最後將簡單回顧並推薦進一步學習資源。
重點整理
- KVM 概要與優勢
KVM 是開源且高效能的虛擬化技術,於 Ubuntu 伺服器等多種場合皆適用。 - 從安裝到運用的完整流程
包含 CPU 虛擬化功能檢查、套件安裝、用戶權限設定,以及虛擬機建立與操作,皆有詳盡步驟說明。 - 網路、儲存、運用的實戰要點
依需求靈活調整 NAT/橋接網路、管理儲存池與磁碟擴充,充分活用快照功能。 - 疑難排解與資安重點
提供常見錯誤對策、日誌查詢方法,並針對安全與效能提出最佳化建議。
進階學習建議與資源
KVM 基礎扎實的話,從個人到企業用戶都能靈活活用。歡迎根據本文內容,打造最適合自己的 KVM 虛擬化解決方案。
常用指令與設定範例(Cheat Sheet)
管理 KVM 或 libvirt 時,手邊有常用指令與範例設定會很方便。本章精選日常管理常用的虛擬機、網路、磁碟等指令供參考。
KVM/virsh/virt-manager 主要指令彙整
- 列出所有虛擬機
virsh list --all
- 啟動虛擬機
virsh start <虛擬機名稱>
- 關閉虛擬機
virsh shutdown <虛擬機名稱>
- 強制關機
virsh destroy <虛擬機名稱>
- 建立虛擬機(virt-install)
virt-install --name <名稱> --memory <MB> --vcpus <數量>
--disk size=<GB> --cdrom <ISO 路徑>
--os-type linux --os-variant ubuntu20.04
- 刪除虛擬機(僅移除設定)
virsh undefine <虛擬機名稱>
網路/橋接相關設定範例
- 查看現有網路
virsh net-list --all
- 新增網路(XML 範例)
/etc/libvirt/qemu/networks/
目錄下放置 XML 檔,virsh net-define <檔案名>
、virsh net-start <網路名>
啟用
儲存管理/磁碟操作範例
- 列出所有儲存池
virsh pool-list --all
- 擴充虛擬磁碟容量
sudo qemu-img resize /path/to/disk.qcow2 +10G
- 建立快照
virsh snapshot-create-as <虛擬機名稱> <快照名稱>
其他常用 Tips
- 設定虛擬機自動開機
virsh autostart <虛擬機名稱>
- 查詢虛擬機詳細資訊
virsh dominfo <虛擬機名稱>
- 啟動 virt-manager(圖形介面)
virt-manager
FAQ(常見問題)
關於 KVM 與 Ubuntu 虛擬化環境的建置與管理,這裡彙整讀者常見問題與解答,供您查詢與排除疑難。
Q1: KVM 與 VirtualBox、VMware 有何不同?
A1: KVM 是直接整合於 Linux 核心的高效能虛擬化平台,適合伺服器或正式運用。VirtualBox 偏向桌面用途,VMware 則為商用、企業級解決方案,功能最完整但需付費。KVM 適合想低成本獲得高效能的用戶。
Q2: 如何備份與還原虛擬機?
A2: 只要複製虛擬磁碟映像檔(qcow2、raw),即可輕鬆備份。建議同時備份 virsh 快照與虛擬機 XML 設定檔,還原時更為便利。
Q3: 虛擬機如何使用 USB 裝置?
A3: 可利用 virt-manager 的「新增硬體」功能,或用 virsh 設定 USB passthrough,讓 USB 隨身碟、外接硬碟、印表機等在虛擬機內被辨識。
Q4: 如何讓虛擬機隨主機開機自動啟動?
A4: 執行 virsh autostart <虛擬機名稱>
指令即可,之後主機開機時該虛擬機會自動啟動。
Q5: 虛擬機運作緩慢怎麼辦?
A5: 檢查 CPU、記憶體分配是否合理,磁碟 I/O 是否瓶頸(可考慮用 SSD 或轉成 raw 格式),以及來賓系統是否已安裝 virtio driver,這些都會顯著影響效能。
Q6: 網路設定失敗怎麼處理?
A6: 先用 virsh 或 brctl 查詢目前網路狀態,必要時重新建立虛擬網路,或檢查 Netplan、NetworkManager 設定檔。
Q7: KVM 能做叢集(HA)高可用性架構嗎?
A7: 可以。結合 Pacemaker、Corosync 與共用儲存(NFS、iSCSI 等),能實現虛擬機高可用性(HA)架構與 live migration(即時遷移)。但需要更進階的專業知識。