Как безопасно и эффективно уменьшить размер файлов VMDK в VMware?

Виртуальные диски VMware со временем могут занимать слишком много места. Узнайте, почему растут файлы VMDK и как безопасно уменьшить их размер, освободить хранилище и сохранить работоспособность виртуальных машин.

download-icon
Скачайте Бесплатно
Для ВМ, ОС, БД, файлов, NAS и т.д.
mavis-yang

Обновлено Mavis Yang 2026/09/16

Оглавление
  • Что такое файлы VMDK?

  • Как уменьшить раздел диска в гостевой ОС?

  • Подготовка диска: заполнение свободного пространства нулями

  • Способ 1. Уменьшение VMDK путём ручного редактирования файла-дескриптора

  • Способ 2. Автоматизация уменьшения VMDK с помощью PowerShell и PowerCLI

  • Способ 3. Компактизация VMDK с помощью vmware-vdiskmanager в Workstation или Fusion

  • Способ 4. Уменьшение VMDK с помощью VMware vCenter Converter Standalone

  • Резервное копирование ВМ VMware с помощью Vinchin

  • Часто задаваемые вопросы об уменьшении VMDK

  • Заключение

Виртуальные машины лежат в основе большинства современных ИТ-сред. Но что делать, если виртуальный диск VMDK стал слишком большим? В отличие от физического диска, простое удаление файлов в гостевой ОС не приводит к автоматическому освобождению места на уровне инфраструктуры. Уменьшение VMDK — многоэтапная операция, которая выполняется как внутри виртуальной машины, так и на платформе гипервизора. В этой статье рассматривается устройство файлов VMDK, безопасное уменьшение разделов в гостевой ОС, подготовка диска путём заполнения свободного пространства нулями и поддерживаемые ручные и автоматизированные способы уменьшения размера VMDK.

Что такое файлы VMDK?

Virtual Machine Disk (VMDK) — формат виртуальных жёстких дисков VMware, который используется в таких продуктах, как ESXi и Workstation. Это контейнер, в котором хранятся данные, разделы и файловые системы виртуальной машины, подобно тому как физический диск хранит содержимое реального сервера.

Каждый виртуальный диск состоит как минимум из двух файлов:

  • Файл-дескриптор (vmname.vmdk) содержит метаданные о геометрии и размере диска, типе выделения пространства — тонком или толстом, связях между родительскими и дочерними дисками для снапшотов и других параметрах.

  • Плоский файл данных (vmname-flat.vmdk) хранит необработанные блоки данных, то есть фактическое содержимое, записанное операционной системой ВМ.

Диски с тонким выделением пространства используют внутренние таблицы блоков, называемые grain tables, чтобы отслеживать занятые, пустые и обнулённые блоки. Для дисков с толстым выделением всё пространство резервируется заранее независимо от фактического использования.

Даже при удалении файлов внутри гостевой ОС пространство тонкого диска не сразу возвращается хранилищу данных. Только гостевая система знает, какие блоки больше не используются. С точки зрения VMware эти блоки могут по-прежнему содержать действительные данные, пока они не будут явно помечены как свободные.

Как уменьшить раздел диска в гостевой ОС?

Перед изменением самого файла VMDK сначала уменьшите разделы внутри гостевой операционной системы. Это предотвращает обрезание используемых данных при последующем изменении диска на уровне хранилища.

Уменьшение раздела показывает операционной системе, какая область диска больше не нужна и может быть безопасно удалена на следующем этапе.

Перед началом работы:

  • Создайте полную резервную копию виртуальной машины.

  • Проверьте выравнивание разделов командой fdisk -l в Linux или wmic partition get BlockSize, StartingOffset в Windows.

  • По возможности выполните дефрагментацию томов, особенно в Windows, чтобы переместить неперемещаемые файлы от конца раздела.

  • Для корневых разделов Linux и активно используемых томов запланируйте простой, поскольку может потребоваться загрузка с Live-носителя.

Для гостевых систем Windows

Используйте встроенную оснастку Disk Management:

1. Войдите в Windows.

2. Щёлкните правой кнопкой мыши This PC или My Computer, выберите Manage, затем откройте Disk Management.

3. Щёлкните правой кнопкой мыши нужный раздел и выберите Shrink Volume.

4. Укажите объём, на который требуется уменьшить раздел. Максимально доступное значение зависит от расположения неперемещаемых файлов, например pagefile.sys.

5. Подтвердите изменения и дождитесь завершения операции.

Если функция Shrink Volume предлагает меньше пространства, чем ожидалось, из-за неперемещаемых файлов:

  • Запустите командную строку от имени администратора и выполните defrag /X /H C:.

  • После дефрагментации повторите попытку уменьшения раздела.

Для гостевых систем Linux

В Linux выбор инструмента зависит от типа файловой системы:

1. Если требуется уменьшить корневой или смонтированный раздел, загрузитесь с GParted Live CD/ISO.

2. Выберите нужный раздел и нажмите Resize/Move.

3. Измените размер с помощью ползунка или введите значение вручную, затем примените изменения.

4. Для файловых систем семейства ext после изменения раздела в GParted или parted выполните resize2fs /dev/sdXN, где X и N обозначают устройство и номер раздела.

5. После завершения перезагрузите систему в обычном режиме.

Файловая система XFS не поддерживает штатное уменьшение. Необходимо создать резервную копию данных, заново создать файловую систему меньшего размера и восстановить данные.

После успешного уменьшения в конце диска должно появиться нераспределённое пространство. Это обязательное условие для последующего уменьшения фактического размера VMDK.

Подготовка диска: заполнение свободного пространства нулями

Перед компактизацией диска с тонким выделением или использованием некоторых инструментов уменьшения свободное пространство необходимо заполнить нулями. Так VMware сможет определить неиспользуемые блоки и освободить их во время клонирования или компактизации.

При удалении файлов операционная система лишь отмечает их как удалённые, но не перезаписывает соответствующие сектора нулями. Поэтому гипервизор не может отличить свободные блоки от занятых без использования специальных инструментов обнуления.

Заполнение свободного пространства нулями в Windows

Доступны два основных варианта.

1. Использование SDelete из набора Microsoft Sysinternals:

  • Загрузите SDelete.exe.

  • Откройте командную строку от имени администратора.

  • Выполните команду:

sdelete.exe -z C:

Команда записывает нули во все свободные сектора диска C:.

2. В Windows 8 и более новых версиях:

  • Запустите PowerShell от имени администратора.

  • Выполните команду:

Optimize-Volume -DriveLetter C -ReTrim -Verbose

Эта команда отправляет подсказки TRIM, но не перезаписывает блоки нулями. Наилучший результат достигается с хранилищами на базе SSD, которые поддерживают UNMAP/TRIM по всей цепочке.

Заполнение свободного пространства нулями в Linux

Для файловых систем семейства ext используйте следующие варианты.

1. Для отключённого или размонтированного раздела:

zerofree /dev/sdXN

2. Для подключённого раздела, что не рекомендуется в производственной среде:

dd if=/dev/zero of=zero.fill bs=1M || true && sync && rm zero.fill

Команда создаёт большой временный файл, заполненный нулями, пока не закончится свободное место, а затем удаляет его. В результате неиспользуемые сектора остаются обнулёнными.

Перед выполнением этих команд убедитесь, что на диске достаточно рабочего пространства.

После уменьшения разделов и обнуления свободного пространства внутри гостевой ОС можно переходить к уменьшению или компактизации самого файла VMDK на уровне инфраструктуры.

Графический интерфейс VMware vSphere Client позволяет увеличивать виртуальные диски, но не уменьшать их. Для уменьшения VMDK необходимо использовать один из описанных ниже ручных или автоматизированных способов.

Перед любыми изменениями обязательно создайте резервную копию ВМ и проверьте возможность восстановления.

Способ 1. Уменьшение VMDK путём ручного редактирования файла-дескриптора

Этот способ обеспечивает максимальный контроль, но сопряжён с высоким риском. Используйте его только при наличии опыта работы с ESXi Shell.

В каждом файле-дескрипторе есть строка RW, которая задаёт общее количество секторов размером 512 байт:

RW <sector_count> <type> "<flat_file>"

Выполните следующие действия:

1. Полностью выключите виртуальную машину и убедитесь, что у неё нет активных снапшотов.

2. Подключитесь к хосту ESXi по SSH и перейдите в папку виртуальной машины в соответствующем хранилище данных:

cd /vmfs/volumes/<datastore>/<VM_folder>

3. Создайте резервные копии файла-дескриптора и плоского файла данных:

cp vmname.vmdk backup_vmname.vmdk
cp vmname-flat.vmdk backup_vmname-flat.vmdk

4. Откройте дескриптор в vi, nano или другом редакторе и найдите строку RW:

vi vmname.vmdk
# Найдите строку RW в начале файла
# Новое число секторов = требуемый размер в байтах / 512
# Пример для 20 ГБ: 20*1024*1024*1024/512 = 41943040 секторов
# Замените старое значение и сохраните изменения

5. Чтобы физически освободить неиспользуемое пространство, клонируйте диск с помощью vmkfstools. Если исходный диск имел тонкое выделение, будут скопированы только используемые и корректно обнулённые блоки:

vmkfstools -i vmname.vmdk -d thin vmname_new.vmdk

6. Через веб-интерфейс vCenter или ESXi зарегистрируйте клонированную ВМ с помощью команды Register VM, указав обновлённый файл конфигурации .vmx.

7. Запустите ВМ и проверьте её работу, размер диска и доступность данных в гостевой системе.

Ошибка в расчёте количества секторов может повредить всю виртуальную машину. Сначала обязательно протестируйте процедуру вне производственной среды.

Способ 2. Автоматизация уменьшения VMDK с помощью PowerShell и PowerCLI

PowerCLI позволяет автоматизировать операции, что особенно полезно в крупных средах, где одинаковые задачи выполняются многократно.

Предварительные требования:

  • Установите последнюю версию PowerCLI.

  • Убедитесь, что WinRM включён и доступен между рабочей станцией управления и гостевыми системами.

  • Установите VMware Tools в каждой гостевой системе для корректного перевода приложений в согласованное состояние при создании снапшотов и резервных копий.

Типовой рабочий процесс:

1. Уменьшите разделы гостевой ОС с помощью сценария, например удалённо вызовите стандартные командлеты Windows:

Invoke-Command -ComputerName $VMName -ScriptBlock { Resize-Partition ... }

2. Выключите целевую ВМ и убедитесь, что активных снапшотов нет.

3. Сценарий подключается через Connect-VIServer, создаёт резервные копии дескрипторов, изменяет значения RW и запускает миграцию или клонирование:

Set-HardDisk -HardDisk $disk -CapacityGB $newSize -Confirm:$false
# Либо отредактируйте дескриптор и вызовите Move-HardDisk

4. Повторная регистрация, выключение и запуск ВМ выполняются программно.

Никогда не храните пароли в открытом виде. По возможности используйте объекты SecureString.

Перед запуском стороннего сценария внимательно проверьте его код и безопасность.

Способ 3. Компактизация VMDK с помощью vmware-vdiskmanager в Workstation или Fusion

Для лабораторных, тестовых и разрабатываемых ВМ, работающих в VMware Workstation или Fusion, можно использовать встроенную консольную утилиту vmware-vdiskmanager.

Этот инструмент недоступен и не поддерживается на хостах ESXi/vSphere.

Выполните следующие действия:

1. Удалите ненужные файлы в гостевой системе и очистите корзину.

2. Заполните свободное пространство нулями, как описано выше.

3. Выключите целевую виртуальную машину.

4. Выполните на хосте команду:

vmware-vdiskmanager.exe -k "path_to_vmdk.vmdk"

Параметр -k освобождает блоки, заполненные нулями, и уменьшает физический объём образа.

В версиях инструмента для Linux и macOS эквивалентный параметр может отсутствовать. В таком случае используйте клонирование с преобразованием диска в тонкий формат.

Способ 4. Уменьшение VMDK с помощью VMware vCenter Converter Standalone

Для администраторов, предпочитающих графический интерфейс, VMware vCenter Converter Standalone может быть более удобным вариантом, особенно при переносе производственных нагрузок.

Converter выполняет миграцию V2V и создаёт новую копию виртуальной машины с размерами томов, указанными пользователем.

Важные моменты:

  • Требуется достаточно свободного места для одновременного хранения исходного и целевого образов.

  • Перед преобразованием следует отключить CBT — Changed Block Tracking — для исходной ВМ.

  • Если клон запускается в той же подсети или среде, после миграции могут возникнуть конфликты MAC- и IP-адресов.

Порядок действий:

1. Загрузите и установите Converter Standalone на рабочую станцию управления.

2. Запустите приложение и подключитесь к исходному и целевому хостам.

3. Выберите исходную ВМ и укажите целевое расположение или пул хранения.

4. В разделе Data To Copy > Edit > Select Volumes To Copy задайте новый уменьшенный размер каждого нужного тома.

5. Запустите преобразование и контролируйте ход задания и журналы.

6. После завершения запустите новую ВМ и тщательно проверьте приложения и целостность данных.

7. Удаляйте исходную ВМ только после успешной проверки новой копии.

Резервное копирование ВМ VMware с помощью Vinchin

Перед рискованными операциями, включая уменьшение VMDK, необходимо создать надёжную резервную копию. Vinchin Backup & Recovery — корпоративное решение, предназначенное прежде всего для защиты VMware, а также Hyper-V, Proxmox VE, oVirt/RHV/OLVM, XCP-ng/XenServer, OpenStack, ZStack и более чем 15 других популярных платформ.

Vinchin предоставляет комплексные средства защиты: бесконечное инкрементное резервное копирование для длительного хранения без повторных полных копий; расширенную дедупликацию и сжатие данных для сокращения занимаемого пространства; кроссплатформенную миграцию V2V; гранулярное восстановление отдельных файлов и папок; а также задания резервного копирования по расписанию. Все функции управляются через единую веб-консоль.

Резервная копия виртуальной машины VMware создаётся за четыре шага:

1. Выберите виртуальные машины VMware

Выбор виртуальных машин VMware

2. Выберите хранилище резервных копий

Выбор хранилища резервных копий

3. Настройте стратегию резервного копирования

Настройка стратегии резервного копирования

4. Отправьте задание

Отправка задания резервного копирования

Vinchin предлагает полнофункциональную 60-дневную бесплатную пробную версию, чтобы вы могли проверить решение в своей инфраструктуре.

Часто задаваемые вопросы об уменьшении VMDK

Вопрос 1. Можно ли уменьшить VMDK, не выключая виртуальную машину?

Нет. Перед любой процедурой уменьшения необходимо полностью выключить ВМ, иначе существует риск повреждения данных.

Вопрос 2. Что произойдёт, если не уменьшить раздел в гостевой ОС?

Это может привести к серьёзной потере данных или невозможности загрузки системы, поскольку при изменении размера важные структуры могут быть неожиданно обрезаны.

Вопрос 3. Как определить, использует VMDK тонкое или толстое выделение пространства?

В vSphere Client выберите нужную ВМ, нажмите EDIT SETTINGS, раскройте раздел HARD DISK и проверьте поле PROVISIONING TYPE.

Вопрос 4. Можно ли уменьшить толстый диск с отложенным обнулением?

Сначала его необходимо преобразовать в тонкий формат с помощью инструмента клонирования, например vmkfstools, а затем применить стандартный способ компактизации.

Вопрос 5. Почему уменьшенный VMDK по-прежнему отображается с исходным размером в браузере хранилища данных?

Проверьте поддержку UNMAP/TRIM по всей цепочке от гипервизора до массива хранения. При необходимости вручную запустите освобождение пространства командой esxcli storage vmfs unmap.

Заключение

Уменьшение VMDK требует тщательной подготовки: сначала необходимо уменьшить разделы в гостевой ОС, затем обнулить свободное пространство и только после этого безопасно сократить логический или физический размер виртуального диска. Надёжная проверенная резервная копия необходима на каждом этапе. Vinchin Backup & Recovery помогает защитить виртуальные машины VMware, чтобы оптимизацию хранилища можно было выполнять с меньшим риском даже в сложной корпоративной среде.

поделиться:

Категории: Виртуальная машина