磁盘收缩不适用于ESXi guest虚拟机


11

大家好!我在StackOverflow网络上的第一篇文章:)

我们正在运行一些ESXi 5.0 / vCenter基础架构,以托管主要具有ext3分区的Debian 6 / amd64来宾系统,并open-vm-tools根据debian bug 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 Server才能缩小虚拟磁盘的大小。但是,ESX / ESXi服务器上虚拟磁盘所占用的空间不会更改。

  2. 该虚拟机具有Mac来宾操作系统。

  3. 预先分配的,当你创造了它所有的磁盘空间的虚拟磁盘。

  4. 虚拟机包含快照

  5. 虚拟机是链接克隆或链接克隆父代

  6. 虚拟磁盘是处于非永久模式的独立磁盘 。

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

难怪有在VMware工作站,但不能连接到ESXi或vCenter实例的vSphere客户端收缩的选项。


2
您能否显示可以在vmx文件中找到的Isolation.tools.diskShrink.disable键的值?
cikuraku 2012年

1
不在那里 添加isolation.tools.diskShrink.disable =“ false”不会更改任何内容。
NekojiruSou 2012年

Answers:



18

实际上,有一种方法可以在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。


6
对于Windows,您可以获取Virtual Server 2005的副本,从其中提取Precompact.iso文件,该文件包含Procompact.exe程序,该程序会将Windows中所有未使用的磁盘速度调零。
克里斯·S

当VM位于NFS存储上时,vmkfstools无法正常工作。
斯文31415

0

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

如果服务器脱机,您也可以执行vmkfstools。


-1

在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. 使用try选项重启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. 将其迁移到另一个数据存储以反映新的大小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.