[ Пред. ] [ Содержание ] [ След. ]

trim SSD

[ @sdd @hdd @trim ]

 


Наверняка система установлена на быстром SSD.


Весьма вероятно. что при создании партиции для установки системы были проставлены флаги discard, noatime, nodiratime.


Лучше это всё перепроверить и делать самому с нуля, осмысленно.


Теория "trim"


https://hddiq.ru/tverdotelnye-nakopiteli-ssd/trim-ssd#_TRIM_Linux


Современные операционные системы, как и файловые системы, пока еще рассчитаны в основном на работу с HDD (жесткий механический диск или "винчестер") и при создании нового файла операционная система записывает его в специальную таблицу на жестком диске (MFT — Master File Table — Главная файловая таблица) — координату данного файла. Этим самым файловая таблица сообщает системе четкое и точное месторасположение кластеров с записанной информацией на диске. Когда файл удаляется с жесткого диска, система удаляет данные удаляемого файла из этой таблицы MFT, сам файл не трогая (именно в этом смысл сущности «Корзина»). А при записи новых данных файлы просто пишутся поверх старых.


Для перезаписи данных на SSD требуется удаление не только координаты из MFT таблицы, но и стирание ставшего ненужным файла из ячеек flash-памяти. Для этого используется технология Trim, оно же "тримминг" (англ. to trim — подрезать).


Со временем операции записи на SSD существенно замедляются (на HDD такого нет). Технология TRIM обеспечивает более равномерный износ SSD-диска и, соответственно, поддерживает быструю работу с данными. TRIM сообщает операционной системе, какие блоки ранее записанных данных на SSD уже не нужны из-за удалений файлов или форматирования. Это позволяет SSD постоянно выполнять «сборку мусора». Как это делается: когда контроллер SSD диска воспринимает тримовскую команду "discard", он сразу же очищает более не используемые блоки flash памяти. Делается это в фоновом режиме, в перерывах между любыми операциями записи и чтения. Это можно сделать сразу, а можно через какое-то отложенное время.


Прежде чем что-то менять, хорошо бы сперва убедиться в том, что тут НАДО что-то менять. Здесь рассматриваются основы запуска операционной системы, и один лишний символ в погоне за мифическим улучшением может порушить сразу всё. Технологии ssd меняются, и вполне вероятно будущее, в котором о TRIM на ssd вообще не придётся задумываться.


Что важно знать прежде чем принимать какое-либо решение


1
Дисковый контроллер должен работать в режиме «AHCI». Нужно проверить в BIOS, что для контроллера SATA выставлен режим AHCI.


Под виндой это можно выяснить и в «Диспетчере устройств».


2
Функция Trim не будет работать если:


3
Важно понимать, что если использовать Trim, то о восстановлении "случайно" удаленных данных можно забыть. Если удалить файл напрямую, а не через "корзину", то все его данные на SSD дисках будут уничтожены сразу и полностью.


4
The "discard" options is not needed if your SSD has enough overprovisioning (spare space) or you leave (unpartitioned) free space on the SSD.


See http://www.spinics.net/lists/raid/msg40866.html


5
Для раздела на SSD диске стоит добавить параметр noatime (он же realtime) — это опции уменьшения нагрузки по записи, после этой команды не будут обновляться даты доступа к папкам и файлам. Обычно это всё делается при установке системы на этапе ручной разметки дисков, но всегда есть исключения.


Ещё есть nodiratime — это запрет на обновление даты доступа к папкам. Если включен noatime, то nodiratime указывать незачем, оно уже включено.


Если диск работает под высокой нагрузкой (сервер), может быть разумно также добавить опцию commit и указывать для неё, допустим, 60 секунд — операции записи будут отложены и станут выполняться на один раздел раз в 60 секунд.


Но эту опцию стоит добавлять только в том случае, если речь идет о ноутбуке с исправной батареей, или если компьютер подключается через UPS (ИБП), иначе очень высок риск при мелком сбое энергии потерять диск СРАЗУ.


Строка в fstab может иметь, к примеру, такой вид:


UUID=aeade6fd-2b24-4e59-bc8c / ext4 noatime,discard,errors=remount-ro,commit=60 0 1


Нужен ли TRIM на hdd


Нет.


На ssd физика хранения данных иная, нежели на hdd, поэтому надо указать опцию discard при установке системы для разделов, которые устанавливаются на ssd.


discard — опция монтировании файловой системы.


По-сути, к диску всё так же происходят обращения, и записываются новые файлы, разница только в том, как их помечают удалёнными — через trim (или discard) их никак не помечают, их просто удаляют. Ячейки освобождаются от заряда, они пустые. Делается это в режиме фона, в перерывах между любыми операциями записи и чтения.


На hdd discard не нужно. Даже если этот параметр будет явно указан, работать он не будет.


Если на картонке написать «танк» — танком картонка не станет.


На hdd можно (хоть и не всегда нужно) задействовать noatime.


Каждый раз при создании нового файла записывается много всякой служебной информации — она нужна и важна. И каждый раз при обращении к какому-нибудь файлу тоже записывается служебная информация. Монтирование файловой системы с noatime это приказ системе «Do not update inode access times on this filesystem».


Add the "noatime" (or the default "relatime") mount option in /etc/fstab, to disable (or significantly reduce) disk writes whenever a file is read.


This improves filesystem read performance for both SSDs and HDDs.


Надо понимать, что через noatime снижается уровень журналирования, и при сбое восстановление системы может быть или затруднено, или невозможно. В этом смысле преимущества ext4 отменяются. Но в любом случае восстановление не всегда возможно, спасение только в бэкапах на внешние устройства.


Нужен ли TRIM для swap


Да, если swap установлен на ssd. Если на hdd, то можно не заморачиваться.


Нужно ли ставить swap на ssd, если есть hdd? Когда-то это было важно, для современных ssd это не имеет особого значения.


Опции "noatime" (и его дочернее "nodiratime") для swap точно не нужно.


Нужен ли TRIM для /tmp


Да, если /tmp монтируется на отдельном разделе.


Нужен ли TRIM для зашифрованных разделов


Нет.


Официально заявлено, что The "discard" options with on-disk-cryptography (like dm-crypt) have drawbacks with security/cryptography.


This command can have a negative security impact because it can make filesystem-level operations visible on the physical device. For example, information leaking filesystem type, used space, etc. may be extractable from the physical device if the discarded blocks can be located later. If in doubt, do not use it.


Как проверить, включен ли TRIM


Определить диски


lsblk --discard


Вариант ответа:


NAME   DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda           0      512B       2G         0
├─sda1        0      512B       2G         0
├─sda2        0      512B       2G         0
├─sda3        0      512B       2G         0
└─sda5        0      512B       2G         0
sdb           0        0B       0B         0
├─sdb1        0        0B       0B         0
├─sdb5        0        0B       0B         0
├─sdb6        0        0B       0B         0
└─sdb7        0        0B       0B         0

Здесь


Если видим 0 (нулевые значения) в колонках DISC-GRAN (discard granularity) и DISC-MAX (discard max bytes), значит TRIM на этих разделах не работает. В данном примере понятно, что на диске sda (это мой ssd) TRIM поддерживается, а на диске sdb (это мой hdd) TRIM не поддерживается, бо не нужен.


Также в данной таблице по цифрам в разделе DISC-GRAN видно, что размер сектора на моём SSD равен 512 bytes.


Проверить, есть ли TRIM на корневом диске


По-умолчанию должен поддерживаться, но бывали диски, на которых это всё не работало.


Через утилиту hdparm



Узнать, в каком каталоге система "видит" ssd.


df


В ответной таблице поискать глазами место монтирования в /

В Debian это может быть /dev/sda
В Manjaro это может быть /dev/nvme0n1p2


Подставить нужный путь в следующую команду


sudo hdparm -I /dev/sda | grep "TRIM supported"


Ждем ответ вроде Data Set Management TRIM supported (limit 8 blocks).
Если в ответ пустота, то следует считать. что ssd не поддерживает TRIM.


Однако это не факт.


Через утилиту fstrim


sudo fstrim -v /


Очень терпеливо подождать ответ вроде


/: 119,5 GiB (128270147584 bytes) trimmed

Если его нет, значит, TRIM для корневого диска системы НЕ поддерживается. На этом всё закончилось, перед нами старый ssd, незачем его теребить.


Прочитать файл /etc/fstab


Если всё уже было настроено при установке системы, то проще узнать об этом через


cat /etc/fstab


Пример ответа


# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# [file system> [mount point>   [type>  [options>       [dump>  [pass]
# / was on /dev/sda5 during installation
UUID=5cdc213b-a7c0-41c4-a66c-69f265db52a5 /               ext4    discard,noatime,errors=remount-ro 0       1
# /home was on /dev/sdb7 during installation
UUID=3df3223a-1d70-4042-8f76-e575e0acda46 /home           ext4    discard,noatime 0       2
# /tmp was on /dev/sdb6 during installation
UUID=3c99498b-a9ad-4f7c-821b-203d9ed0f159 /tmp            ext4    discard,noatime,nodiratime 0       2
# swap was on /dev/sdb5 during installation
UUID=2ccc49fb-e364-4532-ab47-d3c9923f2cd1 none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

В частности, / у меня на ssd, а /home, /tmp и /swap – на hdd. Видно, что trim (через опцию "discard") уже включен и для корня, и для всех остальных разделов.


Как включить trim в уже работающей системе


Надо указать параметр discard у разделов в /etc/fstab.


С содержимым этого файла действовать ОСТОРОЖНО!


Сперва сделать его копию


sudo cp /etc/fstab /etc/fstab.bak


Открыть файл /etc/fstab на редактирование можно по-разному. Сперва надо убедиться в том, что в консоли не запущен MidnightCommander, бо он перехватит сочетание Ctrl+O.


На всякий случай можно не редактировать этот файл напрямую, будет открыт новый файл в /tmp.


sudo -e /etc/fstab


А можно и напрямую, чего уж:


sudo mcedit /etc/fstab


Добавить слово "discard" к тем разделам, которые физически размещаются на диске SSD.


Например:


UUID=69006d4f-bdd7-4fb8-a4ff-fe3adbcc5c73 / ext4 discard,errors=remount-ro 0 1


Тут осторожно!


Не факт, что этот параметр нужно применять ко всем разделам на диске. Рекомендуется ограничиться только настройкой корневого раздела, оставив as is все остальные.


Теперь, после перезагрузки компьютера, нужные нам разделы на SSD будут подмонтированы с параметром discard и их содержимое будет постоянно "тримиться".


Что делать в случае сбоя при загрузке


Хорошо, если система будет загружена в экспертный режим – там можно залогиниться только под root, открыть на редактирование [[/etc/fstab]> и вручную вернуть настройки для каждого раздела к исходному виду.


Ну или сразу заменить обновленный файл исходником


sudo cp /etc/fstab.bak /etc/fstab


Затем


reboot


Как определить trim под Windows



Если команда TRIM выключена, то чтобы включить команду TRIM надо ввести команду


fsutil behavior set disabledeletenotify 0