У меня есть виртуальная машина VirtualBox, в которой настроен очень большой размер жесткого диска (больше, чем у хоста). По моей ошибке программа на виртуальной машине генерировала множество файлов журналов, и размер файла VDI продолжает расти до тех пор, пока на хосте не останется свободного места.
Теперь я удалил файлы журналов, но размер файла VDI не уменьшается после использования VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact
Есть ли способ действительно сжать размер файла VDI? Спасибо!
источник
dd ...; rm /bigfile
это сведет к минимуму время с полным диском, если вы не ожидаетеdd
завершения.Я на хосте Windows 7 с гостями Windows. Вот пакетный файл, который я записал в Compact все VDI в дереве папок.
Я оставил ссылки в комментариях, чтобы вы могли (вроде) рассказать, как это работает.
редактировать
Что ж, после всего этого я попробовал инструмент CloneVDI, и он отлично справился с задачей за гораздо меньшее время и одним щелчком мыши.
источник
Гость Debian на хосте Windows с использованием discard / TRIM.
Это не прямой ответ сам по себе, так как я решаю проблему, а не вопрос. Вместо того, чтобы периодически сжимать образ, это решение использует Discard для автоматического удаления неиспользуемых блоков в образе диска виртуальной машины.
Это решение требует гостевой файловой системы, которая поддерживает непрерывную TRIM. Вики Linux Arch содержит список файловых систем, поддерживающих операции TRIM .
FDE и cryptoroot конкретно не рассматриваются, так как существуют проблемы безопасности, и ни одно из других решений этого вопроса также не позволит сжать. Вики Linux Arch содержит информацию об устройствах TRIM и dm-crypt .
Теоретически, это будет работать для всех гостей Linux на хостах VBox, использующих хранилище VDI.
Конфигурация хоста
Когда VBox завершен, а виртуальные машины не запущены, добавьте поддержку Discard на свои диски, указав оба
discard
иnonrotational
каждый диск в файле конфигурации для VM. В настоящее времяdiscard
отсутствует в графическом интерфейсе, ноnonrotational
отображается как флажок «Твердотельный накопитель». (ссылка: форумы vbox, поддержка отмены )Загрузите виртуальную машину и убедитесь, что включена поддержка TRIM:
Гостевая конфигурация
Если LVM используется, измените настройку сброса в
/etc/lvm/lvm.conf
. (ссылка: Debian Wiki, пример lvm.conf )В fstab добавьте
discard
опцию к файловым системам, которые вы хотите автоматически отбрасывать (ref: debian wiki, пример fstab )Перемонтируйте файловые системы, чтобы они выбрали новые опции.
Вручную обрезать свободные блоки теперь с
fstrim
.fstrim
использует смонтированную файловую систему, а не блочное устройство, поддерживающее ее. Вместо установки непрерывного сбросаfstab
это можно сделать в еженедельном кроне. (Еженедельный cron рекомендуется для физических твердотельных накопителей, которые могут иметь сомнительную поддержку TRIM, но здесь это не актуально, поскольку базовые твердотельные накопители обрабатываются операционной системой хоста. См .: предупреждение об ssd trim ).На этом этапе размер файловых систем внутри ВМ и размер образов ВМ должны быть довольно близки по значению.
Протестировано с:
источник
Для гостя MacOS сделайте это:
Обнулить свободное место в гостевой системе:
(замените / Volumes / Macintosh HD на имя вашего диска)
Отключение гостевой ВМ
Запустите эту команду, чтобы уменьшить размер образа диска VDI
ИЛИ ЖЕ
источник
Я использую это для моего образа VDI, подключенного к виртуальному Debian в Windows VirtualBox. Это не общее решение, но оно должно по крайней мере дать вам представление о том, что я делаю.
Команды в Debian:
Команды в Windows:
Надеюсь, это поможет :)
источник
Я не хочу включать поддержку TRIM в ОС, потому что каждое удаление данных вызывает сжатие данных в файле VDI, делая гостевую систему непригодной для использования, когда файл VDI находится на классическом ротационном диске. Для меня лучше выполнять сжатие вручную, например, раз в месяц.
При обычном сжатии содержимое файла VDI копируется в новый файл. Это требует некоторого (иногда большого) свободного места на диске хоста.
У меня есть решение, аналогичное указанному Эндрю Домашек. Это работает очень хорошо даже с NTFS (Windows10).
Сделать это:
Измените диски на основе VDI, чтобы они отображались как SSD с поддержкой TRIM:
запустить машину
mount /dev/sda2 /mnt
dd if=/dev/zero of=/mnt/bigfile
rm /mnt/bigfile
fstrim -v /mnt
источник
Очень приятный трюк в дополнение к принятому ответу заключается в том, что вы можете обойтись без какого-либо уплотнения после обнуления гостевого пространства, используя сжатую файловую систему на хосте (например, выбрав сжатие папки виртуальных дисков в свойствах NTFS на Хост Windows). На самом деле это дает преимущество, позволяющее сэкономить гораздо больше места, поскольку операционные системы, как правило, содержат много повторяющихся текстовых или двоичных файлов (например, гостевой диск объемом 30 ГБ с обнуленным 15 ГБ пространства может превратиться в 4 ГБ на главном диске).
Предостережения включают в себя то, что доступ к диску на реальном оборудовании может увеличиться, а загрузка ЦП несколько увеличивается.
источник
ВАЖНОЕ ПРИМЕЧАНИЕ ДЛЯ LEGACY (~ 1997-2007) ОПЕРАЦИОННЫЕ СИСТЕМЫ
В целом, методы в приведенных ранее ответах являются действительными; ОДНАКО, есть очень важный особый случай.
В течение нескольких лет - возможно, 1997-2007 гг. Или около того - 32-разрядные операционные системы оставались нормой, но жесткие диски объемом более 2 ГБ уже использовались. В результате, при попытке использовать все свободное пространство путем записи файла нулей (который всегда должен выполняться как root, чтобы включить привилегированное свободное пространство root, которое никто больше не может коснуться), вы можете увидеть:
Файл слишком большой
вместо того, что вы ожидаете:
На устройстве нет свободного места.
В этом случае вы, скорее всего, столкнулись с ограничением размера файла 2 ГБ. В то время это было распространено, потому что многие файловые операции возвращали результаты в виде 32-разрядных целых чисел со знаком, так что отрицательные значения могли сообщать коды ошибок. Это фактически означало, что результаты смещения были ограничены 2 ^ 31 байтами без специальных мер.
Обходной путь прост: продолжайте создавать отдельные файлы обнуления с разными именами до тех пор, пока на диске фактически не останется свободного места.
Если вы являетесь инструктором, желающим продемонстрировать эту ситуацию для класса, достаточно образа диска объемом 4 ГБ со старой копией Red Hat Linux 7.0.
источник