В этой статье мы рассмотрим, как уменьшить размер виртуального диска (vmdk) в VMWare ESXi. В отличии от процедуры расширения диска виртуальной машины VMWare, которую можно выполнить на-лету без выключения ВМ, процедура уменьшения размера vmdk файла на гипервизоре VMWare ESXi задача более сложная, и выполнить ее непосредственно через графический интерфейс vSphere Client в принципе нельзя. Клиент vSphere не позволяет вам указать меньший размер виртуального диска.
Перед тем, как уменьшить размера виртуального диска на хосте VMWare ESXi необходимо:
- Удалить все снапшоты виртуальной машины (иначе вы можете повредить виртуальный диск)
- Создать полную резервную копию виртуальной машины, или предварительно сделайте копию vmdk и flat файла, который вы хотите уменьшить. Воспользуйтесь командами:
cp vmname.vmdk backup_vmname.vmdk
cp vmname-flat.vmdk backup_vmname-flat.vmdk
Процедура уменьшения размера виртуального диска состоит из двух этапов:
- Уменьшение раздела внутри гостевой ОС;
- Уменьшение размера VMDK файла виртуальной машины VMware на VMFS (NFS) хранилище.
Уменьшение раздела внутри гостевой ОС
В первую очередь необходимо уменьшить размер дискового раздела внутри гостевой операционной системы. Если у вас в ВМ запущена Windows, воспользуйтесь диспетчером управления дисков diskmgmt.msc (операция Shrink Volume доступна во всех поддерживаемых версиях Windows, для старых версий Windows для уменьшения размера раздела используется утилита sdelete) или используйте сторонние утилиты (например, Acronis Disk Director). Если этого не сделать, то после уменьшения размера виртуального диска можно получить неработоспособную файловую систему.
Допустим, вы хотите хотим уменьшить размер диска на 40 Гб. Значит размер тома должен быть уменьшен на 40960 Мб (40 Гб x 1024). Именно это значение нужно ввести в поле мастера Shrink Volume. После уменьшения размера раздела на диске справа от вашего основного раздела останется некоторое количество неразмеченного (Unallocated) пространства (в нашем примере 40 Гб).
Уменьшение размера VMDK файла виртуальной машины VMware
Теперь нужно уменьшить размера VMDK файла на файловой системе VMWare VMFS.
- Выключите виртуальную машину, размер виртуального диска которой вы хотите уменьшить;
- Подключитесь по SSH к консоли гипервизора ESXi, на котором зарегистрирована ВМ (можно воспользоваться putty или встроенным ssh клиентом Windows);
- Перейдите в каталог, в котором хранится vmdk файл ВМ (путь можно узнать в свойствах виртуального диска в графическом клиенте vSphere)
cd /vmfs/volumes/datastore/test-VM
- Выведите содержимое конфигурационного файла виртуального диска (с расширением *.vmdk) с помощью команды cat:
# cat test_vm_3.vmdk
Размер vmdk диска задается в секции #Extent description (после символов RW). В данном случае указана цифра 167772160 (80 Гб *1024*1024*1024 / 512) - Я хочу уменьшить виртуального vmdk диска с 80 до 40 Гб. Это значит, что в секции Extent description нужно указать значение: 83886080 (40 Гб*1024*1024*1024 / 512). Задайте новый размер виртуального диска с помощью текстового редактора (
vi
илиnano
); - Я использую редактор vi:
# vi test_vm_3.vmdk
- В редакторе vi с помощью стрелки вниз перейдите на строку с размером диска и нажмите
i
(для перехода в режим редактирования). Укажите новый размер виртуального диска. НажмитеESC
, чтобы выйти из режима редактирования и:wq
-> Enter чтобы сохранить изменения; - Осталось склонировать или смигрировать (Storage VMotion) виртуальную машину на другое хранилище (datastore). После перемещения файлов виртуальной машины в ее свойствах отобразится новый размер виртуального диска;Совет. Если у вас всего один ESXi хост, одно VMFS хранилище или нет vCenter, то вы не сможете сделать операцию Storage vMotion. В таком случае можно склонировать vmdk диск командой:Убедитесь, что в свойствах ВМ теперь отображается новый размер виртуального диска;
vmkfstools -i test_vm_3.vmdk test_vm_3_newsize.vmdk
Удалите оригинальный vmdk диск и еще раз склонируйте оставшийся vmdk диск, вернув ему прежнее имя:
rm test_vm_3.vmdk
rm test_vm_3-flat.vmdk
vmkfstools -i test_vm_3_newsize.vmdk test_vm_3.vmdk - Осталось запустить гостевую ОС и убедиться, что неразмеченная область пропала, а размер диска уменьшился.Совет. Если на предыдущем шаге использовалась утилита vmkfstools, нужно переподключить виртуальный диск в настройках ВМ, т.к. его новый размер может отображаться некорректно.
Итак, мы рассмотрели один из вариантов выполнения операции уменьшения размера виртуального vmdk диска в VMWare ESXi. Если требует уменьшить размер тонкого диска VMWare за счет неиспользуемого места, рекомендуем воспользоваться этой инструкцией.
- Уменьшение размера виртуального диска путем конвертации виртуальной машины с помощью VMware vCenter Converter. При конвертации нужно указать размер нового диска меньше, чем исходный (об этом в следующем разделе);
- Можно склонировать содержимого виртуального диска с помощью стороннего софта (например, Acronis True Image или Symantec Ghost32). Операция выполняется путем добавления в виртуальную машину нового диска меньшего размера и клонирования на него содержимого большего диска. После этого большой диск можно удалить.
Уменьшение размера виртуального диска с помощью VMware vCenter Converter Standalone
Еще один способ уменьшения размера виртуальных дисков у ВМ на VMWare с помочью GUI — воспользоваться бесплатным конвертером — VMware vCenter Converter Standalone.
Недостаток:
- Конвертация V2V выполняется медленно;
- На датасторе должно быть достаточно места для разрешения новой ВМ;
- У новой ВМ будет новый MAC адрес.
Плюсы:
- не требуется открывать в консоль vCenter или ESXi хоста;
- создается точная копия VM;
- источник не поломается при ошибке в настройках параметров задачи конвертирования.
Укажите адрес ESXi хоста.
Выберите исходную ВМ.
Укажите параметры новой ВМ.
Перейдите в режим редактирования диска (Data to copy -> Edit).
Выберите режим копирования: Select volumes to copy.
Укажите новый размер диска в новой ВМ. Как вы видите, на диске в гостевой занято 48 гб, а размер самого диска – 150. Мы уменьшим размер виртуального диска до 60 Гб.
Запустите процесс конвертирования ВМ. После окончания отключите исходную ВМ и включите новую. Проверьте, что размер диска уменьшился. После этого исходную ВМ можно удалить.
Спасибо огромное!
Очень помогла Ваша заметка
> Удалить оригинальный диск и еще раз склонировать vmdk диск, вернув ему прежнее имя:
А зачем еще раз клонировать диск? Нельзя просто удалить оригинальный и подцепить склонированный? Какая разница, как называется склонированный диск?
Вы правы, второе клонирование это лишний шаг, но файл виртуального диска все — таки лучше переименовать, чтобы не перенастраивать ВМ (можно, конечно и просто и переподключить диск).
Добрый день, спасибо за статью.
Сделал по статье, всё вроде получилось, но в настройках гостевой машины всё равно остался прежний размер и не меняется
Виртуальную машину между хранилищами перемещали? Если их нет — нужно пересоздать диск клонированием.
Возможно внутри гостевой машины нужно выполнить Disk Rescan
Попробовал сжать пустой свежесозданный толстый диск способом из https://winitpro.ru/index.php/2013/07/15/szhimaem-tonkij-thin-disk-v-esxi-5/ Если верить du — он сжался до 0.
Единственное — некрасиво это, когда в size и в provisioned size разные размеры.
Искал подобную информацию. и на толкнулся на данную статью.
Понимал что дело без бубнов не выйдет, однако способы найденные ранее и приведенный выше, не для слабонервных, и потерять ВМ уж в планы не входило.
Поэтому вот какой порядок выбрал для себя,
В настройках ВМ добавляем разумного размера диск на котором будет размещен уже имеющийся, но или разросшийся или по снятию образа с реальной машины всегда получается таким что ни в какие ворота не «лезет».
Включаем DVD ? и прикручиваем любой образ Lite Win7 или что то подобное имеющего в арсенале Акронис тру.
Заходим в биос ВМ ставим порядок загрузки первым DVD, и стартуем.
Средствами акрониса клонируем наш большой HDD на тот которым хотим его заменить. в итоге получится HDD с системой но естественно меньшего размера.
Перегружаем, и опять в биос.
Выставляем порядок в HDD, его легко определить по большему цифровому значению на конце. Ставим его выше.
Грузим систему, все должно пройти как положено. Убедившись что система грузится выключаем, Удаляем HDD? ну тот который нам больше не нужен, удаляем файл диска HDD? ну вот собственно и все, хочу только сказать процедура по времени занимает много, однако все налицо так сказать и без потерь.
IMHO через vCenter Converter Standalone те же яйца по надежности, а по времени, наверное, короче.
Когда встала эта задача, был в оху… сильно удивлен, что штатными средствами VMWare нельзя уменьшить диск.
Сделал, как и Сергей — акронисом, но проще, в два этапа — сливаем диск виртуалки на USB-диск, потом создаем новую виртуалку с уменьшенным размером диска, и заливаем образ на нее. 10-гиговый раздел сливался у меня 10 мин, и заливался столько же.
USB удобен, потому что динамически подсоединяется и отсоединяется. Наверное, можно, и без USB-диска, используя диски хост-машины, но я не разбирался.
Виртуальная машина, которую собираемся конвертировать (изменять размеры дисков и т.д.), должна быть выключена.. Именно выключена.
То есть, перед конвертацией, на исходной виртуальной машине необходжимо выполнить: Shut down или Power Off, а не Suspend.

Все сделал по инструкции, правда без конвертации, просто удалили его из Inventory и добавил заново.
Все работает
пока вродеПодтверждаю. Клонирование лишнее. esxi 6.7U3. Разрегистрации и регистрации достаточно для рефреша HDD size.
Редактирование vmdk удобнее всего через WinSCP.
Статейка полезная! Спасибо. Только подскажите как сделать это: «Задайте новый размер виртуального диска с помощью текстового редактора (vi или nano).» C UNIX совсем не знаком…
Поставьте Midnight Commander. Сильно проще все станет.
vi стоит вроде всегда. vi name.vmdk. После редактирования жмем : потом wq Enter.
Статья очень выручила. Спасибо большое! В закладки.
Клонирование помогает, чтобы выровнять (уменьшить) размер vmdk.
Именно так.
Добрый день.
Сразу предупрежу, что в VMware, FreePBX и в Linux в целом я снуб.
В организации пару лет назад была установлена FreePBX на VMware.
Установлена как-то странно, 2 HDD, datastore1 225Gb, Disk2 232Gb. В FreePBX все это отображается одним диском на 424Gb.
Файлы vmdk-дисков в vmware созданы практически на полный объем обоих дисков.
Занятое пространство в FreePBX около 3% (13Gb).
В связи с отсутствием свободного места на физических дисках, постоянно сыпятся предупреждения, снапшоты тоже не сделать, даже бекап через veeam проблема.
Поставили задачу уменьшить размер vmdk-дисков до 100-150Gb, один физический диск убрать вообще.
Возможно в будущем надо будет перенести данную виртуалку на Hyper-V.
Подскажите как все это проделать? Инет перерыл, но не нашел как уменьшить размер vmdk файла и оставить только один физический диск.
Заранее благодарен.
https://imagizer.imageshack.com/img923/559/ya0ZIX.jpg
https://imagizer.imageshack.com/img924/6355/9lOwBV.jpg
У вас в linux собран LVM . И по факту там данных кот наплакал.
Сначала нужно бы его пошринкать, разобрать и добиться того чтобы данные остались на одном диске.
Потом удалить диск на вторм datastore, и сделать новый меньшего размера. выполнить миграцию данных на него из linux
Ну в теории я так и представлял это 🙂
Да вот мне бы по шагам инструкцию, что за чем выполнить, с командами.
Понимаю что борзею, но помочь с линуксом мне не кому…
А если я сделаю перенос виртуалки на Hyper-V хост средствами Veeam Backup, там будет возможность уменьшения виртуального диска и кастрации до одного?
Так там же практически пошагово расписан каждый метод.
Разве нет? Говорю, как соавтор статьи 🙂
Самое простое — скjпировать вирnуалку куда-то? где ее увидит VMware Workstation
Подцепить ее к VMware WS
А потом сделать — «
Manage - Clean Up Disks...
»После этого скопировать на место, где была.
Вот это как сделать?
В смысле? Один из дисков виртуалки разбит на несколько vmdk?
Если это не загрузочный, то тут совсем просто.
1) Создать еще один диск. Тип диска Thin Provisioning.
2) Размер как те два (несколько).
3) Скопировать на него все данные.
4) Поменять букву диска на ту, что была у прежнего (если это Windows виртуалка).
5) Потом старые vmdk удалить в виртуалке (в Настройках) и затем удалить сами файлы.
Всё.
Если дист системный (загрузочный). То чуть замореченней.
1) Создать еще один диск. Тип диска Thin Provisioning.
2) Размер как те два (несколько).
3) Взять Acronis и склонгировать старый(е) на новый
4) Поменять букву диска на ту, что была у прежнего (если это Windows виртуалка). Подшаманить Boot , чтобы с него грузилось всё.
5) Потом старые vmdk удалить в виртуалке (в Настройках) и затем удалить сами файлы.
Всё 🙂
Не так все просто.
Есть 2 диска vmdk, на одном 2 раздела, один загрузочный (2Гб), второй LVM PV (198Гб), на втором диске один раздел LVM PV (220Гб). Оба раздела LVM PV в FreePBX отображаются единым диском.
При загрузке с акрониса, видно так же, по отдельности, плюс акронис ругается на ошибки на диске или неизвестный формат. Акронис 2021.
Вот чем увидеть бут диск, собранный LVM и новый диски, чтобы скопировать общий lvm и boot на новый диск?
И да, забыл сказать, виртуалка не винда, FreePBX линукс, с виндой мне было бы проще…
Ну и тем не менее. Способ с созданием нового vmdk и переносом данных на него остается в силе.
Вообще прочитал про то как собрано — я бы пересобрал виртуалку. Отделив мух от котлет. То есть загрузочный диск (раздел) от всего остального. Ну это если не лень 😀
На самом деле там все проще решается. Винда/Линух не важно. Главное, что vmdk диски должны быть Thin Provisioning. Ну и NAS поддерживать это само-собой должен. Или то, на чем у вас лежат виртуалки.
Раньше это делалось «на автомате», на с версии 6.1, если не ошибаюсь, само делаться перестало. Логику VMware не понял. Просто принял, а какие варианты? C’est la vie 😀
В ESXi CLI есть командочка такая.
Называется «отдай то, что не используешь»
Сам пользуюсь.
esxcli storage vmfs unmap --volume-label=[STORAGENAME]
Запускается раз в две недели и «поджмает» разбухшие vmdk до их реального размера.
Здравствуйте, дорогие коллеги!
Нигде не нашёл явного указания какой тип диска был использован для написания статьи, но, судя по первому скриншоту, толстый без зануления. Подскажите, пожалуйста, годится ли данная статья для тонких дисков?
Хотел бы попросить написать статью про такую ситуацию. Есть prod машина с Linux. На машине два диска 30 и 5 Гб. /var распределён по средствам lvm на два диска. Собственно диск 5 Гб и был выделен машине для увеличения через lvm каталога /var на этапе, когда /var на 30 Гб диске начал заканчиваться. Поступает запрос на клонирование этой машины с требованием убрать второй диск, т.к. режим эксплуатации машины не будет подразумевать разрастания/var. Мало того, заказчик в лице коллеги из отдела эксплуатации данной VM, просит уменьшить основной диск с 30 Гб до 20 Гб. Свободного места везде кроме /var много, а содержимое самого загруженного каталога внутри /var заказчик разрешает удалить (это кстати /var/lib/mysql/kcdrdb/*). Таким образом следующие вводные: Clone из боевой включённой VM, два тонких диска, файловая система внутри lvm xfs. Я вижу это так: загрузка с Live CD или rescue, на размонтированном состоянии pvmove с диска 5 Gb, вывод диска из эксплуатации lvm, подравнивание разделов lvm для того, чтобы они могли разместиться на 20 Гб, забивание неиспользуемого пространства тонкого диска нулями, vmkfstools -K | — punchzero или Storage vMotion в другой Datastore, как указано здесь https://kb.vmware.com/s/article/1002019. Очень замороченная процедура, совсем не в духе VMware. Если есть другой путь, то буду благодарен за подсказку.
И да, и … как ни странно, может быть нет.
Сработать точно сработает. А вот дальше все зависит от вашего хранилища. Умеет ли его ОС «забрать освободившееся место». Сам столкнулся с таким «эффектом».
У меня HP 3PAR как основной Data Store. И что-то там HP и VMware «не поделили» в прошлом, но начиная с версии 6, если не ошибаюсь, esxi перестал сам отдавать (помечать как неиспользуемое) высвободившийся объем поджатого thin-prisioning диска.
Для себя я решил это просто — запускаю скрипт, который заставляет esxi это делать, а 3PAR, в свою очередь, «забирает» эти объемы. Диски «дышат», но место не кончается с катастрофической скоростью, как было до того.
Поддержка HP Entrprise помочь не смогла, но когда я им рассказал о найденном «способе» они где-то, в старых доках эту рекомендацию.
Вот такая команда для esxi —
esxcli storage vmfs unmap --volume-label=[STORAGE_NAME]
Попробуйте, может и вам подойдет.
Доброго здоровья, господа!
На хосте мало места, поэтому клонировал диск на nfs-шару — всё мыштяк (новый размер)!
Удаляю исходник, клонирую обратно, для проверки смотрю конфу диска — после размера стоит VNFS!
Повторяю клонирование с добавлением -d eagerzeroedthick — Failed to clone object parameters
Прошу помощи!!!
Пардон — старость (зрение) и маленький экран (15″) по удалёнке сыграли со мной «злую» шутку. Подключил вторым большой экран (22″) — стало лучше, и , вроде как, VMFS и VNFS я перепутал.
Но всё равно, повторил процедуру и туда и обратно с указанием типа диска — всё мыштяк!
Спасибо!
Не получилось сделать shrink в Windows на необходимый размер: свободное место на D показывает, что 170Гб, а Shrink сказал, что может только на 9Гб уменьшить. Думаю из-за того, что диск дедуплицирован.
Возможно ли дедуплицированный диск уменьшить?