11 марта 2024

Уменьшение размера виртуального диска Oracle VM VirtualBox

    На одном из используемых мной компьютеров на жестком диске стало катастрофически не хватать места. Причиной этого были невероятно распухшие динамически распределяемые образы дисков виртуальных машин под управлением Oracle VM VirtualBox. При этом некоторые виртуальные машины использовали только 20-30% от выделенного им места. На них установлены различные версии СУБД, которые съедают много дискового пространства при заливке дампов в тестовые базы данных, но не отдают его обратно при удалении этих баз. Сначала я думал создать новые виртуальные машины, установить на них программное обеспечение и перелить нужные базы... Но мне стало лень делать столько работы, и я стал искать, как заставить VirtualBox вернуть неиспользуемое место операционной системе. Оказалось – это сделать очень просто.

Шаг 1. В гостевой ОС чистим диск от "мусора". Удаляем все, что больше не пригодится: временные файлы, обновления Windows, инсталляторы...

Шаг 2. В гостевой ОС "обнуляем" свободное место на диске. Обнуление – это операция, при которой в сектора HDD или ячейки SSD записываются нули. В этом нам помогут: под Windows – утилита SDelete (Secure Delete) от Sysinternals (дочерней компанией Microsoft), под Linux – утилита Zerofree и под Mac OS X – команда diskutil secureErase freespace 0/. Так как мои виртуальные машины под Windows, то я подробнее становлюсь на SDelete. Эта утилита предназначена для безопасного удаления существующих файлов и очистки данных оставшихся на диске после удаления файлов. Очистка реализована согласно алгоритму американского национального стандарта Министерства обороны DoD 5220.22-M. Для "обнуления" свободного места на диске запускаем SDelete от имени администратора с параметром -Z. Например, "обнулим" диск C:

sdelete.exe -z c:
или  
sdelete64.exe -z c:

Шаг 3. Забираем у виртуальной машины не используемое место. Для этого воспользуемся "родной" для VirtualBox утилитой VBoxManage. VBoxManage – это интерфейс командной строки для Oracle VM VirtualBox, который предоставляет доступ ко всем функциям системы виртуализации, даже не доступным в GUI. Например, ее команда ModifyMedium (в старых версиях modifyhd) с параметром "--compact" физически сжимает динамически выделяемые образы дисков виртуальной машины (VDI) удаляя блоки, содержащие только нули. Например, сожмем диск виртуальной машины "ora12": VBoxManage.exe modifyhd ora12.vdi –compact

3 комментария:

  1. Error on version 7.0.14.11095 for Windows

    VBoxManage.exe modifymedium --compact "E:\VM\2019\2019.vbox"

    VBoxManage.exe: error: Could not get the storage format of the medium 'E:\VM\2019\2019.vbox' (VERR_NOT_SUPPORTED)
    VBoxManage.exe: error: Details: code VBOX_E_IPRT_ERROR (0x80bb0005), component MediumWrap, interface IMedium, callee IUnknown
    VBoxManage.exe: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 201 of file VBoxManageDisk.cpp

    ОтветитьУдалить