[ @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 не будет работать если:
- Подключение SSD диска осуществляется через USB.
- Диск SSD размечен в файловой системе FAT32.
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.
5
Для раздела на SSD диске стоит добавить параметр noatime (он же realtime) — это опции уменьшения нагрузки по записи, после этой команды не будут обновляться даты доступа к папкам и файлам. Обычно это всё делается при установке системы на этапе ручной разметки дисков, но всегда есть исключения.
Ещё есть nodiratime — это запрет на обновление даты доступа к папкам. Если включен noatime, то nodiratime указывать незачем, оно уже включено.
Если диск работает под высокой нагрузкой (сервер), может быть разумно также добавить опцию commit и указывать для неё, допустим, 60 секунд — операции записи будут отложены и станут выполняться на один раздел раз в 60 секунд.
Нужен ли TRIM на hdd
Нет.
На ssd физика хранения данных иная, нежели на hdd, поэтому надо указать опцию discard при установке системы для разделов, которые устанавливаются на ssd.
По-сути, к диску всё так же происходят обращения, и записываются новые файлы, разница только в том, как их помечают удалёнными — через trim (или discard) их никак не помечают, их просто удаляют. Ячейки освобождаются от заряда, они пустые. Делается это в режиме фона, в перерывах между любыми операциями записи и чтения.
На hdd discard не нужно. Даже если этот параметр будет явно указан, работать он не будет.
На hdd можно (хоть и не всегда нужно) задействовать noatime.
Каждый раз при создании нового файла записывается много всякой служебной информации — она нужна и важна. И каждый раз при обращении к какому-нибудь файлу тоже записывается служебная информация. Монтирование файловой системы с noatime это приказ системе «Do not update inode access times on this filesystem».
Надо понимать, что через 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.
Как проверить, включен ли 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
Здесь
- sda мой SSD.
- sdb мой HDD.
Если видим 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
В ответной таблице поискать глазами место монтирования в /
В 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.
sudo -e /etc/fstab
sudo mcedit /etc/fstab
Добавить слово "discard" к тем разделам, которые физически размещаются на диске SSD.
Например:
UUID=69006d4f-bdd7-4fb8-a4ff-fe3adbcc5c73 / ext4 discard,errors=remount-ro 0 1
Теперь, после перезагрузки компьютера, нужные нам разделы на SSD будут подмонтированы с параметром discard и их содержимое будет постоянно "тримиться".
Что делать в случае сбоя при загрузке
Хорошо, если система будет загружена в экспертный режим – там можно залогиниться только под root, открыть на редактирование [[/etc/fstab]> и вручную вернуть настройки для каждого раздела к исходному виду.
Ну или сразу заменить обновленный файл исходником
sudo cp /etc/fstab.bak /etc/fstab
Затем
reboot
Как определить trim под Windows
- В меню поиска «Start/Пуск» наберите «cmd» для поиска утилиты командной строки Windows;
- Нажмите на программу cmd правой клавишей мыши и выберите «Run as Administrator/Запуск от имени администратора»
- В командной строке наберите «fsutil behavior query DisableDeleteNotify»
- Если DisableDeleteNotify = 0, то функция TRIM активна. Если DisableDeleteNotify = 1, то функция TRIM выключена. При наборе команд не включайте кавычки.
Если команда TRIM выключена, то чтобы включить команду TRIM надо ввести команду
fsutil behavior set disabledeletenotify 0