Как уменьшить размер виртуальной машины VirtualBox и вернуть место на хосте

VirtualBox — популярный инструмент для разработки и тестирования, который позволяет запускать гостевые операционные системы поверх вашей основной Windows 10. Но со временем виртуальные диски могут расти: файлы удаляются внутри гостя, но не освобождают пространство на хосте автоматически. В этой инструкции — пошаговое руководство по уменьшению виртуального диска и возврату места хосту.
Важно: если вы при создании ВМ выбрали фиксированный размер диска (Fixed Size), диск нельзя уменьшить ниже заданного размера. Для динамических дисков (Dynamically allocated) описанные шаги применимы.
Основные понятия
- Гостевая ОС: операционная система, запущенная внутри VirtualBox.
- Хост: ваша основная Windows 10 система, в которой установлен VirtualBox.
- Динамический диск: виртуальный диск, который растёт по мере заполнения, но может быть компактирован при корректной подготовке.
- Zeroing / заполнение нулями: операция записи нулей в свободные блоки, чтобы инструмент компактирования мог идентифицировать и вернуть их хосту.
Когда этот метод работает и когда — нет
- Работает: динамические VDI/VHD/VHDX и другие форматы, если вы правильно подготовите гостя (заполнили свободное пространство нулями).
- Не работает: фиксированные виртуальные диски (Fixed Size) не уменьшатся ниже исходного размера. Также некоторые сторонние форматы и шифрованные диски могут требовать специфичных инструментов.
1. Подготовьте гостевую ОС: удалите файлы и заполните свободное пространство нулями
Цель этапа — максимально уменьшить фактическое использованное пространство внутри гостя и затем заменить все свободные блоки нулями. Это позволит инструментам хоста эффективно удалить «пустые» блоки.
Для Windows в госте
Удалите ненужные файлы и очистите Корзину: снимите все временные файлы, логи, старые бэкапы (например, Windows.old), и удалите ненужные точки восстановления.
Дефрагментируйте диск (рекомендуется для NTFS): откройте «Оптимизировать диски» и выберите нужный том, затем нажмите «Оптимизировать».


- Скачайте утилиту SDelete от Microsoft Sysinternals и распакуйте её в папку, например на Рабочий стол. В папке будут файлы Eula, sdelete и sdelete64.

- Откройте командную строку от имени администратора, перейдите в каталог SDelete и выполните:
cd Desktop\SDelete
sdelete64.exe -z C:(Параметр -z заполняет свободное пространство нулями.)

- После окончания процедуры корректно завершите работу гостя (shutdown) и закройте VirtualBox.
Важно: sdelete записывает нули поверх свободного пространства — этот шаг критичен для успешного компактирования на хосте.
Для Linux в госте (пример — Ubuntu)
- Запустите гостя и при старте удерживайте Esc, чтобы попасть в меню загрузчика GRUB.

- Выберите “Advanced options for Ubuntu”.

- Затем выберите «Recovery Mode» и пункт с root-доступом, загрузитесь в режим обслуживания.

- В консоли проверьте доступные диски:
df -h
- Установите zerofree, если он отсутствует (в режиме восстановления возможно ограниченное окружение):
apt-get update
apt-get install zerofree- Убедитесь, что целевой раздел отмонтирован или смонтирован в режиме только для чтения. Затем выполните (пример для /dev/sda1):
zerofree -v /dev/sda1- После завершения выполните:
shutdown -h nowи завершите работу VirtualBox.
Примечание: zerofree работает только с файловыми системами ext2/ext3/ext4 и требует, чтобы раздел был размонтирован или смонтирован как read-only.
2. Компактирование виртуального диска на хосте (Windows 10)
После подготовки гостя освобождённое пространство можно вернуть хост-системе. Ниже — несколько подходов, выбирайте по формату виртуального диска.
Вариант A — DiskPart (для VHD/VHDX и некоторых VDI, если они видятся как vdisk)
- Откройте Командную строку от имени администратора и запустите:
diskpart
- Утвердите запрос UAC, если появится.

- Укажите путь к файлу виртуального диска (VDI/VHD):
select vdisk file="V:\path-to-your-vdisk-file.vhdx"- Подключите виртуальный диск только для чтения:
attach vdisk readonly- Запустите компактирование:
compact vdisk
- По окончании выполните:
detach vdisk
exitЭтот метод удобен для VHD/VHDX и в некоторых случаях для VDI, представленных ОС как виртуальный диск.
Вариант B — VBoxManage (рекомендуется для VDI)
VirtualBox включает утилиту VBoxManage, которая умеет компактировать VDI напрямую.
Пример для Windows (в командной строке с правами администратора):
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifymedium disk "C:\path\to\disk.vdi" --compactЕсли формат VDI поддерживает компактирование, этот способ часто быстрее и надежнее.
Альтернативы: если у вас VMDK, VDI или другой формат, можно сначала сделать клон в VDI, а затем компактировать клон:
VBoxManage clonehd "original.vdi" "clone.vdi" --format VDI
VBoxManage modifymedium disk "clone.vdi" --compact3. Проверка и критерии приёмки
Критерии приёмки:
- Фактическое свободное место на хосте увеличилось на ожидаемую величину (приблизительно равную объёму удалённых данных).
- Виртуальная машина успешно стартует и файлы внутри гостя доступны.
- Нет ошибок в логах VirtualBox при запуске ВМ.
Тесты приёмки:
- Запустите гостя и проверьте целостность ключевых приложений/данных.
- Сравните размеры дискового файла до и после операции.
- Если доступно, выполните контрольный бэкап перед изменениями и пробный откат.
Контрольные списки: роль администратора и роль пользователя
Администратор (операции на хосте):
- Создать резервную копию файла виртуального диска.
- Остановить виртуальную машину и убедиться, что она выключена.
- Выполнить compact через DiskPart или VBoxManage.
- Проверить логи и сравнить размеры файлов.
Пользователь (в госте):
- Удалить ненужные файлы и очистить корзину.
- Дефрагментация (Windows) или подготовка zerofree (Linux).
- Вызвать sdelete/zerofree и корректно завершить работу.
Частые ошибки и как их избежать
- Ошибка: компактирование не уменьшило размер диска — проверьте, действительно ли вы заполнили свободное пространство нулями в госте. SDelete/zerofree обязателен.
- Ошибка: раздел смонтирован и zerofree не смог выполнить запись — перезагрузитесь в recovery/однопользовательский режим и выполните команду для размонтированного раздела.
- Ошибка: используете Fixed Size диск — его нельзя уменьшить; только можно создать новый диск меньшего размера и склонировать систему на него.
Альтернативные подходы
- Клонирование на новый диск меньшего размера: создайте новый VDI нужного размера, загрузитесь с live-ISO, выполните копирование разделов и корректную настройку загрузчика.
- Использовать сторонние утилиты для сжатия/клонирования дисков (Clonezilla, GParted) — полезно при смене формата диска.
- Перевести образ в формат, удобный для компактирования (например, VDI), затем выполнить compact.
Риски и mitigations
- Риск: повреждение данных при ошибке — mitigation: создать резервную копию полного виртуального диска до операции.
- Риск: недостаток места на хосте во время создания копий — mitigation: временно перенести файл на внешний диск или сетевой ресурс.
- Риск: несовместимость форматов — mitigation: протестировать на копии диска и изучить документацию по формату (VDI/VHD/VMDK).
Быстрый чек-лист перед началом
- Сделать резервную копию виртуального диска.
- Освободить место в госте (удалить файлы, очистить корзину).
- Заполнить свободное пространство нулями (sdelete или zerofree).
- Выключить гостя и VirtualBox.
- На хосте выполнить compact через VBoxManage или DiskPart.
- Запустить ВМ и проверить работоспособность.
Decision flow (упрощённая схема выбора метода)
flowchart TD
A[Начало: виртуальный диск растёт] --> B{Тип диска}
B -->|VDI| C[Использовать VBoxManage --compact]
B -->|VHD/VHDX| D[Использовать DiskPart select/attach/compact]
B -->|VMDK или другое| E[Клонировать в VDI или использовать сторонние инструменты]
C --> F{Гость подготовлен?}
D --> F
E --> F
F -->|Да| G[Выполнить compact и проверить]
F -->|Нет| H[Подготовить гостя: удалить файлы, sdelete/zerofree]
H --> FКороткая методология (mini SOP)
- Резервное копирование исходного .vdi/.vhdx.
- Очистка гостя и zeroing.
- Компактирование на хосте соответствующим утилитом.
- Верификация: запуск гостя и проверка свободного места.
Сводка и рекомендации
- Всегда делайте бэкап перед изменением виртуальных дисков.
- SDelete (Windows) и zerofree (Linux) — ключевые инструменты для подготовки гостя.
- Для VDI предпочтительнее VBoxManage; для VHD/VHDX — DiskPart.
- Если требуется постоянный контроль размера, планируйте регулярную уборку и архивирование внутри гостя.
Ключевая мысль: уменьшить виртуальный диск можно, но только при корректной подготовке гостя (заполнении свободных блоков нулями) и использовании подходящего инструмента на хосте.
Summary:
- Подготовьте гостя: удалите файлы и запишите нули в свободное пространство.
- На хосте выполните compact через DiskPart или VBoxManage в зависимости от формата.
- Проверьте работу машины и убедитесь, что место действительно освобождено.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента