將 IBM Windows Server 2003 實體機轉換成 Proxmox 虛擬機並縮小磁碟空間

這次紀錄的是一台相當老舊的 IBM 實體主機,系統為 Windows Server 2003。由於硬碟老化與備援需求,我希望把它完整轉換成虛擬機,運行在 Proxmox VE 環境中,並進一步縮小原本 2TB 的系統磁碟,以節省儲存空間。


一、使用 VMware vCenter Converter (XP 可用版本) 進行 P2V

由於這台主機仍在 Windows XP 時代的軟體相容範圍內,我選擇了舊版的 VMware vCenter Converter (P2V Virtual Machine Converter),這是少數仍能在 XP/Server 2003 上執行的版本。

步驟如下:

  1. 在 IBM 主機上安裝 VMware vCenter Converter。
  2. 選擇「Convert Local Machine」。
  3. 目標格式設定為 VMware Workstation / Other VMware Virtual Machine
  4. 輸出 .vmdk 虛擬磁碟到外接硬碟或網路共享資料夾。

這一步結束後,就能得到一組 Windows2003.vmdk.vmx 等檔案。


二、將 vmdk 轉換為 Proxmox 可用的 qcow2

將輸出的 vmdk 檔案複製到 Proxmox 環境,例如:

/mnt/pve/nas2-in/images/602/

使用以下指令轉換為 qcow2:

qemu-img convert -O qcow2 Windows2003.vmdk vm-602-disk-0.qcow2

Proxmox 便能直接掛載這顆虛擬磁碟。


三、啟動測試並確認系統可開機

  1. 建立新的虛擬機,BIOS 設定為 SeaBIOS,顯示卡設為 VGA。
  2. 掛載 vm-602-disk-0.qcow2 為主磁碟。
  3. 啟動後確認能正常進入桌面,檢查 IIS、應用程式與服務運作是否正常。

若遇到「NTLDR is missing」等啟動錯誤,可用 Windows Server 2003 安裝光碟修復開機:

fixboot
fixmbr
bootcfg /rebuild

四、進行系統內部磁碟縮小準備

原始磁碟為 2TB,實際使用空間不到 50GB。
縮小前必須確保檔案系統一致性並釋放未使用區塊。

1. 執行磁碟重組

在 Windows 2003 內執行系統內建的「磁碟重組 (Defragmenter)」,將資料集中於磁碟前段。

2. 使用 SDelete 填零釋放空間

下載 Sysinternals 的 sdelete.exe,執行以下指令:

sdelete -z C:

這會將所有未使用的磁區以零填滿,讓後續壓縮與縮小能更有效。
由於這台主機的虛擬磁碟格式為 IDE 模擬介面,磁碟 I/O 速度極慢,整個過程耗時極長。

在我的情況下,SDelete 執行將近兩週才完成,CPU 與 I/O 幾乎全程滿載。若使用 VirtIO 或 SCSI 介面,時間可望縮短至數小時內。


五、在 Windows 7 環境中進行磁碟縮小

Windows Server 2003 無法原生縮小系統分割區,因此我原本打算使用 ClonezillaGParted Live 進行分割區調整。
然而實際操作時,無論是在 Clonezilla 還是 GParted Live 環境中,系統都會顯示「硬碟毀損」或「檔案系統錯誤」,導致無法執行縮小。

我嘗試重新開回 XP / 2003 系統執行磁碟檢查 (chkdsk /f) 並重新操作,但依然無法通過 GParted 的檢查。
後來推測是 NTFS metadata 結構與 GParted 的 NTFS 驅動版本不完全相容,導致誤判為壞軌。

最終解法是改用 Windows 7 環境的磁碟管理工具 (diskmgmt.msc)
步驟如下:

  1. 關閉 2003 VM,將其 qcow2 掛載為 Win7 VM 的第二顆硬碟。
  2. 在 Win7 內開啟「磁碟管理」。
  3. 對 C: 點選「壓縮磁碟區」,將容量縮至 49GB
  4. 完成後會看到後段變成 未配置 (Unallocated)

這種方式穩定、可直接作用於 NTFS 系統分割區,是整個流程中最有效的一步。


六、在 Proxmox 縮小 qcow2 檔案

  1. 掛載磁碟到 nbd 驗證分割區長度:

    qemu-nbd -r -c /dev/nbd0 vm-602-disk-0.qcow2
    fdisk -l /dev/nbd0

    輸出確認 /dev/nbd0p1 約為 49GB。

  2. 卸載 nbd:

    qemu-nbd -d /dev/nbd0
  3. 執行安全縮減(預留少許緩衝):

    qemu-img resize --shrink vm-602-disk-0.qcow2 52G
  4. 進一步壓縮虛擬磁碟:

    qemu-img convert -O qcow2 vm-602-disk-0.qcow2 vm-602-disk-0-slim.qcow2

轉換後檔案大小從原本 2TB 減至約 30~35GB。


七、替換與測試

  1. 在 Proxmox 網頁介面中 Detach 原本的 qcow2。
  2. 掛上新的 vm-602-disk-0-slim.qcow2
  3. 啟動虛擬機,確認能正常進入桌面並運行應用程式。
  4. 測試無誤後,可刪除舊檔或保留為備份。

八、結果與心得

整個過程中最關鍵的部分包括:

  • 使用 XP 可用版本的 VMware vCenter Converter 成功進行 P2V。
  • 在新版系統中進行分割區壓縮,避開 2003 無法 shrink 的限制。
  • 避免使用 Clonezilla 或 GParted Live 直接操作 NTFS 系統磁碟,否則容易被誤判為壞軌。
  • 使用 sdelete -z 填零未使用空間,配合 qemu-img convert 達成真正的磁碟瘦身。

最終結果:

  • 原始 2TB 的磁碟映像,成功縮減至 52GB 並壓縮成約 35GB。
  • 系統能正常開機、IIS 與內部應用程式皆正常運作。
  • 整個流程最耗時的步驟是 SDelete,在 IDE 虛擬介面下執行近兩週,若能改用 VirtIO,效能將大幅改善。