PVE 虛擬機管理:從設定到效能調校

9 min read

建好第一台 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=onssd=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 重新安裝太浪費時間。範本的概念就像做餅乾的模具——做好一個模型,之後壓出來的每一塊都一樣。

製作範本的標準流程:

  1. 建一台 VM,裝好 OS
  2. 做好基本設定(更新、裝常用套件)
  3. 安裝 QEMU Guest Agent
  4. 清理暫存(apt clean、刪 bash history)
  5. 轉換成範本
# 在 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 效能會從「堪用」變成「接近裸機」:

  1. CPU Type 改 host
  2. 磁碟用 VirtIO-SCSI + IO Thread
  3. 網卡用 VirtIO
  4. 安裝 QEMU Guest Agent
  5. SSD 後端開 discard=on,ssd=1
  6. 記憶體充足的話關掉 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 容器入門