如何使用 Ubuntu 压缩 VHD 文件?

如何使用 Ubuntu 压缩 VHD 文件?

我使用带有 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 添加到目标操作系统 Ubuntu

3)启动此虚拟机

4)使用 zerofree

zerofree /dev/sda1

5)关闭此虚拟机

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

这个 vhd 原来是 360 GB。现在只有 70 GB。

答案1

关闭虚拟机,备份 VHD,然后运行另一个虚拟机(我使用系统救援光盘因为它小而快),具有可用的 ext4 分区,即 SysRescue 的 HD(但不要挂载它!)。从 SysRescue VM 运行“零自由'在 ext4 分区上,关闭该虚拟机,然后使用您的管理网站压缩 VHD。

答案2

我可以确认: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

答案3

这个过程似乎是

  • 备份您当前的 VHD 文件。
  • 使用快照管理器删除/合并任何快照。
  • 将未使用的磁盘空间填零

sudo apt-get install secure-delete 
sudo sfill -llz .

oooooooo.ooo这将创建一个名为“ filled with s”的文件0。我想你应该在所有分区上重复 sfill 命令。

请注意这也不快,需要几个小时甚至几天才能完成。

  • 袖珍的
  • 利润

答案4

我确实尝试在第二代机器上启动 Systemrescuecd。但是没有成功,所以我创建了一台新的第一代机器并将 VHDX 添加到其中。systemrescuecd 启动了。我没有做任何操作。移除第一代机器并将 VHDX 放回原始机器。然后 Ubuntu 根本无法启动。只有 Grub 菜单。

请参阅我的帖子: Hyper-V Ubuntu vhdx scsi ide

所以请注意这一点,并做好备份(这次我没有)......

相关内容