В этой статье мы рассмотрим, как уменьшить размер диска (vmdk) виртуальной машины в VMware ESXi. Уменьшить размер виртуального диска VMware из графического веб-интерфейса vSphere Client нельзя (можно только увеличить диск ВМ VMware). При попытке указать меньший размер диска ВМ, появляется ошибка:
Enter a disk size which is larger than its original capacity
.
Перед тем, как уменьшить размера виртуального диска на хосте VMWare ESXi необходимо:
- Удалить все снапшоты виртуальной машины;
- Создать полную резервную копию виртуальной машины, или предварительно сделайте копию vmdk и flat файла виртуального диска, который вы хотите уменьшить. Выполните следующие команды в конолси ESXi:
cp vmname.vmdk backup_vmname.vmdk
cp vmname-flat.vmdk backup_vmname-flat.vmdk
Процедура уменьшения размера виртуального диска состоит из двух этапов:
- Уменьшение раздела внутри гостевой ОС;
- Уменьшение размера VMDK файла виртуальной машины VMware на VMFS (NFS) хранилище.
Уменьшение размера раздела виртуального диска в гостевой ОС
Сначала нужно уменьшить размер раздела диска внутри гостевой ОС.
Если в ВМ установлена гостевая Windows:
- Откройте консоль управления дисками (
diskmgmt.msc
) - В нашем случае справа от раздела, который мы хотим уменьшить, находится раздел восстановления среды WinRE (
Recovery Partition
). Для корректного выполнения процедуры уменьшения виртуального диска справа от раздела, который вы хотите уменьшить не должно быть других разделов. Вам нужно или перенести образ восстановления winre.wim с отдельного раздела на системный, или переместить раздел recovery в начала диска (оба варианта подробно описаны в статье Не могу расширить диск в Windows из-за раздела восстановления). - Теперь вы можете уменьшить размер основного раздела (в современных версиях Windows вы можете уменьшить размер диска без перезагрузки, в старых версиях придется использовать утилиту
sdelete
). Щелкните по разделу и выберите Shrink Volume. - Допустим, вы хотите уменьшить размер диска ВМ на 40 Гб. Укажите значение 40960 Мб (40 Гб x 1024) в поле Enter the amount of space to shrink in MB и нажмите Shrink;
- После завершения операции уменьшения размера раздела, справа от вашего основного раздела останется 40 Гб неразмеченного (
Unallocated
) пространства.
Для Linux ВМ, если вам нужно уменьшить размер корневого раздела, нужно загрузиться ВМ с LiveCD GParted (GNOME Partition Editor). Уменьшите размеры разделов из графического интерфейса GParted через меню Resize/Move. Если нужно, переместите разделы. Чтобы применить изменения, выберите Edit -> Apply all operations. Утилита изменит размеры разделов и уменьшит файловую систему через Rezise2fs.
Загрузите гостевую ВМ с Linux и проверьте, что все работает корректно.
Уменьшить размер VMDK файла виртуальной машины VMware
Теперь нужно уменьшить размера VMDK файла на файловой системе VMware VMFS.
- Выключите ВМ;
- Подключитесь по SSH к консоли гипервизора ESXi, на котором зарегистрирована ВМ (можно воспользоваться putty или встроенным ssh клиентом Windows);
- Перейдите в каталог, в котором хранится vmdk файл ВМ (путь к виртуальному диску узнать в свойствах виртуального диска в веб интерфейсе клиента vSphere):
cd /vmfs/volumes/datastore/test-VM
- Выведите содержимое конфигурационного файла виртуального с помощью команды cat:
# cat test_vm_3.vmdk
Размер vmdk диска задается в секции #Extent description (после символов RW). В данном случае указана цифра 167772160 (80 Гб *1024*1024*1024 / 512) - Я хочу уменьшить виртуального vmdk диска на 40 Гб. Это значит, что в секции Extent description нужно указать значение: 83886080. Это значение получилось следующим образом:
167772160
(текущий размер диска)- 83886080
(40 Гб*1024*1024*1024 / 512) - Отредактируйте конфигурационный файл диска с помощью vi
# vi test_vm_3.vmdk
- В редакторе vi с помощью стрелки вниз перейдите на строку с размером диска и нажмите
i
(для перехода в режим редактирования). Укажите новый размер виртуального диска. НажмитеESC
, чтобы выйти из режима редактирования и:wq
-> Enter чтобы сохранить изменения; - Осталось смигрировать (Storage VMotion) виртуальную машину на другое хранилище (datastore). После перемещения файлов виртуальной машины в ее свойствах отобразится новый размер виртуального диска;
Затем перейдите в раздел Storage, найдите VMFS/NFS хранилище, где находится ВМ -> Datastore Browser, найдите каталог ВМ, щёлкните по VMX файлу и выберите Register.
Либо можно сделать копию диска с помощью команды
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
Убедитесь, что в свойствах ВМ теперь отображается новый размер виртуального диска;
Запустите гостевую ОС и проверьте, что неразмеченная область диска пропала, а размер диска уменьшился.
Уменьшаем размера виртуального диска с помощью VMware vCenter Converter Standalone
Для уменьшения размера виртуальных дисков ВМ на VMWare можно воспользоваться бесплатным графическим конвертором VMware vCenter Converter Standalone. Эта утилита позволяет скопировать ВМ и при указать размер нового диска меньше, чем исходный (на гостевой файловой системе должно быть свободное место).
Недостаток:
- Конвертация V2V выполняется медленно;
- На датасторе должно быть достаточно места для размещения новой ВМ;
- У новой ВМ будет новый MAC адрес.
Плюсы:
- Простой графический интерфейс
- Создается точная копия VM;
- Исходная ВМ не поломается при некорректных действиях.
Запустите VMware Converter и укажите адрес 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Гб уменьшить. Думаю из-за того, что диск дедуплицирован.
Возможно ли дедуплицированный диск уменьшить?
А если сделать только первую часть ( shrink в ОС), а вторую (редактировать файл VMware), то диск thin по-прежнему со временем будет увеличиваться размер vmdk-файла?
Я думаю что в таком сценарии thin диск не вырастет больше, чем размечено физически диска в гостевой ОС.
Спасибо.
В части:
Перерегистрации недостаточно, исправит только визуальное отображение размера диска, но не изменяет реально размеры файла ВМ на СХД. А (вероятно, из-за несоответствия размеров диска и значения по данным VMWare) при попытке последующей попытки миграции ВМ на другую СХД во включенном состоянии (Storage vMotion) Вы столкнетесь с ошибкой вида «Failed waiting for data. Error 195887250. Migration determined a failure by the VMX» и, если эти действия были разнесены во времени, будете долго думать… Решением будет все-таки проведение миграции на другую СХД в выключенном состоянии ВМ. Файл диска ВМ на СХД будет приведен к нужному размеру, и далее никаких проблем при операциях Storage vMotion быть не должно.
Спасибо за инфу!
А можно ли также уменьшить в PVE 8.1?
Столкнулся что не могу штатными средствами сжать диск ВМ ubuntu, форматированный в ext4 в VMWare
Решение простое, в гостевой ОС надо было выполнить следующее:
cd /usr/bin
sudo ./vmware-toolbox-cmd disk list
например, выйдет:
/
/boot
следующая команда:
sudo ./vmware-toolbox-cmd disk shrink /