Как сжать динамический VDI‑файл виртуального диска VirtualBox
Быстрая навигация
- Шаг 1: Убедитесь, что у вас динамический диск
- Шаг 2: Запишите нули в свободное место внутри виртуальной машины
- Шаг 3: Найдите команду VBoxManage на хосте
- Шаг 4: Найдите путь к VDI-файлу, который хотите сжать
- Шаг 5: Выполните операцию сжатия
- Также рассмотрите удаление снимков снапшотов

Важно: описанная процедура подходит только для динамически выделяемых (dynamically allocated) дисков. Фиксированные диски (fixed size) всегда занимают указанное место и не уменьшаются до тех пор, пока вы их не пересоздадите или не конвертируете в динамические.
Кому это нужно и когда это работает
Цель — вернуть место на диске хоста, которое ранее занимал виртуальный диск, но было освобождено внутри гостевой ОС. Это сработает, если:
- Диск был динамическим и реально вырос выше базового размера; и
- Вы удалили файлы внутри гостя, а затем перезаписали свободное пространство нулями.
Не сработает если:
- Вы только что создали пустой динамический диск — он уже минимален; или
- Данные удалены, но свободное пространство не было очищено/перезаписано нулями; или
- Существуют активные цепочки снапшотов, блокирующие объединение данных.
Рекомендуемая последовательность действий всегда: сделать бэкап VDI перед изменениями, особенно для важных виртуальных машин.
Шаг 1: Убедитесь, что диск динамический
Этот процесс работает только с динамическими дисками (Dynamically allocated). Динамический диск имеет максимальный размер, но реально занимает только столько места, сколько данных записано. Фиксированный диск сразу занимает весь выделенный объём.
Как проверить в VirtualBox (гостевой список): откройте VirtualBox, правой кнопкой мыши кликните виртуальную машину → “Настройки” → вкладка “Носители” (Storage). Выберите диск и посмотрите “Детали” — там будет указано “Dynamically allocated storage” для динамического диска.

Если у вас фиксированный диск, сначала можно его конвертировать в динамический (см. дополнительные разделы далее), но всегда делайте резервные копии перед преобразованием.
Шаг 2: Перезапишите свободное место нулями внутри гостевой ОС
Общая идея: после удаления файлов внутри гостевой ОС пространство остаётся помеченным как свободное, но данные всё ещё содержатся в VDI. Если вы перезапишете свободное пространство нулями, виртуальный диск будет содержать большие области однотипных байтов (0x00), и инструмент сжатия сможет убрать их.
Перед началом:
- Удалите ненужные файлы внутри гостя и очистите корзину/Trash.
- Осуществите дефрагментацию файловой системы в Windows для плотной компоновки данных перед затиранием нулями (рекомендуется для NTFS/старых FS).
- Сделайте снимок или копию VDI на всякий случай.
Windows в гости
- Запустите виртуальную машину с Windows.
- Откройте дефрагментатор диска: в меню Пуск наберите “Defragment” и запустите “Defragment and Optimize Drives”. Выберите диск и выполните дефрагментацию.

- Скачайте утилиту SDelete от Microsoft Sysinternals: распакуйте sdelete.exe в папку, например Downloads.

- Откройте Командную строку (Cmd) от имени администратора.

- Перейдите в папку с sdelete.exe:
cd "C:\Users\ваш_пользователь\Downloads"- Выполните команду, чтобы перезаписать нулями всё свободное пространство на диске C:
sdelete.exe c: -zПараметр -z специально предназначен для оптимизации виртуальных дисков; инструмент спросит подтверждение лицензионного соглашения.
- Дождитесь завершения и корректно завершите работу гостя (Shut Down).

Linux в гости
В Linux обычно нет необходимости дефрагментировать, но нужно перезаписать свободное пространство нулями. Инструмент zerofree удобен для ext2/3/4. Для других файловых систем используйте эквивалентные утилиты (fstrim работает на SSD, но для VDI нужно заполнение нулями).
- Установите zerofree в виртуальной машине:
sudo apt update
sudo apt install zerofree- Для корневого раздела вы не можете выполнять zerofree, пока раздел смонтирован. Перезагрузитесь в режим восстановления (recovery mode) или загрузитесь с live‑CD/ISO, где корневой раздел не смонтирован как rw.
Пример для Ubuntu: при загрузке нажимайте Esc для показа меню Grub → Advanced options for Ubuntu → выберите режим (recovery mode) → выберите root для перехода в shell.

- Найдите нужный раздел командой df:
df -hВ примере это /dev/sda1.

- Выполните zerofree на не смонтированном разделе (замените /dev/sda1 на ваш устройственный путь):
zerofree -v /dev/sda1- После завершения выполните выключение:
halt- Закройте окно виртуальной машины и выберите Power off the virtual machine в менеджере VirtualBox.
Important: если вы используете файловую систему, отличную от ext2/3/4, проверьте рекомендации для неё. Для btrfs, XFS, ZFS и других существуют свои средства очистки или специфические ограничения.
Шаг 3: Найдите VBoxManage на хосте
Дальнейшие команды выполняются на хостовой машине (той, где установлен VirtualBox).
- На Windows VBoxManage.exe обычно находится в C:\Program Files\Oracle\VirtualBox
- На macOS утилита доступна как /usr/local/bin/VBoxManage или встроена в пакет приложений VirtualBox
- На Linux выполните vboxmanage или VBoxManage в терминале (обычно доступно в PATH)
На Windows откройте Командную строку и перейдите в папку VirtualBox:
cd "C:\Program Files\Oracle\VirtualBox"
Если вы используете macOS или Linux как хост, просто откройте Terminal и выполняйте vboxmanage напрямую, например:
VBoxManage list hddsШаг 4: Найдите путь к VDI-файлу, который хотите сжать
Чтобы увидеть список всех виртуальных дисков и их путей, выполните на хосте:
VBoxManage.exe list hddsИщите в выводе строку с “Location:” или полным путём к файлу VDI. Пример вывода показывает путь вроде:
C:\Users\chris\VirtualBox VMs\Windows 7\Windows 7.vdi

Запомните/скопируйте этот путь — он понадобится для команды сжатия.
Шаг 5: Выполните сжатие диска
На хосте выполните команду modifymedium с параметром –compact. Обязательно укажите правильный путь к файлу VDI в кавычках, если в нём есть пробелы:
VBoxManage.exe modifymedium disk "C:\path\to\disk.vdi" --compactПример:
VBoxManage.exe modifymedium disk "C:\Users\chris\VirtualBox VMs\Windows 7\Windows 7.vdi" --compactНа macOS/Linux, где команда называется VBoxManage (без .exe), аналогичная команда:
VBoxManage modifymedium disk "/Users/ваш_пользователь/VirtualBox VMs/VM/VM.vdi" --compactПосле выполнения VirtualBox выполнит операцию сжатия. Сразу после этого виртуальную машину можно запускать как обычно.
О чём следует помнить
- Сжатие освобождает место на хосте только если внутри гостя было очищено и занулено свободное пространство.
- Экономия места равна приблизительно объёму очищённых областей, но итог зависит от фрагментации и особенностей файловых систем.
Также рассмотрите удаление снимков снапшотов
Снапшоты (Snapshots) хранят состояние виртуальной машины и могут занимать значительный объём. Чтобы освободить место:
- В VirtualBox выберите виртуальную машину в списке и нажмите кнопку “Snapshots” на панели.
- Просмотрите список снимков. Если какие‑то не нужны, правый клик → “Delete Snapshot”.
Удаление снимка объединяет его данные в основной диск и может занять время. Перед удалением снимков настоятельно рекомендуется сделать бэкап.

Типичные проблемы и способы их решения
- “Команда не найдена” при запуске VBoxManage
- На Windows: убедитесь, что вы в каталоге установки VirtualBox или добавили этот каталог в PATH. Попробуйте явно указать полный путь.
- На macOS/Linux: проверьте, установлена ли VirtualBox и доступна ли утилита VBoxManage (which VBoxManage).
- Сжатие прошло, но файл VDI не уменьшился
- Проверьте, действительно ли внутри гостя было занулено свободное пространство. SDelete/zerofree нужно запускать правильно и завершать гость корректно.
- Проверьте, нет ли активных снапшотов — они могут удерживать данные и препятствовать освобождению места.
- Для некоторых файловых систем или шифрования данные не будут преобразованы в однородные нули, и сжатие не даст эффекта.
- Ошибка доступа при выполнении modifymedium
- Убедитесь, что виртуальная машина выключена и виртуальные диски не подключены к запущенному процессу.
- Проверьте права доступа к файлу VDI (на Windows: запустите CMD от администратора).
- Очень медленное выполнение операции
- Сжатие может занять существенное время в зависимости от размера диска и скорости диска хоста. Запланируйте операцию на момент низкой нагрузки.
Дополнительные подходы и альтернативы
- Конвертация фиксированного диска в динамический: можно использовать VBoxManage clonehd с параметром –variant Standard для создания динамического образа меньшего размера, затем заменить старый диск. Всегда делайте копию перед такими операциями.
Пример создания копии:
VBoxManage clonehd "C:\path\old_fixed.vdi" "C:\path\new_dynamic.vdi" --variant StandardИспользование внешних инструментов для очистки внутри гостя: для Linux можно временно создать файл-наполнитель, заполнить его нулями (dd if=/dev/zero of=/bigfile bs=1M) до исчерпания места, затем удалить файл. Однако этот метод хуже, чем zerofree, для некоторых FS и может привести к большим логам.
Для SSD в госте используйте TRIM/fstrim, но помните: TRIM в файловой системе гостя не всегда приводит к освобождению места в VDI без дополнительных операций.
Ментальные модели и эвристики
- “Затирай — потом сжимай”: сначала добейтесь однородного, предсказуемого свободного пространства внутри гостя, затем запускайте –compact на хосте.
- “Снапшоты блокируют” — если есть цепочка снапшотов, данные могут существовать в разных местах; удаление снапшота и сжатие — отдельные операции.
- “Бэкап прежде всего” — любые операции модификации образов могут завершиться ошибкой; держите резервные копии.
Порядок действий для типичных ролей
Роль: Домашний пользователь
- Сделать резервную копию VDI (скопировать файл в другое место или внешний диск).
- Удалить ненужные файлы в госте, очистить корзину.
- Выполнить SDelete/zerofree.
- На хосте выполнить VBoxManage modifymedium –compact.
Роль: Системный администратор
- Проверить наличие снапшотов и политики резервного копирования.
- Планировать окно обслуживания (операция длительная).
- Вставить проверку целостности после сжатия и убедиться, что VM загружается.
Роль: Девопс/инфраструктура
- Автоматизировать проверку размера VDI и запуск сжатия по расписанию для тестовых сред.
- Отслеживать SLI: время простоя, длительность операции, восстановление из бэкапа.
Критерии приёмки
- Виртуальная машина загружается после сжатия.
- Размер VDI на хосте уменьшился по сравнению с исходным.
- На гостевой ОС доступны все требуемые данные и нет повреждений файловой системы.
Шаблон простого чеклиста перед началом
- Сделана копия VDI или снапшот (если критично)
- Удалены ненужные файлы в госте
- Очистили корзину/Trash
- Выполнен SDelete или zerofree
- Гость корректно завершён
- Выполнена команда VBoxManage modifymedium –compact
- VM запущена и проверена на работоспособность
Совместимость и примечания по версиям
- Команда VBoxManage присутствует в VirtualBox начиная с ранних версий; синтаксис modifymedium disk –compact стабилен, но путь и доступы зависят от ОС хоста.
- На macOS иногда утилита устанавливается внутри пакета приложения VirtualBox.app; используйте полный путь при необходимости.
- Если используется формат VDI, описанная команда работает. Для VHD/VMDK используйте соответствующие возможности конвертации/оптимизации VirtualBox.
Безопасность и приватность
- Утилиты sdelete и zerofree затирают данные в свободном пространстве; это полезно для приватности при передаче образов.
- Не передавайте VDI без очистки, если в нём были конфиденциальные данные. SDelete с подходящими параметрами может быть частью процедуры безопасного удаления.
- Всегда проверяйте лицензионные условия сторонних утилит (SDelete — Microsoft Sysinternals).
Тесты и подтверждение результата
Простая методика тестирования:
- До операции: зафиксируйте размер VDI и свободное место в госте.
- Выполните удаление данных и SDelete/zerofree.
- Выполните compact и сравните размеры VDI.
- Запустите VM и выполните контрольный запуск наиболее важных сервисов.
Приёмочный тест: если до удаления было занято 30 ГБ, вы удалили 10 ГБ, и после zapping и compact файл уменьшился на ~10 ГБ, тест считается пройденным.
Часто встречающиеся вопросы
Q: Можно ли сжать диск, пока виртуальная машина работает? A: Нет. Диск должен быть отключён (VM должна быть выключена), иначе операция не выполнится.
Q: Сумеет ли процедура вернуть 100% удалённых байтов? A: Не всегда. Итог зависит от фрагментации, наличия снапшотов, особенностей файловой системы и шифрования.
Q: Подходит ли это для VMDK/VHD? A: Принцип тот же: нужно занулить свободное пространство, но команды для оптимизации/сжатия форматов могут различаться. Для VMDK/VHD рассмотрите инструменты, предоставляемые платформой создания образов или сторонние конвертеры.
Mermaid диаграмма принятия решения
flowchart TD
A[Хотите освободить место на хосте?] --> B{Диск динамический?}
B -- Да --> C{Есть активные снапшоты?}
B -- Нет --> X[Рассмотреть конвертацию в динамический или клонирование]
C -- Да --> D[Удалить ненужные снапшоты и дождаться объединения]
C -- Нет --> E[Очистить гостевую ОС от ненужных файлов]
E --> F[Перезаписать свободное место нулями 'SDelete/zerofree']
F --> G[Выключить VM]
G --> H[На хосте выполнить VBoxManage modifymedium --compact]
H --> I[Проверить результат и загрузить VM]Краткое резюме
- Процесс сжатия динамического диска VirtualBox требует двух этапов: подготовка внутри гостя (затирание нулями) и собственно compact на хосте.
- Для Windows используйте SDelete, для Linux — zerofree или загрузку в live‑режиме.
- Проверьте отсутствие снапшотов и создайте резервную копию перед операцией.
Важное: операции с виртуальными дисками несут риск потери данных при ошибках — всегда делайте резервные копии перед масштабными изменениями.
Ключевые ссылки и ресурсы
- Справка VirtualBox по VBoxManage
- SDelete — Sysinternals от Microsoft
- Документация вашей гостевой файловой системы (ext4, XFS, btrfs и т.д.)
Сводка действий для быстрого применения
- Удалите ненужные файлы в гостевой ОС и очистите корзину.
- Выполните дефрагментацию (Windows) или подготовку (Linux zerofree).
- Выключите виртуальную машину.
- На хосте выполните VBoxManage modifymedium disk “<путь к VDI>” –compact.
- Проверьте старт виртуальной машины и свободное место на хосте.
Спасибо за прочтение — эти шаги помогут аккуратно и безопасно вернуть место на хосте, занятое ранее динамическим виртуальным диском.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone