Поддержка команд VirtualBox и SSD TRIM

27

Мне известно о огромном количестве постов в Интернете, в которых говорится, что это не сработает, и почему я действительно потратил несколько дней на поиски решений несколько месяцев назад, но вчера я нашел несколько советов, как «включить поддержку команд 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 на хост-операционную систему или просто выглядит?

Кшиштоф Шинтер
источник
3
Виртуальный TRIM, используемый на виртуальной машине, подключенной к виртуальному диску, для виртуального самочувствия ...
Fiasco Labs
Ramhound: Так для чего установлен флажок «Твердотельный накопитель» в подменю хранилища? Кроме того, если в руководстве есть опция, подобная --discard, то она должна быть детальной. Я совершенно не понимаю вашу точку зрения о том, что «есть причина, по которой это не описано». Если так, то почему это вообще в руководстве?
Кшиштоф Шинтер
11
Чтобы ответить @Ramhound, мой блог является одним из постов, перечисленных в ОП. Я не уверен, в чем его причина, но для меня у меня была виртуальная машина, в которой мне нужно было физически уменьшить размер файла динамически выделяемого диска. Это был диск с данными, которые были удалены, и я пытался уменьшить их до меньшего размера - передача команды TRIM позволила этому произойти ... сжав мой виртуальный диск с 12G до 7G. К ОП, я надеюсь, что мой пост помог вам. Я попал сюда, увидев входящий трафик в моем блоге.
Джейсон Роу
Просто предупреждение для всех, кто интересуется этой темой. Реализация обрезки на эмуляторе образа диска VirtualBox очень глючная и, скорее всего, приведет к падению вашего виртуального компьютера. Для него открыта двухлетняя ошибка. Можно включить, но не тратьте время на попытки.
Доминик СМогор
Я думаю, что это ошибка, на которую ссылается Доминик: virtualbox.org/ticket/16450
bobpaul

Ответы:

19

--discardПараметр указывает, что vdiизображение будет сокращено в ответ на trimкоманду гостевой ОС. Следующие требования должны быть выполнены:

  • формат диска должен быть VDI
  • очищаемая область должна быть не менее 1 МБ (размер)
  • [вероятно] очищаемая область должна покрывать один или несколько блоков по 1 МБ (выравнивание)

Очевидно, что гостевая ОС должна быть настроена на выдачу trimкоманды, обычно это означает, что гостевая ОС считает, что диск является SSD. Ext4 поддерживает -o discardфлаг монтирования; OSX, вероятно, требует дополнительных настроек, поскольку по умолчанию этой команде выдаются только SSD от Apple . Windows должна автоматически обнаруживать и поддерживать SSD, по крайней мере, в версиях 7 и 8, мне не ясно, происходит ли обнаружение во время установки или запуска. Драйвер Linux exFAT (любезно предоставлен Samsung) поддерживает команду сброса . Не ясно, поддерживает ли Microsoft реализацию exFAT, хотя файловая система была разработана для флэш-памяти с самого начала.

В качестве альтернативы есть специальные методы для выдачи trim, например, fstrimкоманда Linux , часть util-linuxпакета.

Более ранние решения требовали, чтобы пользователь обнулял неиспользуемые области, например, zerofreeявно использовал и сжимал диск (я предполагаю, что это возможно только тогда, когда vm отключен).

Дима Тиснек
источник
1
Кроме того, использование некоторого рода дедупликации на btrfs (особенно той, которая пробивает отверстия для 0 областей) и btrfs balanceдействительно помогает создать как можно больше обрезаемых областей.
всевозможный
12

Так как это лучший результат в 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 хоста.

Якоб Ларсен
источник
На самом деле я убил некоторые из своих виртуальных машин с помощью команды trim.
Давидбауман
@davidbaumann Как это случилось?
августа
На самом деле, после включения он начал обрезать около 20 ГБ. Именно в этот момент произошел сбой ноутбука (в те дни были проблемы с моим графическим процессором). forums.virtualbox.org/viewtopic.php?f=2&t=75308
Давидбауман
Команда сделать это на существующий первый диск (при условии SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM