24

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

2 ответа2

16

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

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

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

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

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

9

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .