Продолжаем сбор практических советов и рекомендаций по эксплуации VMware ESX 4.xx. Сегодня будем осуществлять липосакцию для отдельно взятой виртуальной машины, разожравшейся до 2-3 кратного размера.

Сначала о том, как такое вообще может произойти. В ESX есть такой механизм, как VM snapshots. Действует он по аналогии с Volume Shadow Copy в Windows, т.е. в момент создания “снимка” создается еще один файл vmhd для каждого жесткого диска и все изменения записываются в него. В момент удаления “снимка” ESX должен слить файлы воедино, накатив изменения из временного файла в основной, и удалить последний. Однако, т.к. ESX писали тоже люди, работает он не всегда правильно, в частности при непонятных условиях временный файл не удаляется, а изменения из него не переносятся в основной. Таким образом эти файлы копятся и растут в размерах, что приводит к необоснованному пожиранию дискового пространства виртуальной машиной. Вполне резонный вопрос: а нахрена делать эти самые снапшоты? Такой же резонный ответ: любая программа резервного копирования виртуалок создает снапшот перед процедурой резервного копирования и удаляет его после завершения процедуры. Тут тоже без ошибок и сбоев не обходится, поэтому иногда снапшоты не удаляются, а иногда удаляются некорректно.

Когда я столкнулся с этой ситуацией, виртуальная машина с дисками на 200 ГБ занимала физически почти 400 ГБ и сожрала все доступное место на датасторе. Любые попытки привести ситуацию к норме через vSphere Client (скопировать на другой datastore) успехом не увенчались, меньше места оно занимать не стало.

А теперь о том, как с этим бороться. Для этого нам нужно попасть в консоль с любого ESX-сервера, с которого виден нужный датастор. Дальше выполняем следующие действия:

  1. Удаляем все имеющиеся снапшоты у виртуальной машины.
  2. Останавливаем виртуальную машину.
  3. Находим датастор, на котором есть достаточный объем дискового пространства (столько, сколько в идеале должна занимать виртуальная машина). Это может быть тот же самый датастор, а может быть и другой, главное, чтобы оба датастора были видны с выбранного ESX-сервера.
  4. Логинимся в консоль выбранного сервера.
  5. Для каждого виртуального диска выполняем следующую команду (писать в одну строчку):
    vmkfstools -i "/vmfs/volumes/<Datastore>/<VM_Folder>/Disk1.vmdk"
      "/vmfs/volumes/<Datastore>/<New_Folder>/Disk1.vmdk" –d thin
  6. Процедура занимает немало времени, которое, в основном зависит от объема диска.
  7. Идем в свойства виртуальной машины, удаляем все диски (запоминая, конечно, их параметры, такие как тип адаптера и LUN) и добавляем эти диски заново, указывая на новое место, в котором теперь живут данные.
  8. Переименовываем файл имя_машины.vmsd в имя_машины.vmsd.old. Старая база снапшотов нам не нужна.
  9. Запускаем виртуальную машину и проверяем, что она нормально грузится, а все данные находятся на законном месте и не пропали. Если все ОК, то выключаем виртуальную машину.
  10. Удаляем все старые vmdk файлы, а новые переносим из временной папки в основную папку вирутальной машины. Файл vmsd.old тоже можно удалить.
  11. Переконфигурируем диски виртуальной машины еще раз по аналогии с п. 7. Этот процесс нужно совмещать с процессом удаления файлов, т.к. перенести файлы из временной папки в основную можно будет только после того, как из конфигурации виртуальной машины будут удалены соответствующие диски.
  12. Запускаем виртуальную машину и радуемся жизни.

Вставить свои пять копеек

Чтобы оставить комментарий, Вам нужно идентифицировать себя.