PVE 虛擬機管理:從設定到效能調校
建好第一台 VM 之後,你可能會覺得它跑起來「好像有點慢」。那是因為 PVE 的預設設定偏保守,就像買了一台新車卻一直用 Eco 模式在開——能動,但完全沒發揮實力。這篇教你怎麼把 VM 調到最佳狀態。
CPU 設定:不只是「給幾核」
| 設定 | 建議值 | 說明 |
|---|---|---|
| Type | host |
直通主機 CPU 指令集,效能最好 |
| Cores | 依需求 | 別給超過實體核心數(超賣可以,但慢) |
| CPU Units | 1024(預設) | 競爭資源時的優先權重 |
| NUMA | 多 socket 才需開 | 模擬 NUMA 拓撲 |
CPU Type 選 host 和選預設的 kvm64 差多少?StorageReview 的測試顯示,光是換 CPU type 就能讓效能從裸機的 61% 跳到 85%。這是免費的效能,不拿白不拿。
# 改 CPU 類型為 host(VM 需要先關機)
qm set 100 --cpu host
# 設定 2 核心
qm set 100 --cores 2如果你打算做 Live Migration(把 VM 搬到另一台 PVE 主機),CPU Type 選
host會有相容性問題——兩台主機的 CPU 必須一樣。要遷移的 VM 建議選x86-64-v2-AES之類的通用類型。想了解叢集遷移的細節可以看叢集與高可用篇。
記憶體:Ballooning 的藝術
PVE 支援 Memory Ballooning——動態記憶體管理。你設一個最大值和最小值,VM 不需要那麼多記憶體的時候會自動歸還,需要的時候再拿回去。
聽起來很聰明,但實際上有時候會造成效能波動。我的建議是:
- 效能敏感的 VM:關掉 Ballooning,給固定記憶體
- 一般用途的 VM:開 Ballooning,省記憶體給其他 VM 用
# 固定 4GB 記憶體(關閉 Ballooning)
qm set 100 --memory 4096 --balloon 0
# 動態記憶體:最小 1GB,最大 4GB
qm set 100 --memory 4096 --balloon 1024磁碟:VirtIO 是唯一正解
| 介面類型 | 效能 | 相容性 | 建議場景 |
|---|---|---|---|
| VirtIO-SCSI | 最好 | Linux 原生支援 | 所有 Linux VM |
| VirtIO-Block | 很好 | Linux 原生支援 | 簡單場景 |
| SATA | 一般 | 萬用 | Windows 安裝時暫用 |
| IDE | 最慢 | 最廣 | 除非你在跑 DOS |
再加上一個容易忽略的設定:IO Thread。開了之後磁碟 I/O 有獨立的執行緒處理,不會卡住 VM 的主 CPU。
# 啟用 IO Thread(需要先用 VirtIO-SCSI 控制器)
qm set 100 --scsihw virtio-scsi-single
qm set 100 --scsi0 local-lvm:32,iothread=1,discard=on,ssd=1
discard=on和ssd=1是給 SSD 用的,讓 VM 內部的 TRIM 指令能穿透到實體磁碟。如果你的儲存後端是 HDD,這兩個不用開。更多儲存後端的選擇請看儲存系統指南。
VM 生命週期:從搖籃到墳墓
你會最常用到的指令:
# 啟動
qm start 100
# 優雅關機(送 ACPI 訊號,等 OS 自己關)
qm shutdown 100
# 強制關機(拔電源等級,OS 來不及收尾)
qm stop 100
# 重新啟動
qm reboot 100
# 刪除(VM 必須先停止)
qm destroy 100快照、備份、克隆:你的三道保險
這三個東西經常搞混,但用途完全不同:
| 功能 | 速度 | 用途 | 注意事項 |
|---|---|---|---|
| 快照 Snapshot | 秒級 | 改設定前拍一張,爛了就回滾 | 佔空間,別存太多 |
| 備份 Backup | 分鐘級 | 定期備份到外部儲存 | 搭配 PBS 最好 |
| 完整克隆 Full Clone | 分鐘級 | 獨立副本,互不影響 | 佔完整磁碟空間 |
| 連結克隆 Linked Clone | 秒級 | 共享基礎磁碟,快又省空間 | 需要範本 |
# 拍快照
qm snapshot 100 before-upgrade --description "升級前的保險"
# 回滾快照
qm rollback 100 before-upgrade
# 列出快照
qm listsnapshot 100
# 備份到本地儲存
vzdump 100 --storage local --compress zstd --mode snapshot
# 完整克隆
qm clone 100 101 --name debian-clone --full
# 查看備份清單
ls /var/lib/vz/dump/VM 範本:批量生產的秘密武器
如果你需要重複建立類似的 VM(例如測試環境),每次從 ISO 重新安裝太浪費時間。範本的概念就像做餅乾的模具——做好一個模型,之後壓出來的每一塊都一樣。
製作範本的標準流程:
- 建一台 VM,裝好 OS
- 做好基本設定(更新、裝常用套件)
- 安裝 QEMU Guest Agent
- 清理暫存(
apt clean、刪 bash history) - 轉換成範本
# 在 VM 裡面裝 Guest Agent
apt install -y qemu-guest-agent
systemctl enable qemu-guest-agent
# 清理後關機
apt clean && rm -f ~/.bash_history && poweroff
# 在 PVE 主機上把 VM 轉成範本
qm template 100轉成範本之後,這台 VM 就變成唯讀的了。要用它的時候,右鍵 -> Clone,選 Linked Clone 幾秒鐘就能生出一台新的。
QEMU Guest Agent:裝了就對了
Guest Agent 是裝在 VM 裡面的小程式,讓 PVE 能跟 VM 內部溝通。裝了之後你能:
- 在 Web 介面直接看到 VM 的 IP(不用自己去查)
- 拍快照時自動凍結檔案系統(資料一致性)
- 優雅關機真的能優雅關(不然有時候 VM 裝聾作啞)
# Linux
apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent
# 然後在 PVE 的 VM Options 裡勾選 "QEMU Guest Agent"Windows VM 的話,Guest Agent 隨 VirtIO 驅動 ISO 一起安裝。裝 VirtIO 驅動的時候順便裝 Guest Agent,一箭雙鵰。
效能調校速查
做完以下這些,你的 VM 效能會從「堪用」變成「接近裸機」:
- CPU Type 改
host - 磁碟用 VirtIO-SCSI + IO Thread
- 網卡用 VirtIO
- 安裝 QEMU Guest Agent
- SSD 後端開
discard=on,ssd=1 - 記憶體充足的話關掉 Ballooning
這六步不用花錢,不用加硬體,純軟體設定就能讓效能提升 30% 以上。
常見問題
Q: PVE 的 VM 效能跟裸機差多少?
經過正確調校(CPU Type 設 host、磁碟用 VirtIO-SCSI + IO Thread、安裝 Guest Agent),VM 效能可達裸機的 85-95%。預設設定通常只有 60% 左右,所以調校非常重要。
Q: VM 快照和備份有什麼差別?
快照是秒級的即時狀態保存,適合改設定前拍一張當保險;備份是把整台 VM 匯出到外部儲存,適合災難復原。快照不能取代備份,建議兩者搭配使用。
Q: QEMU Guest Agent 一定要裝嗎?
強烈建議裝。沒裝的話 PVE 看不到 VM 的 IP、快照時檔案系統不會凍結(可能資料不一致)、優雅關機也可能失敗。裝了只有好處,沒有副作用。
Q: VM 範本是什麼?什麼時候該用?
範本是唯讀的 VM 基底映像,當你需要重複建立類似配置的 VM 時特別好用。做好一個範本後,用 Linked Clone 幾秒就能生出新 VM,不用每次都從 ISO 重新安裝。
下一步
VM 搞懂了,但有些服務其實不需要一整台虛擬機——太重了。下一篇來聊 LXC 容器,比 VM 更輕、更快、更省資源: -> LXC 容器入門