Мне известно о огромном количестве постов в Интернете, в которых говорится, что это не сработает, и почему я действительно потратил несколько дней на поиски решений несколько месяцев назад, но вчера я нашел несколько советов, как «включить поддержку команд TRIM» для гостевых машин. , Я попробовал и "похоже" работает. То, что я хотел бы знать, - то, где подвох или это действительно работает, как должно.
Источники:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html.
Моя точная команда прикрепления файла на диске:
VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --необорот на --discard на --medium "C: \ path \ to \ file.vdi" --type hdd
Который породил эту запись в файле * .vbox машины:
<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
<Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>
Чтобы быть уверенным, я не потерял бы никаких данных, этот диск был вторым, присоединенным к машине. Я сделал простой тест, такой как копирование какого-либо файла на диск, оставление его, перезагрузка компьютера, выключение компьютера, проверка его наличия после загрузки, просмотр использования файла диска в операционной системе хоста. Результаты:
- файл диска, прикрепленный без параметров --nonrotational и --discard сохраняют свой (динамический) размер даже после удаления файлов в гостевой ОС
- файл диска, прикрепленный к обеим опциям, упомянутым выше, освобождает место после удаления данных
Теперь вот мои вопросы:
- что делает опция --discard? он не описан в руководстве VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- действительно ли он передает TRIM на хост-операционную систему или просто выглядит?
источник
Ответы:
--discard
Параметр указывает, чтоvdi
изображение будет сокращено в ответ наtrim
команду гостевой ОС. Следующие требования должны быть выполнены:Очевидно, что гостевая ОС должна быть настроена на выдачу
trim
команды, обычно это означает, что гостевая ОС считает, что диск является SSD. Ext4 поддерживает-o discard
флаг монтирования; OSX, вероятно, требует дополнительных настроек, поскольку по умолчанию этой команде выдаются только SSD от Apple . Windows должна автоматически обнаруживать и поддерживать SSD, по крайней мере, в версиях 7 и 8, мне не ясно, происходит ли обнаружение во время установки или запуска. Драйвер Linux exFAT (любезно предоставлен Samsung) поддерживает команду сброса . Не ясно, поддерживает ли Microsoft реализацию exFAT, хотя файловая система была разработана для флэш-памяти с самого начала.В качестве альтернативы есть специальные методы для выдачи
trim
, например,fstrim
команда Linux , частьutil-linux
пакета.Более ранние решения требовали, чтобы пользователь обнулял неиспользуемые области, например,
zerofree
явно использовал и сжимал диск (я предполагаю, что это возможно только тогда, когда vm отключен).источник
btrfs balance
действительно помогает создать как можно больше обрезаемых областей.Так как это лучший результат в Google, позвольте мне немного прояснить другие ответы, хотя это старый пост. Фактически возможно заставить TRIM работать в том смысле, что неиспользуемые виртуальные блоки в гостевой файловой системе могут иметь соответствующие физические блоки флэш-памяти, помеченные как неиспользуемые для лучшего использования флэш-памяти. Части даже уже присутствуют в других ответах и комментариях.
Во-первых, хост должен быть настроен так, чтобы свободное место было TRIM'ом. Вы можете либо смонтировать файловую систему с помощью -o discard, либо регулярно запускать fstrim в файловой системе через cron. Я предпочитаю последнее, так как первый вариант может привести к блокировке системы при удалении нескольких файлов одновременно.
Используемый формат диска должен быть динамического размера VDI, как пишет qarma.
Убедитесь, что nonrotational = "true" discard = "true" установлены в файле .vbox, как описано в разделе OP.
Затем включите TRIM в гостевой ОС как обычно. В Linux я снова рекомендую задание cron, запускающее fstrim. Это, вероятно, еще более важно, поскольку стоимость создания TRIM на образе виртуального диска намного выше, чем на физическом SSD, поскольку данные перемещаются, чтобы уменьшить размер изображения.
Теперь, поскольку образ диска регулярно сжимается, он будет занимать только фактическое используемое пространство плюс некоторые накладные расходы размером в 1 МБ, как пишет qarma. Это снова означает, что свободное место будет TRIM'ом на SSD хоста.
источник
VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on