虛擬機 (KVM/QEMU/libvirt) 使用久了,原始分配的磁碟空間常告不足。本文針對三種常見場景提供完整擴容方案:新增虛擬磁碟掛載至目錄(最簡單、無風險)、qemu-img resize + virt-resize 離線擴容根分區(適用非 LVM 系統)、LVM 線上動態擴容(最靈活、無需停機)。涵蓋 virsh 指令、virt-manager 圖形介面、客體內部操作全流程。
/dev/vda (virtio)、根分區 /dev/vda1 (ext4)/var/lib/libvirt/images/test.img圖形介面:virt-manager → 虛擬機詳細資料 → 「新增硬體」 → 「儲存裝置」 → 選擇大小、格式 (raw/qcow2)、總線類型 (virtio/SCSI/SATA/IDE) → 完成。
注意: IDE 總線不支援熱插拔,選 IDE 需關機;virtio/SCSI/SATA 支援熱插拔。
命令列:
# 建立 10G raw 格式磁碟映像
qemu-img create -f raw /var/lib/libvirt/images/test_add.img 10G
# 熱插拔至虛擬機 (vdb, virtio, 無快取)
virsh attach-disk test /var/lib/libvirt/images/test_add.img vdb --cache none --driver qemu --subdriver raw
# 或編輯 XML 永久生效
virsh edit test
# 在 區塊新增:
#
#
#
#
#
# 1. 確認新磁碟 (假設為 /dev/vdb)
fdisk -l
# 2. 格式化為 ext4
mkfs.ext4 /dev/vdb
# 3. 建立掛載點並掛載
mkdir /test
mount /dev/vdb /test
# 4. 取得 UUID 設定開機自動掛載
blkid /dev/vdb
# 輸出範例:/dev/vdb: UUID="19fc1d1d-7891-4e22-99ef-ea3e08a61840" TYPE="ext4"
# 5. 編輯 /etc/fstab 新增:
UUID=19fc1d1d-7891-4e22-99ef-ea3e08a61840 /test ext4 defaults 1 2
優點: 不動原磁碟、無數據遺失風險、可隨時移除。
缺點: 空間分散在不同掛載點,應用需感知路徑。
前提: 宿主機安裝 libguestfs-tools (yum -y install libguestfs-tools)。
# 1. 關閉虛擬機
virsh shutdown test
# 2. 建立新的較大映像檔 (目標總大小 15G)
qemu-img create -f raw /var/lib/libvirt/images/test_extend.img 15G
# 3. 使用 virt-resize 擴容根分區 (/dev/vda1) 並複製數據
virt-resize --expand /dev/vda1 /var/lib/libvirt/images/test.img /var/lib/libvirt/images/test_extend.img
# 此過程會重新分區、格式化、複製檔案,大磁碟耗時較久,請耐心等待
# 4. 以新映像取代舊映像
mv /var/lib/libvirt/images/test_extend.img /var/lib/libvirt/images/test.img
# 5. 啟動虛擬機
virsh start test
優點: 真正擴大根分區、支援 Windows 客體、無需登入客體操作。
缺點: 需停機、大磁碟耗時長、複製過程有極低機率數據損壞(建議先備份)。
前提: 客體安裝時選用 LVM 管理磁碟 (根分區在 /dev/VolGroup/lv_root)。
# 宿主機建立 40G LV
lvcreate -L 40G -n lv_vm_test1 VolGroup
# 熱插拔至虛擬機 (需修改裝置權限讓 qemu 進程可存取)
virsh attach-disk test /dev/mapper/VolGroup/lv_vm_test1 vdb --cache none
# 若權限錯誤:chmod 660 /dev/mapper/VolGroup/lv_vm_test1; chown root:kvm /dev/mapper/VolGroup/lv_vm_test1
# 1. 確認新裝置 /dev/vdb
fdisk -l
# 2. 建立 PV、加入 VG
pvcreate /dev/vdb
vgextend VolGroup /dev/vdb
vgs # 確認 VG 可用空間增加
# 3. 擴展 LV (使用所有剩餘空間)
lvextend -l +100%FREE /dev/VolGroup/lv_root
# 4. 線上調整檔案系統 (ext4/xfs 均支援線上擴容)
resize2fs -p /dev/VolGroup/lv_root
# XFS 使用:xfs_growfs /dev/VolGroup/lv_root
優點: 完全線上、秒級完成、無數據風險、支援繼續擴容。
缺點: 需客體預先使用 LVM、不支援 Windows 客體。
| 場景 | 推薦方案 | 關鍵考量 |
|---|---|---|
| 新手/臨時需求/不想動原系統 | 方案一:新增磁碟掛載 | 最安全、最簡單 |
| 非 LVM Linux 根分區不足、可接受停機 | 方案二:virt-resize | 真正擴大根分區 |
| 生產環境 LVM 系統、要求零停機 | 方案三:LVM 線上擴容 | 最專業、最彈性 |
| Windows 客體 | 方案一 或 方案二 | virt-resize 支援 Windows |
df -h 確認空間已生效。