Підтримка команд TRIM для VirtualBox та SSD


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 --пристрій 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>

Щоб бути впевненим, я не втратив жодних даних, цей привід був другим, приєднаним до машини. Я зробив такий простий тест, як копіювання якогось файлу на накопичувач, залишення його, перезавантаження машини, вимкнення машини, перевірка наявності в ньому після завантаження назад, перегляд використання дискового файлу в хост-операційній системі. Результати:

  • файл диска, що додається без опцій - неротаційний і --discard зберігає свій (динамічний) розмір навіть після видалення файлів у гостьовій ОС
  • Дисковий файл, приєднаний до обох вищезазначених параметрів, звільняє простір після видалення даних

Тепер ось мої запитання:
- що саме робить - варіант відмови? це не описано в посібнику щодо VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- це дійсно передача TRIM до хост-операційної системи чи це просто так?


3
Віртуальний TRIM, який використовується на віртуальній машині, зв'язаний з віртуальним диском для віртуального почуття ...
Fiasco Labs

Ramhound: Тож для чого потрібний прапорець "твердотільний накопичувач" у підменю зберігання? Крім того, якщо є такий варіант, як --discard, згаданий в керівництві, то він повинен бути детальним. Я повністю не розумію, що "є причина, чому це не описано". Якщо так, то чому це взагалі в посібнику?
Кшиштоф Шінтер

11
Щоб відповісти на @Ramhound, мій блог - це одна з публікацій, в якій перерахована ОП. Я не впевнений, в чому його причина, але для мене у мене була віртуальна машина, яка мені потрібна була фізично зменшити розмір файлів динамічно виділеного диска. Це був диск, який містив дані, які були видалені, і я намагався зменшити його до меншого розміру - передача команди TRIM дозволила це зробити ... скорочення мого віртуального диска з 12G до 7G. До ОП, сподіваюся, моя посада допомогла вам. Я потрапив сюди, побачивши вхідний трафік на своєму блозі.
Джейсон Роу

Просто попередження для всіх, хто цікавиться цією темою. Реалізація обрізки на емуляторі зображень диска VirtualBox надзвичайно баггітна і, швидше за все, розбить ваш vm. Там відкрито 2-річну помилку. Це можна ввімкнути, але не витрачайте час на тестування.
Домінік СМогор

Я думаю, що це помилка, яку має на увазі Домінік: 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) підтримує команду відкинути . Незрозуміло, чи підтримує Майкрософт реалізація exFAT однаково, навіть якщо файлова система була розроблена для того, щоб спалах почав спочатку.

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

Раніші рішення вимагали від користувача нулю невикористаних областей, наприклад, zerofreeявно використовуючи та компакт-диск (я припускаю, що це можливо лише тоді, коли vm офлайн).


1
Крім того, використання якоїсь штуки дедуплікації на btrfs (особливо тієї, яка пробиває дірки для 0 регіонів), і btrfs balanceсправді допомагає створити якомога більше областей для обрізання.
всезначний

12

Оскільки це найкращий результат в Google, дозвольте мені трохи уточнити інші відповіді, навіть якщо це старе повідомлення. Насправді можливо, щоб TRIM працював у тому сенсі, що невикористані віртуальні блоки в гостьовій файловій системі можуть мати відповідні фізичні блоки спалаху, позначені як невикористані для кращого використання спалаху. Частини вже є в інших відповідях та коментарях.

По-перше, хост повинен бути налаштований так, щоб вільний простір було TRIM'ed. Можна або змонтувати файлову систему за допомогою -o відкинути, або ви можете регулярно запускати fstrim у файловій системі через cron. Я віддаю перевагу останній, оскільки перший варіант може призвести до блокування системи при видаленні багатьох файлів одночасно.

Формат диска, який використовується, повинен мати динамічний розмір VDI, як пише qarma.

Переконайтесь, що nonrotational = "true" discard = "true" встановлено у файлі .vbox, як описано в OP.

Потім увімкніть TRIM в гостьовій ОС як звичайне. У Linux я знову рекомендую роботу cron під управлінням fstrim. Це, мабуть, ще важливіше, оскільки вартість створення TRIM на зображенні віртуального диска набагато вище, ніж на фізичному SSD, оскільки дані переміщуються, щоб зменшити зображення.

Тепер, оскільки образ диска регулярно ущільнюється, він займе лише фактичний використаний простір, а також деякий розмір блоку розміром 1 Мб, як пише qarma. Це знову означає, що вільний простір буде TRIM'ed на хості SSD.


Насправді я вбив деякі мої машини, використовуючи команду trim.
davidbaumann

@davidbaumann Як це сталося?
двтан

Насправді після ввімкнення його почали обробляти близько 20 ГБ. Саме в цей момент ноутбук розбився (у мене були деякі проблеми з моїм графічним процесором в ці дні). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

Команда зробити це на існуючому першому диску (якщо припустити SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.