如何使用 Ubuntu 压缩 VHD 文件?

AmS*_*gar 10 ext4 ntfs hyper-v zero-fill hyper-v-server-2008-r2

我使用角色为 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

2) 将此 .iso 添加到 quest OS Ubuntu

3)启动这个虚拟机

4)使用zerofree

zerofree /dev/sda1
Run Code Online (Sandbox Code Playgroud)

5) 关闭这个虚拟机

6) 使用 Hyper-V 管理器(编辑 -> 碎片整理)

这个 vhd 是 360 Gb。现在 70 GB。

小智 6

关闭您的虚拟机,备份 VHD,然后运行另一个虚拟机(我使用SystemRescueCD,因为它又小又快),它有可用的 ext4 分区,即用于 SysRescue 的 HD(但不要挂载它!)。从 SysRescue VM,在 ext4 分区上运行“ zerofree ”,关闭该 VM,然后使用您的管理网站压缩 VHD。


小智 5

我可以确认:zerofree 正在压缩虚拟磁盘文件

但是:您不需要使用任何救援 CD 或在另一个虚拟机中安装 VHDX:

sudo apt-get install zerofree
Run Code Online (Sandbox Code Playgroud)

启动进入恢复模式,然后运行:

zerofree /dev/sda1
Run Code Online (Sandbox Code Playgroud)

之后我们就要开始对虚拟磁盘文件进行优化了。在托管 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 ""
}
Run Code Online (Sandbox Code Playgroud)

现在运行该文件并享受释放的磁盘空间:-)

ShrinkVhdx.ps1 .\hdd1.vhdx
Run Code Online (Sandbox Code Playgroud)