調整虛擬磁盤大小的各種方法
在物理機到虛擬機的轉換過程中,通常需要調整物理硬盤和虛擬磁盤的大小。避免存儲瓶頸比成功遷移更重要,但是Hyper-V磁盤管理工具包中沒有可以調整虛擬磁盤大小的工具。即使沒有這些工具,你依然可以通過PowerShell命令、VHDResizer或其它工具設置虛擬磁盤的大小。
使用PowerShell命令調整VHD大小
微軟的Hyper-V項目經理Ben Armstrong在博客中公布了該方法,似乎可以快速縮小虛擬磁盤空間并緩解管理員壓力。下面是主要的步驟:
打開Microsoft PowerShell:如果沒有安裝Hyper-V PowerShell cmdlets,使用如下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell
加載VHD文件:使用如下命令加載VHDX文件,把命令中的路徑更換為需要進行壓縮的VHDX文件的路徑。
Mount-VHD "C:\VMs\ResizeMe.vhdx" –passthru | get-disk | get-partition | get-volume
請注意,該過程只適用于Windows Server 2012自帶Hyper-V兼容的VHDX文件。從VHD轉化為VHDX格式很簡單,但在虛擬磁盤文件轉換過程中需要停機。
調整分區大小:在壓縮VHDX文件之前需要調整分區大小,只允許把文件尺寸壓縮為分區本身的大小。保留合理的緩沖區間,請牢記,磁盤碎片整理需要至少20%的空閑虛擬磁盤空間才可以進行。如下命令調整分區大小。要注意參數單位包含KB、MB、GB和TB。
Resize-Partition –driveletter D –size 40MB
卸載VHD:到此為止分區管理就結束了。接下來需要調整VHD虛擬磁盤文件的大小。如下命令把VHDX文件壓縮到您***設置的分區大小。
Resize-VHD "C:\VMs\ResizeMe.vhdx" –ToMinimumSize
使用下面的命令檢查新VHDX文件的大小。
Get-VHD "C:\VMs\ResizeMe.vhdx" | fl path, vhdformat, vhdtype, size

#p#
通過VHDResizer調整VHD大小
免費工具VHDResizer可以用來掛載VHD文件并壓縮到所選大小。上文提到的Resize-VHD命令只對VHDX文件起作用,而VHDResizer是個老工具,不支持VHDX文件格式。該工具的轉換需要時間較長,因為它的原理是把已有虛擬磁盤驅動器以數據塊為單位拷貝到新的VHD文件。
在使用VHDResizer之前,您也要通過上文提到的PowerShell命令先對VHD文件內的分區進行壓縮。
首先,關閉虛機。然后掛載VHD,把下面命令中的路徑替換為您的VHD文件路徑。
Mount-VHD "C:\VMs\ResizeMe.vhd" –passthru | get-disk | get-partition | get-volume
使用以下示例命令調整分區,留出合理的緩沖。
Resize-Partition –driveletter D –size 40MB

如您看到的,嘗試用Resize-VHD PowerShell命令出現錯誤提示,因為只有VHDX文件受支持。此時,我們打開VHDResizer進行VHD壓縮并結束整個過程。您可以遠程掛載和進行分區大小調整,但是必須在本地系統上運行VHDResizer。
登錄VHDResizer時,系統會詢問源VHD。

下一個窗口詢問您希望創建的VHD路徑、大小以及是動態還是靜態磁盤。參數設置完成后,點擊OK。

VHDResizer不會改變已有VHD文件的大小,而是根據您選擇的大小創建一個新的VHD。
完成如上過程后,打開Hyper-V管理器,移除之前較大的磁盤并增加新創建的壓縮后的VHD。

#p#
調整VHD大小的其它方法
如果購買了NetApp SAN存儲,并在其邏輯磁卷上創建了VHD或VHDX文件,您可以使用Data ONTAP PowerShell Toolkit來調整虛擬磁盤大小。該工具可用于壓縮虛擬磁盤文件,或把SAN上的數據塊清零,以完成空間的回收。

由于依賴網絡速度,P2V(物理機到虛擬機)轉換時間從30分鐘到幾個小時不等。使用上述的磁盤壓縮選項還會增加額外的時間,使得周期和應用的停機時間更長。Windows Server 2012的PowerShell命令很有潛力,但是不支持VHD,并且在壓縮過程中需要停止虛機,為P2V過程增加額外的停機時間。希望該管理過程將來會成為Hyper-V提供的自動化P2V、存儲遷移或基于向導的磁盤編輯任務的一部分。