如何减少 Virtualbox vdi 文件的虚拟大小/容量

如何减少 Virtualbox vdi 文件的虚拟大小/容量

我想将运行 MS Windows 7 的物理机变成 VirtualBox 虚拟机。这很容易,我以前做过,但这次我需要磁盘的虚拟大小/容量为固定且较小尺寸。

需要修复它,因为出于合规性原因,我将在其上安装 PGP 磁盘加密。这会将动态磁盘扩展到最大大小。

除了这种特殊情况之外,还有其他原因需要磁盘更小且固定。这是我的经验。例如,如果您在动态扩展磁盘上运行 Jenkins 构建服务器,则可以看到磁盘快速扩展到其最大大小,而在客户操作系统中,磁盘空间使用率稳定,并且有大量可用空间。

使用磁盘2vhd我创建了一个 vhdx 文件。我将此文件转换为 vdi 格式。

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

据称,使用 vdi 您可以使用类似以下命令来减少虚拟大小/容量

vboxmanage modifyhd MSWIN7.vdi --resize 160000

我发现这不起作用。即使你尝试了其他方法,你也会不断收到类似这样的错误消息:

进度状态:VBOX_E_NOT_SUPPORTED VBoxManage:错误:此格式的调整硬盘大小操作尚未实现!

下面是我的 vdi 磁盘的磁盘布局。我将其添加到 Ubuntu VM 中,使用 Gparted 和 CloneZilla 查看。容量约为 300GB。未分配 145GB。已使用约 153GB。

我想将容量缩小到 160GB 左右。这应该足够容纳/dev/sdb1/dev/sdb2

顺便说一句,我尝试了 CloneZilla,但它似乎也不喜欢将容量缩小到较小的磁盘。我在 CloneZilla 中尝试了各种设置,但没有成功。

如何减少虚拟大小/容量?

在此处输入图片描述

答案1

  1. 释放磁盘末尾的空间客户操作系统,其中空间 >= 大小(源磁盘) - 大小(新磁盘)。通常通过缩小最后一个分区

  2. 关闭虚拟机。

  3. 创建具有所需大小的新 Virtual Box 磁盘。

  4. 将内容从旧磁盘移动到新磁盘:

     vboxmanage clonemedium disk "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. 打开虚拟机。

  6. 您可能需要调整分区大小客户操作系统根据步骤 1 中释放的空间填充磁盘的其余部分。

答案2

最后,我使用预安装的命令行实用程序dd(请参阅)以一种意想不到的简单方式解决了这个难题磁盘克隆。如下所示,我现在在客户操作系统中拥有 160GB 的驱动器,存储在一个 160GB 固定大小的 VirtualBox vdi 文件中。

在此处输入图片描述

我按照以下步骤解决了这个问题:

  1. 使用以下方法调整磁盘大小磁盘管理在 MS Windows 中,其大小等于或略小于 VDI 的大小。
  2. 将带有 MS Windows 7 的源 vdi 添加MSWIN7.vdi到 Ubuntu VM 作为第二个磁盘。
  3. 创建一个新的固定 160GB vdi,并将其添加到 Ubuntu VM。现在有三个磁盘:/dev/sda1正在运行的 Ubuntu VM、/dev/sdb2MSWIN7.vdi/dev/sdc1新的 vdi。
  4. 在 上创建正确的分区/dev/sdc。CloneZilla 帮我做了这件事。它没有复制数据,但它确实创建了我想要的分区。当然,您可以手动执行此操作。
  5. 使用类似于的命令复制sdb到。该命令以无剩余空间错误消息结束,这是意料之中的。我忽略了这一点,因为这只是未分配的空间,无法复制。sdcddsudo dd if=/dev/sdb of=/dev/sdc

我认为可以对每个分区运行该命令。也许这样更好,并且不会显示错误消息。sudo dd if=/dev/sdb1 of=/dev/sdc1sudo dd if=/dev/sdb2 of=/dev/sdc2

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s

答案3

就我而言,我将一个带有 50GB vdi 的 Windows VM 缩小到了 20GB。

我努力了安德烈·菲格雷多解决方案,但我遇到了克隆的问题vdi

当我申请时安德烈·菲格雷多解决方案并将缩小的程序附加vdi到虚拟机,在启动时,Virtualbox 会因 I/O 错误而停止。

也许这与我的文件系统有关btrfs(我听说这btrfs会导致 Vritualbox 出现问题vdi)。

我的解决方案:

我尝试了另一种解决方案来缩小虚拟机磁盘(vdi),名为卵巢早衰,(卵巢早衰磁盘大小为 50GB,单个 ntfs 分区有 40GB 可用空间)。

让我们按照以下步骤操作(这是我的情况,你可以调整/发明不同的虚拟专用网络名称):

  • 停止虚拟机(关机)

  • vdi创建一个名为的新磁盘( )錄影所需大小(我的是 20GB..)

  • 錄影到虚拟机

  • 启动虚拟机并安装实用程序 EaseUS Backup Free

  • 执行 EasyUS 并使用 EasyUS克隆函数(它克隆卵巢早衰MBR 和 ntfs 分区卵巢早衰通过缩小到新磁盘錄影

  • 关闭虚拟机

  • 分离卵巢早衰来自虚拟机

  • 检查是否錄影是虚拟机的第一个启动设备

  • 重启虚拟机

  • 玩得开心

不要忘记删除卵巢早衰体积。

按照这些步骤,我成功地将虚拟机磁盘大小从 50GB 减少到了 20GB

答案4

正如其他人提到的,Andre Figueiredo 的答案是基于运气的,因为不能保证“第一个 X gb”的空间是你的空间,除非你进行碎片整理,在这种情况下它仍然是有风险的。

Paul Hursky 的答案更安全。我将列出我执行的一些额外步骤(请注意,这是针对 Windows 的,我的是 XP,但它也适用于其他系统):

1)在此链接中获取“MiniTool Partition Wizard Free 12”的免费版本

2) 将其安装在客户操作系统内并调整驱动器大小,留出一些喘息空间以确保安全(不要将其完全拉回...)。由于您很可能调整当前操作系统的硬盘大小,因此它将为您提供重新启动并执行操作的选项,请执行此操作。

3) 现在使用相同的 MiniTool Partition 程序,选择您现在未分配的空间(下方*:)-> 右键单击​​ -> 擦除分区 -> 用零填充扇区(快速)。

4) 现在安全关闭客户操作系统。转到 VBoxManage.exe 所在的 VirtualBox 文件夹,在此路径中打开 cmd 并运行以下命令:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) 现在一切都应该奇迹般地工作了。当您下次打开客户操作系统时,它将运行检查磁盘,让它运行,它会找到看起来像系统文件的“孤立文件”。

相关内容