磁盘缩减在 ESXi 客户机上不起作用

磁盘缩减在 ESXi 客户机上不起作用

大家好!这是我在 StackOverflow 网络上的第一篇帖子 :)

我们正在运行一些 ESXi 5.0/vCenter 基础架构,主要托管具有 ext3 分区的 Debian 6/amd64 客户系统,并open-vm-tools从源代码编译Debian 错误 471784

遇到了一个在互联网上被提出的问题,但却没有任何地方给出确切的答案。

当尝试在独立持久模式下缩小精简配置的磁盘时,没有任何快照、父级、克隆,我始终收到以下错误:

root@linux64:~# vmware-toolbox-cmd disk list
Shrink disk is disabled for this virtual machine.

Shrinking is disabled for linked clones, parents of linked clones,
pre-allocated disks, snapshots, or due to other factors.
See the User's manual for more information.

(顺便问一下,“其他因素”是什么?在大量白皮书和技术手册中,哪些是“其他因素”?用户手册?:)

我知道我可以用零填充分区(事实上,我shred -fuzn0在删除大文件时确实会使用),然后关闭有问题的客户机并使用各种方法,例如vmkfstools在精简配置模式下克隆或 vMotioning 磁盘等,但所有这些方法要么导致客户机缩小的停机损失,要么导致数据存储和/或主机之间不必要的数据移动。


答案是:ESX/ESXi 下没有缩小(从版本 5 开始)。

文档内容如下:

重要的不允许收缩磁盘在下列情况下:

  1. 虚拟机托管在 ESX/ESXi 服务器上。 ESX/ESXi 服务器仅当虚拟机导出时才可以缩小虚拟磁盘的大小。但虚拟磁盘在 ESX/ESXi 服务器上占用的空间不会改变。

  2. 虚拟机有一个Mac 客户端操作系统。

  3. 预先分配创建虚拟磁盘时,将所有磁盘空间分配给虚拟磁盘。

  4. 虚拟机包含快照

  5. 虚拟机是一个链接克隆或者 父母链接克隆。

  6. 虚拟磁盘是独立的磁盘 非持久模式。

  7. 文件系统是日志文件系统,例如ext4、xfs 或 jfs文件系统。

难怪在 VMWare Workstation 中可以选择缩小,但在连接到 ESXi 或 vCenter 实例的 vSphere 客户端中则不行。

答案1

http://www.vmware.com/pdf/vmware-tools-cli.pdf 第 13 页:

以下情况不允许缩盘:

虚拟机托管在 ESX/ESXi 服务器上。仅当虚拟机导出时,ESX/ESXi 服务器才能缩小虚拟磁盘的大小。但虚拟磁盘在 ESX/ESXi 服务器上占用的空间不会改变。

答案2

实际上,有一种方法可以缩小 ESXi 上的虚拟机,尽管您需要关闭虚拟机。方法如下:

  1. 将虚拟机内所有未使用的空间清零:

    dd if=/dev/zero bs=1048576 of=/zero ; sync ; rm /zero

  2. 对其他挂载点、交换分区等执行相同操作。

  3. 关闭虚拟机。

  4. 通过 SSH 连接到 ESXi,并发出以下命令:

    vmkfstools -K /vmfs/volumes/volumename/vmname/vmname.vmdk

这将需要一些时间... vmkfstools 会在您的 VMDK 内部“打洞”,例如,释放所有填充零的块,从而有效地缩小您的 VMDK。

答案3

在 vSphere ESXi 中缩小 VMDK 的唯一方法是导出或迁移/Storage vMotion 到另一个数据存储。我经常使用可以处理迁移(不是 SQL 或 Exchange)的实时服务器执行此操作。以前的服务器管理员使用厚置备磁盘构建了所有虚拟机。我将虚拟机从一个数据存储迁移到另一个数据存储,并将 VMDK 更改为精简置备。

如果服务器处于离线状态,您也可以执行 vmkfstools。

答案4

在 ESXi 上可以缩小磁盘空间。

  1. 找到大文件并将其删除。

    find / -type f -size +50M

  2. 碎片整理(无需卸载/重新安装任何内容)。忽略任何错误。某些文件(如符号链接和设备文件)无法进行碎片整理。

    sudo e4defrag /

  3. 用零填充所有未使用的空间,以便 VMware 知道它确实未使用:

    dd if=/dev/zero of=wipefile bs=1M; sync; rm wipefile

  4. 运行缩减操作:如果4失败,则继续执行5。

    sudo vmware-toolbox-cmd disk shrinkonly

  5. 使用尝试选项重新启动 Linux 系统,并使用 gparted 编辑分区表。缩小根文件系统并删除交换分区并将其移动到根分区附近。

  6. 通过 SSH 连接到 ESXi,并发出以下命令:

    vmkfstools -K /vmfs/volumes/volumename/vmname/vmname.vmdk

  7. 我们需要编辑 *.vmdk 文件。RW 字母后面定义了 VMware 虚拟磁盘 (VMDK) 的大小

    *40 GB = 40 * 1024 * 1024 * 1024 / 512 = 83886080*

  8. 将其迁移到另一个数据存储以反映新的大小。

相关内容