Почему жесткий диск VirtualBox постоянно растет, даже если я удаляю файлы с виртуального диска?

2354
Ajayvignesh

Я видел это как с VBox родным форматом VDI, так и с форматом VMDK. Хотя я удаляю файлы с виртуального диска, я вижу, что он постоянно растет. У меня есть смутное представление о том, что обнуление файлов не происходит с виртуальными дисками по этой ссылке . Когда я попытался сделать это с SDelete (как сказано в ссылке), это не уменьшило размер диска VDi. У меня есть приложения, которые после установки увеличивают диск до 10 ГБ каждый раз. Я считаю, что должен быть какой-то простой способ обнулить его, чем проходить через утомительный процесс, есть ли такой? Есть ли в VirtualBox какая-либо опция, позволяющая поддерживать небольшой размер виртуального диска?

1
после обнуления кластеров вы должны запустить `vboxmanage --compact`, чтобы удалить эти нулевые кластеры из файла vdi phuclv 7 лет назад 0
Vbox повторно использует нулевые кластеры в любой момент после его использования? Должен ли я сделать это вручную? Почему VBox не делает этого автоматически, как Windows или Mac на жестком диске? Ajayvignesh 7 лет назад 0
Разреженные файлы образов, то есть образы дисков VirtualBox, начинаются с минимального необходимого для системы минимума и растут по мере необходимости и использования. Допустим, чистая установка VirtualBox начинается с 8 ГБ диска, но используется только 1 ГБ, тогда размер файла будет 1 ГБ. Добавьте кучу файлов 2 ГБ в эту систему 1 ГБ, и теперь она составляет 3 ГБ. Но удалите 2 ГБ, и у вас все равно будет размер файла образа диска 3 ГБ. JakeGould 7 лет назад 2
потому что жесткие диски ** фиксированного размера **. Если вы создали vdi фиксированного размера, вам также не нужно уменьшать изображение, но тогда это будет стоить вам много места на диске. Хотите файл объемом 1 ТБ для пустого диска объемом 1 ТБ? Обычно файлы vdi и vmdk динамически изменяются, поэтому, если вы ничего не храните на диске, вам не нужно тратить на это место. Он просто хранит ненулевые кластеры phuclv 7 лет назад 0
теоретически возможно [использовать команды SSD TRIM для автоматического сжатия удаленных блоков] (https://superuser.com/q/193650/241386), хотя кажется, что ни один из нынешних гипервизоров не реализует это phuclv 7 лет назад 0
Просто чтобы добавить информацию о том, что я пробовал. Я собрал виртуальную машину с динамическим диском 10 ГБ и заполнил ее до 10 ГБ. Помимо 10 ГБ, объем диска не превысил 10 ГБ, и удаление и добавление новых файлов на диск все еще возможно после достижения 10 ГБ файла .vdi. Еще одна вещь, которую я заметил, когда я сделал снимок после достижения 10 ГБ, удаление и добавление файла увеличили моментальный снимок до 1,8 ГБ, и он достиг максимума в 1,8 ГБ. Тем не менее позволил мне удалить и добавить еще файлы в снимок тоже. Поэтому я решил оставить его с динамическим диском для моих виртуальных машин, который в конечном итоге перестанет расти после того, как мой размер диска будет упомянут. Ajayvignesh 7 лет назад 0

3 ответа на вопрос

2
Kanchu

Вот пакетный скрипт, который я использую для сжатия всех файлов VDI:

@echo off for /d %%d in (*.*) do ( cd "%%d" for %%f in (*.vdi) do ( echo Compacting %%f . . . echo Initial size: %%~zf "C:\Program Files\VirtualBox\VBoxManage.exe" modifymedium --compact disk "%%f" echo Post compact size: %%~zf echo. ) cd .. ) 

Просто сохраните его в папке с виртуальными машинами и запустите ...

О, это здорово! Я не знал, что эта функциональность существует DeathByTensors 7 лет назад 0
Должен ли я сделать SDelete перед запуском этого командного файла? Я вижу, что после запуска этой партии нет никакой разницы между исходным размером и размером после сжатия. Ajayvignesh 7 лет назад 0
@Ajayvignesh вы должны запустить sdelete или любые инструменты, такие как zerofree, чтобы обнулить свободные блоки, потому что virtualbox / vmware работают в ** raw-блоках ** и не имеют представления о базовой файловой системе. Следовательно, если он видит ненулевой блок, он думает, что блок имеет некоторые данные и не может удалить его из файла phuclv 7 лет назад 0
1
Amorris

При создании новой виртуальной машины вам будет предложено создать виртуальный жесткий диск. У вас есть два варианта для диска, фиксированный или динамически распределяемый. Это описания (из виртуальной коробки) обоих типов дисков.

Исправлено: исправленный файл жесткого диска может занять больше времени для создания в некоторых системах, но часто быстрее использовать

Распределение динамически: файл с динамически размещенным жестким диском будет занимать только место на вашем физическом жестком диске, пока он заполняется (до максимального фиксированного размера), хотя он не будет уменьшаться автоматически после освобождения места на нем.

Скорее всего, вы устанавливаете его динамически, чтобы диск не уменьшался автоматически при освобождении места на нем.

Спасибо за эту информацию. Я создал новую виртуальную машину в фиксированном файле .vdi. Тем не менее, создание снимков и работа с ними все еще продолжает увеличивать размер снимка (в конечном итоге размер виртуальной машины продолжает расти, превышая размер моего фиксированного диска) Ajayvignesh 7 лет назад 0
0
LMiller7

Удаление файлов с виртуального диска не уменьшает его размер по соображениям производительности.

Когда файл удаляется, он оставляет дыру, в которой ранее находились данные файла. Когда создаются новые файлы или данные записываются на диск, они заполняют эти дыры. Файл будет увеличиваться при необходимости для размещения большего количества данных, но никогда не будет уменьшаться.

Зачем?

Удаление данных из файла в любом месте, кроме конца, является трудоемкой операцией. Данные должны быть перемещены, чтобы заполнить дыры, и в случае виртуального диска многие внутренние ссылки на расположения данных должны быть обновлены. Даже при использовании SSD удаление даже небольшого файла может занять несколько минут. Это явно не приемлемо.

Вам нужно использовать vboxmanage --compact, чтобы удалить дыры и сжать виртуальный диск.

Похожие вопросы