Table of Contents

TRIM

TRIM — це команда операційної системи, яка оптимізує роботу дискових пристроїв. На фізичних машинах ця команда є специфічною для накопичувачів типу SSD, однак у віртуальних середовищах вона працює з накопичувачами будь-якого типу — тобто як SSD, так і HDD. Ця команда повідомляє контролерам дискових пристроїв, які блоки більше не використовуються файловою системою й відтак можуть бути остаточно звільнені. В результаті пришвидшуються операції запису на диск, а в віртуальних середовищах оптимізується розміщення даних у хмарному сховищі. (Тому, використовуючи TRIM, ви допомагаєте тримати ціни на наші послуги стабільними — зважаючи на сучасну ситуацію підвищеного попиту на накопичувачі.)

У віртуальному середовищі VMWare TRIM працює на будь-яких дискових контролерах, у віртуальному середовищі OpenStack – працює на контролерах VirtIO-SCSI та IDE, але не працює на контролері VirtIO (також відомому як virtio-blk) — однак останній вважається застарілим і існує головним чином для сумісності з старими операційними системами, випущеними до 2011–2012 років. В сучасних операційних системах немає потреби використовувати контролер VirtIO, бо всі вони мають підтримку сучаснішого й продуктивнішого контролера VirtIO-SCSI.

Нижче наведено відомості про ввімкнення і роботу TRIM у різних операційних системах.

Windows

Автоматичне виконання TRIM:

У Windows є функція оптимізації дисків, яка зокрема включає в себе виконання команд TRIM. За промовчанням Windows-системи вмикають для кожного дискового розділу оптимізацію за розкладом.

Запустити процедуру оптимізації дисків вручну або подивитися налаштування оптимізації можна, якшо у Провіднику в розділі Цей комп'ютер обрати будь-який дисковий розділ, натиснути праву кнопку миші й обрати з контекстного меню пункт Властивості (останній). З'явиться вікно властивостей розділу. У цьому вікні потрібно перейти на вкладку Сервіс і знайти там пункт Оптимізація і дефрагментація диску.

Натискання кнопки Оптимізувати викличе вікно графічного інтерфейсу до даної операції (Оптимізація дисків).

Поточні налаштування оптимізації за розкладом можна побачити у лівій нижній частини вікна. Змінити параметри (зокрема, час запуску за розкладом) можна, натиснувши відповідну кнопку правіше. Запустити процес оптимізації вручну можна у цьому ж вікні, однак практика показує, що спосіб, описаний далі, показує кращі результати.

Ручний запуск TRIM з Power Shell:

1) запустити Windows Power Shell з правами адміністратора

(виклик: Пошук – ввести в рядку пошуку «power shell» — натиснути на результаті пошуку правою кнопкою миші й обрати з контекстного меню пункт «Запуск від імені адміністратора»).

2) У вікні Power Shell виконати наступну команду для кожного дискового розділу:

Optimize-Volume -DriveLetter C -ReTrim -Verbose

Зверніть увагу на параметр -DriveLetter та його аргумент — літеру диска. В наведеній вище команді TRIM виконується для диска C. Щоб виконати його для іншого розділу, потрібно замість C підставити відповідну літеру розділу — D, E, тощо.

Linux

В Linux є два основних способи забезпечити функціонування TRIM — запуск команди fstrim або опція монтування файлових систем discard.

Автоматичне виконання TRIM:

В сучасних дистрибутивах Linux (Ubuntu 16, RHEL/CentOS 7, Debian 8 і новіших) найпростіший спосіб забезпечити регулярне виконання TRIM — через systemd. Відповідні юніти, що забезпечують автоматичне виконання fstrim для всіх змонтованих файлових систем раз на тиждень, містяться в пакеті util-linux. Для активації потрібно одноразово виконати (з привілеями суперкористувача) наступну команду:

sudo systemctl enable fstrim.timer

Для інсталяцій без systemd ми рекомендуємо використовувати опцію монтування файлових систем discard. Перевага данного методу — «раз налаштував і забув». Опцію discard потрібно додати для кожного розділу у файлі /etc/fstab.

Опція монтування discard підтримується наступними файловими системами: ext4, XFS, BTRFS, F2FS, JFS, ReiserFS4, а також файловими системами FAT/FAT32. Однак додавання цієї опції монтування для інших файлових систем, які її не підтримують, також є цілком безпечним — в такому випадку вона просто ніяк не впливає на роботу.

У файлі /etc/fstab кожній файловій системі відповідає окремий рядок, що має кілька полів, розділених пробілами чи табуляцією. Послідовність текстових полів зліва направо: пристрій, точка монтування, тип файлової системи, опції монтування. Ще правіше містяться два числових поля з однієї цифри. Нас цікавить останнє текстове поле — опції монтування.

Потрібно додати до цього поля через кому, без пробілів, опцію discard — як показано нижче:

Після того, як опцію discard додано і файл /etc/fstab збережено, потрібно перезавантажити машину.

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

Команда fstrim:

Для виконання TRIM вручну використовується команда fstrim (що входить до складу пакету util-linux). Команда має запускатися від імені суперкористувача (root). Періодичне виконання fstrim також можна автоматизувати, створивши відповідне завдання для cron.

Важливою особливістю команди fstrim є те, що вона може виконувати TRIM на деяких файлових системах, які не підтримують опцію монтування discard — насамперед на NTFS, змонтованій за допомогою ntfs-3g.

В сучасних дистрибутивах (Ubuntu 16, CentOS 7, Debian 8 і новіших) можна запускати команду fstrim з ключем -a без додаткових аргументів — в такому випадку вона відпрацює по всіх змонтованих файлових системах:

fstrim -a

У старіших дистрибутивах (таких як Ubuntu 14, CentOS 6, Debian 7) ключ -a не підтримується, і fstrim треба запускати окремо для кожної файлової системи, вказуючи точку монтування як аргумент. Наприклад:

fstrim /

Linux + LVM

При використанні LVM недостатньо ввімкнути TRIM для файлових систем — його потрібно окремо ввімкнути для LVM.

У різних дистрибутивах за промовчанням використовуються різні політики. Наприклад, в Ubuntu TRIM для LVM за прововчанням увімкнено, тоді як в CentOS — вимкнено. Перевірити, чи ввімкнено TRIM, можна наступною командою:

grep issue_discards /etc/lvm/lvm.conf

Якщо у виводі даної команди буде присутній рядок issue_discards = 1 — TRIM для LVM ввімкнено. Якщо ж значення параметра issue_discards = 0 — TRIM вимкнено. Увімкнути його можна, відредагувавши відповідний рядок у файлі /etc/lvm/lvm.conf і встановивши issue_discards = 1 (для редагування потрібні права суперкористувача).

ZFS (Linux/FreeBSD)

ZFS на Linux підтримує TRIM починаючи з версії 0.8. Ця версія є штатною для Ubuntu 20 LTS (але для 18 LTS штатною є старіша версія 0.7, в якій підтримки TRIM ще не було). Решта дистрибутивів не підтримує ZFS «з коробки» і потребує підключення сторонніх репозиторіїв, тому номер доступної версії треба перевіряти у відповідних репозиторіях.

Команди для керування і виконанння TRIM на ZFS є однаковими для Linux і FreeBSD.

У наведених нижче командах ми використовуємо ZFS-пул на ім'я tank, стандартне для документації з ZFS. В реальних умовах замість нього слід використовувати ім'я вашого пулу.

Перевірити, чи ввімкнено періодичний автоматичний TRIM:

zpool get autotrim tank

Значення цього параметра може бути off (вимкнено) чи on (ввімкнено). За промовчанням цей параметр вимкнено. Ввімкнути його можна за допомогою команди

zpool set autotrim=on tank

Ручний запуск TRIM з командного рядка:

zpool trim tank