Гость 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, поддержка отмены)
<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >
Загрузите виртуальную машину и убедитесь, что включена поддержка TRIM:
sudo hdparm -I /dev/sda | grep TRIM
Гостевая конфигурация
Если LVM используется, измените настройку сброса в /etc/lvm/lvm.conf
. (ссылка: Debian Wiki, пример lvm.conf)
devices {
...
issue_discards = 1
}
В fstab добавьте опцию discard
к файловым системам, которые вы хотите автоматически удалить (ref: debian wiki, пример fstab)
UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c / ext4 discard,errors=remount-ro 0 1
UUID=70bfca92-8454-4777-9d87-a7face32b7e7 /build ext4 discard,errors=remount-ro,noatime 0 1
Перемонтируйте файловые системы, чтобы они выбрали новые параметры.
sudo mount -o remount /
sudo mount -o remount /build
Обрежьте свободные блоки вручную с помощью fstrim
. fstrim
использует смонтированную файловую систему, а не блочное устройство, поддерживающее ее. Вместо установки непрерывного сброса в fstab
, это можно сделать на еженедельном кроне. (Еженедельный cron рекомендуется для физических твердотельных накопителей, которые могут иметь сомнительную поддержку TRIM, но здесь это не актуально, поскольку базовые твердотельные накопители обрабатываются операционной системой хоста. См. Предупреждение об ssd trim).
fstrim /
fstrim /build
На этом этапе размер файловых систем внутри ВМ и размер образов ВМ должны быть довольно близки по значению.
Протестировано с:
- Гость1: Debian 8.7, ядро: linux 4.8 grsec от backports, файловая система: ext4
- Гость 2: Debian 9 RC2, ядро: linux 4.9, файловая система: ext4
- Host1: VBox 5.1.14, Win7, образ fmt: VDI
- Хост 2: VBox 5.1.14, Win8.1, образ fmt: VDI