Virtualbox сжать диск vdi linux

Как уменьшить размер файла VDI VirtualBox?

У меня есть виртуальная машина VirtualBox, в которой настроен очень большой размер жесткого диска (больше, чем у хоста). По моей ошибке программа на виртуальной машине генерировала множество файлов журналов, и размер файла VDI продолжает расти, пока на хосте не останется свободного места. Теперь я удалил файлы журналов, но размер файла VDI не уменьшается после использования VBoxManage.exe modifyhd «C:\Virts\mybox-i386.vdi» compact Есть ли способ действительно сжать размер файла VDI? Спасибо!

8 ответов 8

  1. Запустите defrag в гостевой системе (только для Windows)
  2. Обнулить свободное пространство: С гостем Linux запустите это:
dd if=/dev/zero of=/var/tmp/bigemptyfile bs=4096k ; rm /var/tmp/bigemptyfile 
telinit 1 mount -o remount,ro /dev/sda1 zerofree -v /dev/sda1 
vboxmanage modifymedium --compact /path/to/thedisk.vdi 
VBoxManage.exe modifymedium --compact c:\path\to\thedisk.vdi 
VBoxManage modifymedium --compact /path/to/thedisk.vdi 

Если выполнение команды в принятом ответе выдает бесполезное сообщение об ошибке, подобное этому

VBoxManage.exe: error: Cannot register the hard disk 'thedisk.vdi' because a hard disk 'thedisk.vdi' with UUID already exists 

Просто запустите команду по UUID вместо имени файла:

VBoxManage.exe modifyhd --compact 

Я на хосте Windows 7 с гостями Windows. Вот пакетный файл, который я записал в Compact все VDI в дереве папок.

echo off mode con:cols=140 lines=200 cls :: see https://forums.virtualbox.org/viewtopic.php?p=29272#p29272 :: How can I reduce the size of a dynamic VDI on disk? :: but that page says to use sdelete -s which is suboptimal. :: use -z as per http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx :: First run the sdelete -z c: inside the VMs that zero-out all the free space :: THEN run this batch file Title Compacting Free space on Virtual Machine VMs :: http://ss64.com/nt/for_r.html :: http://stackoverflow.com/questions/8836368/windows-batch-file-how-to-loop-through-files-in-a-directory/8836401#8836401 Setlocal EnableDelayedExpansion :: http://ss64.com/nt/delayedexpansion.html . :: Notice that within the for loop we use !variable! instead of %variable%. For /R %CD% %%G IN (*.vdi) DO ( set ohai=%%G set lastfive=!ohai:~-5! :: Skip snapshots which are named .vdi if NOT !lastfive!==>.vdi ( echo . echo Compacting %%G "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" modifyhd "%%G" --compact ) ) pause exit 

Я оставил ссылки в комментариях, чтобы вы могли (вроде) рассказать, как это работает.

Что ж, после всего этого я попробовал инструмент CloneVDI, и он отлично справился с задачей за гораздо меньшее время и в один клик.

Источник

How do I shrink a dynamically growing VDI disk from VirtualBox?

My dynamically growing virtual disks (VDI) from various Ubuntu installations in Virtual Box are actually steadily «growing» indeed. Deleting of files in the virtual machine does not free the space my VDI file took from the host hard disk space. How do I shrink these files to give the unused hard disk space back to the host?

Читайте также:  Linux change extension all files in folder

2 Answers 2

A dynamically growing Virtual Box virtual hard drive file is capable of growing on demand of the virtual machine up to the maximum size we defined in setting up this file. It does not however free the space of files we deleted in the guest OS.

In case the disk had grown too much we can compact it again, provided the unused space is filled with zeros, and the drive is in VDI format.

For an ext2 to ext 4 filesystem this can be done from the Ubuntu guest with the command line utility zerofree * .

This needs the drive to not be in use, and to be unmounted. We therefore may have to bind it temporarily to another VM we had created for this purpose, or we need to boot an Ubuntu live environment on this VM.

Replace /dev/sdxX with the ext2, ext3 or ext4 formatted partition in question.

On more than one partition we my have to repeat zerofree for each partition. Keep in mind that by filling with zeros the virtual file will temporarily grow up to it’s maximum size.

Once all unused drive space is filled with zeros we then shrink the drive with

VBoxManage modifyhd .vdi --compact 

This will considerably decrease the file size of our VDI file.

* In a Windows guest we can replace unused space with the utility sdelete .

Источник

Virtualbox сжать диск vdi linux

Формат образа диска VDI в системе виртуализации VirtualBox имеет два режима хранения данных: статический размер образа и динамически расширяемый образ диска.

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

Уменьшение размера динамически расширяемого образа происходит в два этапа.

Этап 1 — очистка нулями незанятого пространства диска. Это действие можно сделать двумя способами.

Способ первый — через файловую систему. Необходимо внутри образа создать файл, заполненный нулями, максимально большого размера. А затем его удалить. Для этого необходимо загрузить гостевую систему (предполагается, что там установлен Linux) и под пользователем root выполнить команду:

dd if=/dev/zero of=/var/tmp/bigemptyfile bs=4096k ; rm /var/tmp/bigemptyfile

Данную команду можно выполнить и под обычным пользователем, но тогда не будет очищено ~5% зарезервированного размера диска, доступные только root .

Способ второй — более низкоуровневый, но более качественный (речь, на самом деле, идет о выигрыше в пару процентов относительно первого способа). Надо загрузиться в виртуальной машине с какого-нибудь ISO-файла с LiveCD дистрибутивом, например SystemRescueCd. Это необходимо сделать для того, чтобы можно было подмонтировать в режиме Read-Only все разделы диска, чтобы можно было работать с таким разделом на уровне байтов через утилиту zerofree напрямую. Утилита zerofree сама анализирует структуру диска и заполняет нулями все блоки, которые помечены в файловой системе ext2/ext3/ext4 как свободные.

Читайте также:  Install viber in linux

В принципе, если в самом дистрибутиве есть установленная программа zerofree , то грузиться с LiveCD смысла нет. Достаточно загрузиться в rescue-режиме или перейти на 1-й уровень загрузки SysV. После чего рабочий диск перемонтируется в режиме Read-Only. Делается это под рутом командами (нужно прописывать правильный диск):

mount -o remount,ro /dev/sda1

Команда для использования zerofree следующая:

После успешного выполнения первого этапа виртуальную машину нужно выключить .

Этап 2 — сжатие VDI-файла путем удаления в нем пустых (нуливых) сегментов. Делается это уже на уровне хостового компьютера.

Перед тем как сжимать VDI-файл, надо разобраться, зарегистрирован ли он уже в VirtualBox. Возможно два случая: диск зарегистрирован (т. е. VirtualBox знает о данной виртуальной машине) и диск не зарегистрирован — т. е. файлы виртуальной машини лежат в каком-то каталоге, но они не добавлены в VirtualBox и VirtualBox об этой машине и образе диска машины ничего не знает. Это незарегистрированное состояние возникает, например, при переносе виртуалки или при восстановлении виртуалки из резервной копии.

Если виртуальная машина (и ее диск) не зарегистрированы в VirtualBox, то сжатие происходит следующей командой:

$ vboxmanage modifymedium —compact «our_disk.vdi»

Если же окажется, что виртуалка и ее диск зарегистрированы, то такая команда может завершится ошибкой:

$ vboxmanage modifymedium —compact our_disk.vdi

VBoxManage: error: Cannot register the hard disk ‘/opt/vmFarm/our_disk.vdi’ because a hard disk ‘/opt/vmFarm/our_disk.vdi’ with UUID already exists

VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports

VBoxManage: error: Context: «OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())» at line 191 of file VBoxManageDisk.cpp

Такая ошибка может возникать в случае, если VDI-файл лежит в каталоге, который является линком (link) на другой каталог. Внутри VirtualBox файл видится по одному пути, а в момент выполнения консольной sh-команды полный путь к файлу разворачивается по другому пути. И тот и тот путь правильный, но VirtualBox считает их разными, т. е. не видит их эквивалентность, от чего и происходит ошибка.

В любом случе становится понятно, что диск виртуалки зарегистрирован. И для такого диска лучше применить ту же самую команду, но с использованием UUID. Если UUID диска неизвестен, его можно посмотреть командой:

И далее дается команда на сжатие диска с указанием его UUID:

Читайте также:  Linux где лежит сертификат

$ vboxmanage modifymedium —compact 1bbd8dbe-d0c7-4db7-9717-85313fe7e721

Все, после того как данная команда отработает, размер динамического VDI-диска должен уменьшиться.

  • Удобное переключение между Host и Guest
  • Vagrant. Установка, настройка, использование
  • Vagrant для PHP-проекта
  • Начало работы с Vagrant
  • Настройка Vagrant для удобной разработки
  • Обзор полезного софта для управления виртуализацией
  • Глючные и безглючые (стабильные) версии VirtualBox
  • Как установить Oracle VM VirtualBox Extension Pack в Linux
  • Установка VirtualBox Guest Additions на Fedora 28/27, CentOS/RHEL 7.5/6.9/5.11
  • Установка Virtual Box Guest Additions в гостевой системе Fedora
  • Установка Virtual Box Guest Additions в гостевой системе Debian Linux для VirtualBox 6.1
  • Прописывание UUID в VirtualBox: что делать при ошибке «VM config which has the same UUID as an existing virtual machine»
  • Как смонтировать динамический VDI-образ HDD диска VirtualBox в отдельную директорию
  • Как вручную собрать VirtualBox Guest Additions из исходников в Linux
  • Как обновить VirtualBox в Linux и как удалить старый Extention Pack?
  • Как уменьшить размер динамического диска в VirtualBox для ОС Linux
  • Скрипт для уменьшения размеров VDI-файлов в каталоге и подкаталогах

Источник

How do I reduce the size of a Ubuntu Virtual Image in VirtualBox?

I’ve read in another post (How do I increase the hard disk size of the virtual machine?) that to change the size of a Virtual Disk Image(.vdi) one can use the following command:

VBoxManage modifyhd YOUR_HARD_DISK.vdi --resize SIZE_IN_MB 

You have to resize the partition. Increasing a partition size is trivial, but decreasing it is complicated and risky. Try compacting the virtual disk? It will still let the guest grow, but will not use host storage space on empty guest disk.

1 Answer 1

The linked question addresses increasing the size of a virtual disk. Big picture, to do this, you give the VBoxManage command to increase the image size, then start the virtual machine, and use gparted or equivalent to increase the partition size.

If you want to decrease the size, you would have to reverse the steps — first shrink the partition inside the VM, then use VBoxManage to decrease the image size (assuming this is possible — I have not tried). I also do not know what would happen if you gave the VBoxManage parameters that would decrease the size of the file smaller than the partition(s) inside.

There are ways of shrinking the virtualbox file size that are not so dramatic, if that is what your end goal really is. This is called ‘compacting’ the drive and shrinks the virtualbox file size to only the space that is actually used.

If you plan to do any of this stuff, I strongly advise backing up any important data first.

Источник

Оцените статью
Adblock
detector