Возвращаемся к проблеме тонких (thin) дисков VMware ESXi и уменьшения их размера после того, как они разрослись. Суть проблемы: когда вы используете тонкие диски для виртуальных машин - они постоянно растут, даже если вы удаляете в гостевой ОС. Это происходит потому, что ОС Windows (да и Linux) при удалении файлов не заполняет их блоки нулями, а просто помечает их удаленными в метаданных тома.
Для целей обнуления блоков файловой системы можно использовать утилиту sdelete. Вот так, например, можно заполнить нулями все свободное место на диске C: в ОС Windows.
sdelete -z C
Для Linux есть вот такой способ. Делается с помощью dd:
Затем можно сделать Storage vMotion виртуальной машины на другое хранилище, после чего нулевые блоки должны удалиться и vmdk-диск машины должен уменьшиться. Но так происходит не всегда - см. нашу статью "Блоки томов VMFS и поведение виртуальных машин VMware vSphere при Storage vMotion". Такое работает только когда используются хранилища с разными размерами блоков и для горячей миграции хранилищ Storage vMotion используется старый Data Mover (fsdm).
Проблема в том, что новый Data Mover (fs3dm) так и не был доработан в VMware ESXi 5, а, кроме того, теперь блоки VMFS 5 имеют одинаковый размер (1 МБ, если проведен апгрейд с VMFS 3 - размер блока сохраняется). Соответственно, для Storage vMotion между хранилищами VMFS 5 используется новый fs3dm, который по-прежнему не умеет вычищать нулевые блоки, а поэтому уменьшения дисков на ESXi 5 у вас никакого при их миграции не будет.
Решение простое - временно отключить fs3dm, после чего миграция Storage vMotion будет проводиться с помощью старого Data Mover - fsdm, который умеет чистить блоки в vmdk-файлах.
Отключется fs3dm из консоли ESXi 5 командой:
~ # vsish /> set /config/VMFS3/intOpts/EnableDataMovement 0
Проверяем, что fs3dm отключен:
/> get /config/VMFS3/intOpts/EnableDataMovement
Должно быть что-то вроде этого:
Vmkernel Config Option { Default value:1 Min value:0 Max value:1 Current value:0 hidden config option:1 Description:Whether VMFS should handle data movement requests by leveraging FS3DM } />
Current value:0 - это значит мы отключили fs3dm.
Теперь делаем миграцию Storage vMotion на другой Datastore - и размер vmdk-диска должен уменьшиться.
После этого возвращаем fs3dm на место командой:
/> set /config/VMFS3/intOpts/EnableDataMovement 1
Что делать если такое решение не очень подходит? Есть такие варианты:
Сделать VMFS-том версии 3 с отличным от 1 МБ размером блока. Дальше его можно обновить на VMFS 5, размер блока сохранится, и использовать этот том в качестве буферного.
Если у вас нет Storage vMotion, то можно использовтаь V2V-конвертацию виртуальной машины с помощью бесплатного VMware Converter - он умеет уменьшать vmdk-диски.
Ну а лучше тонкие диски при больших инсталляциях не использовать - они все растут, за ними не уследишь. Но это мое мнение.