Hyper-V

如何使用 Ubuntu 壓縮 VHD 文件?

  • July 14, 2021

我使用帶有 Hyper-V 角色的 windows server 2008r2。來賓系統是 Ubuntu 12.04 LTC。它位於動態虛擬硬碟上。

我想壓縮這個 VHD(實際大小是 50 GB,磁碟上有 360 GB)。但我不能這樣做,因為 Ubuntu 文件系統不是 NTFS。 我需要什麼(gparted,sdelete,…)來解決這個問題?

主要問題是文件系統不是NTFS,而是ext4。

答案:

  1. 下載systemrescuecd

http://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/3.8.1/systemrescuecd-x86-3.8.1.iso/download

  1. 將此 .iso 添加到 quest OS Ubuntu

3)啟動這個虛擬機

  1. 使用 zerofree
zerofree /dev/sda1
  1. 關閉此虛擬機

  2. 使用 Hyper-V 管理器(編輯 -> 碎片整理)

這個 vhd 是 360 Gb。現在 70 GB。

關閉 VM,備份 VHD,然後執行另一個虛擬機(我使用SystemRescueCD,因為它既小又快),它具有可用的 ext4 分區,即用於 SysRescue 的 HD(但不要安裝它!)。從 SysRescue VM,在 ext4 分區上執行“ zerofree ”,關閉該 VM,然後使用您的管理網站壓縮 VHD。

我可以確認:zerofree 正在壓縮虛擬磁碟文件

但是:您不需要使用任何救援 CD 或將 VHDX 掛載到另一個虛擬機中:

sudo apt-get install zerofree

啟動進入恢復模式,然後執行:

zerofree /dev/sda1

之後,我們必須開始優化虛擬磁碟文件。在託管 VHDX 文件的伺服器上,創建以下文件 ShrinkVhdx.ps1:

[CmdletBinding()]
Param(
   $VHDFiles
)

# Find the disks
foreach($VHD in $VHDFiles){
   Write-Verbose "Working on $VHD, please wait"
   Write-Verbose "Current size $([math]::truncate($(Get-VHD -Path $VHD).FileSize/ 1GB)) GB"
   
   Mount-VHD -Path $VHD -NoDriveLetter -ReadOnly
   Optimize-VHD -Path $VHD -Mode Full

   Write-Verbose "Optimize size $([math]::truncate($(Get-VHD -Path $VHD).FileSize/ 1GB)) GB"
   Dismount-VHD -Path $VHD
   
   Write-Verbose ""
}

現在執行文件並享受釋放的磁碟空間:-)

ShrinkVhdx.ps1 .\hdd1.vhdx

引用自:https://serverfault.com/questions/551053