Як я зменшу динамічно зростаючий диск VDI з VirtualBox?


35

Мої динамічно зростаючі віртуальні диски (VDI) з різних установок Ubuntu у Virtual Box насправді неухильно "зростають".

Видалення файлів у віртуальній машині не звільняє місця, який мій файл VDI зайняв з місця на жорсткому диску хоста.

Як зменшити ці файли, щоб повернути невикористаний простір на жорсткому диску хосту?

Відповіді:


34

Динамічно зростаючий файл віртуального жорсткого диска Virtual Box здатний зростати на вимогу віртуальної машини до максимального розміру, який ми визначили під час налаштування цього файлу. Однак це не звільняє простір файлів, які ми видалили в гостьовій ОС.

У випадку, якщо диск виріс занадто сильно, ми можемо його знову ущільнити, за умови, що невикористаний простір заповнений нулями, а диск - у форматі VDI.

Для файлової системи ext2 to ext 4 це можна зробити від гостя Ubuntu за допомогою утиліти командного рядка zerofree * .Встановіть zerofree

zerofree /dev/sdxX

Для цього потрібен привід, щоб він не використовувався, а його не було вимкнено . Таким чином, можливо, нам доведеться тимчасово прив’язати його до іншого створеного для цієї мети VM, або нам потрібно завантажувати живу середу Ubuntu на цій VM.

Замініть /dev/sdxXвідповідний розділ формату ext2, ext3 або ext4 .

На декількох розділах ми повинні повторити zerofreeдля кожної секції. Майте на увазі, що заповнення нулів віртуальний файл тимчасово зросте до максимального розміру.

Після того, як весь невикористаний простір накопичувача заповниться нулями, ми потім зменшимо диск

VBoxManage modifyhd <name>.vdi --compact

Це значно зменшить розмір нашого файлу VDI.

* У гості Windows ми можемо замінити невикористаний простір на утиліту sdelete.


Чи це також буде працювати для зашифрованої файлової системи в гості?
smichak

Звичайно. Якщо ви використовуєте ecryptfs, зашифровані файли виглядають як звичайні файли на дискових утилітах, і це спрацює. Якщо ви використовуєте повне дискове шифрування, він все одно не буде розпізнаний як розділ, що відформатований у формат,
колись

Я використовую розділ ext4 на блоковому пристрої dm-crypt ... Я спробував метод, і я не бачу .vdi файл як менший після ущільнення. Я думаю, що нульові блоки зберігаються як ненульові блоки на блоковому пристрої під dm-криптою.
smichak

2
@smichak: це сенс шифрування. Він зашифрує весь ваш диск, а також переконається, що ми не можемо побачити межі файлів.
Таккат

3
Якщо ви не хочете приєднувати свій VDI до іншої машини, ви можете завантажитися в режим відновлення та змонтувати диск лише заново, mount -n -o remount,ro -t ext4 /dev/sda1а потім zerofree -v /dev/sda1.
Хамід Назарі

1

Ось декілька альтернативних способів зняти з нуля вільний простір на диску (що може бути найбільш трудомісткою частиною). Після цього вам все одно доведеться запустити VBoxManage modifyhd <disk> --compactдля компактного дискового файлу.


Ця команда може нулювати диск, поки він відключений:

apt-get install zerofree
zerofree -v /dev/sdxN


Ось приклад того, як змусити ДД періодично друкувати вихід:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


Ось така ddпрограма, яка автоматично періодично друкує вихід:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M

1
Я бачив, як zerofreeвикористовується в змонтованій файловій системі, але коли вона монтувалася лише заново. Навіть для кореневого FS: sudo mount -o remount,ro /- але в сеансі GUI корінь буде зайнятий, тому він вийде з ладу. Але це можливо в runlevel 1 ( telinit 1), тому для цього вам не потрібно буде завантажуватись з живого компакт-диска.
Томаш Гандор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.