Тонкие (thin) диски VMWare позволяют существенно сэкономить место на файловой системе VMFS хранилища при создании виртуальной машине. Такие vmdk диски при создании практически не занимают место на файловой системе и постепенно разрастаются до максимального размера по мере накопления информации. Однако основная проблема при использовании thin диски заключается в том, что они со временем разрастаются даже в том случае, если вы освободили место внутри гостевой операционной системы.
Стандартного средства сжатия тонких дисков в ESXi нет, а сама система виртуализации ничего не знает об особенностях хранения данных внутри гостевой ОС.
В этой статье мы опишем простой способ сжатия тонкого vmdk диска в ESXi.
- На первом этапе необходимо помочь гипервизору, заполнив все свободное место на дисках внутри гостевой ОС нулями.Обнулить свободные блоки в Windows можно с помощью утилиты Марка Русиновича SDelete (на момент написания статьи последняя доступная версия SDelete v1.61, если вы используете более раннюю версии SDelete, имейте в виду, в ней могут использоваться немного другие параметры). Скачать SDelete можно тут: http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx.Распакуйте архив на диск, откройте командную строку (естественно, с правами администратора) и выполните следующую команду
Sdelete –z c:
В данном случае c: — это виртуальный тонкий vmdk диск, который мы планируем сжать.
В Linux эту операцию можно выполнить с помощь dd
dd if=/dev/zero bs=64k of=zero.temp ; rm zero.temp
- Выключаем гостевую ОС (Shutdown).Примечание. Сжать диск можно и с помощью миграции виртуальной машины на другое хранилище (Storage VMotion). Однако отметим, что данный способ не является универсальным и работает только при соблюдении определенных условий.
- Подключаемся к ESXi серверу по SSH под root –ом (не забудьте включить службу SSH и разрешить входящий трафик на файерволе ESXi). Переходим в каталог c файлами виртуальной машины:
cd vmfs/volumes/storage1/vm1
где storage1 – имя хранилища, а vm1 – каталог, в котором хранятся файлы с vmdk дисками виртуальной машины
- Выведем «полный» размер виртуального диска.
ls -lh *.vmdk
“Реальный” размер виртуального диска, который он занимает на файловой системе можно узнать так:
du –h *.vmdk
Как вы видите, thin диск занимает на хранилище 33 Гб (максимальный его размер 40 Гб). Причем внутри гостевой ОС Windows занято всего 15 Гб.
- Сжимаем vmdk диск с помощью vmkfstools. Команда сжатия диска thin будет выглядеть так:
vmkfstools --punchzero /vmfs/volumes/storage1/vm1/vm1.vmdk
Процедура сжатия в нашем примере заняла около 5 минут (скорость от размера диска и скорости и загруженности хранилища и сети SAN). После окончания процедуры сжатия проверим текущий размер vmdk файла.
Как вы видите vmdk диск сжался до 15 Гб!
К счастью расширить виртуальный диск гораздо проще 🙂