VMware ESXi ручное сжатие всех тонких (thin) дисков
Тонкие диски имеют свойство разрастаться со временем. Чтобы снова объявить освобожденное место свободным, нужно обнулить свободное место в гостевой файловой системе, а затем использовать vmkfstools с ключом -K для освобождения блоков в VMFS разделе. Сделать это сразу для всех дисков можно при помощи простого скрипта.
Как обнулить свободное место, рассказано в статье «Тонкие диски в VMware«. После этого нужно зайти на хост по SSH и выполнить:
vmkfstools -K <path-to-vmdk-file>
Обратите внимание, что есть несколько файлов имеющих расширение .vmdk в каталоге с виртуальной машиной. Некоторые из них имеют суффикс -flat и -ctk. Здесь нужно указывать путь к файлу без всяких суффиксов.
Запускать vmkfstools можно только для остановленных машин. Если запустить эту команду для запущенной машине, то будет выведено сообщение об ошибке:
Failed to open virtual disk '<path-to-vmdk-file>': Failed to lock the file (16392)
Чтобы узнать полный размер диска используйте:
ls -lh <path-to-flat-vmdk-file>
и вот тут уже надо использовать файл с суффиксом -flat, т.к. именно в нём хранится содержимое диска.
Чтобы узнать реально занимаемый размер:
du -h <path-to-flat-vmdk-file>
Чтобы сделать это для всех дисков в хранилище, используйте этот bash скрипт заменив в нём <path-to_datastore> на путь к вашему datastore:
datastore='<path-to_datastore>' filepaths=$(find ${datastore} -type f -name "*-flat.vmdk") for vmdkflat in $filepaths; do echo "--------------------------------------------------------------------------------" vmdk=${vmdkflat/-flat.vmdk/.vmdk} du ${vmdkflat} -h vmkfstools -K ${vmdk} du ${vmdkflat} -h done
Загрузите этот скрипт на файловое хранилище доступное для esxi, например туда же, где лежат виртуалки, и не забудьте установить права на выполнение этого файла.
В результате vmkfstools будет вызывана для каждого тонкого диска, с выводом информации о реально занимаемом месте до и после выполнения команды: