SSD очень медленный в Linux. Как проверить и включить TRIM в Linux (РЕШЕНО)
Если ваш SSD изначально показывал высокую производительность, но со временем стал заметно медленнее читать и записывать данные или периодически скорость чтения и записи SSD резко падает, то эта статья может вам помочь.
Для SSD-накопителей необходимо выполнить операцию Trim, которая по умолчанию не включена в некоторых дистрибутивах Linux
Принципы работы и хранения информации твердотельных накопителей (SSD) сильно отличаются от жестких дисков (HDD).
Если очень упрощенно, то при удалении файла байты на самом деле не стираются, вместо этого в журнале файловой системы делается отметка о том, что определенные области диска, которые ранее были заняты этим файлом, теперь свободны и при необходимости могут быть перезаписаны. Это справедливо как для SSD, так и для HDD. Для каждого из дисков это имеет разные последствия.
Для жесткого диска это означает, что зачастую можно восстановить файл, который считается удаленным. Для традиционных жестких дисков запись в те части диска, где находится файл, помеченный как удаленный, ничем не отличается от записи в незанятый сектор.
SSD-накопители хранят данные в ячейках флэш-памяти, сгруппированных (в MLC) в «страницы» (обычно по 4 КБ каждая), которые, в свою очередь, группируются в блоки (обычно 128 страниц или всего 512 КБ). Непосредственную запись в ячейки флэш-памяти NAND можно выполнять только в том случае, если они чистые. Когда они хранят данные, содержимое ячеек должно быть стерто, прежде чем в них можно будет записать новые данные. В твердотельных накопителях операция записи может выполняться только на страницах, но из-за аппаратных ограничений команда стирания всегда выполняется на всем блоке. В результате запись на SSD происходит очень быстро, пока есть чистые страницы, но существенно замедляется, если необходимо стереть ранее записанные страницы. Поскольку ячейки на странице должны быть очищены, прежде чем в них можно будет снова записать, а очистить можно только весь блок, процесс перезаписи инициирует цикл чтения-очистки-изменения-записи: содержимое всего блока должно быть сохранено в в кеше, прежде чем их можно будет вытеснить с диска, перезаписываемые данные модифицируются в кеше, и только тогда весь блок (с обновленной страницей) записывается на накопитель. Это явление известно как усиление записи (WA).
По сути, вам необходимо заранее сообщить SSD, какие ячейки больше не используются, чтобы накопитель мог очистить их и подготовить к следующей записи. Если диск не готов к этому, он очистит неиспользуемые ячейки перед записью, что задержит запись.
Для этого и нужен Trim — он сообщает диску, какие ячейки на самом деле не используются, чтобы диск мог заранее их очистить и подготовиться к следующей записи в него.
Команда обрезки (известная как TRIM в наборе команд ATA и UNMAP в наборе команд SCSI) позволяет операционной системе информировать твердотельный накопитель (SSD), какие блоки данных больше не считаются «используемыми» и поэтому их можно стереть изнутри.
См. также:
- https://en.wikipedia.org/wiki/Trim_(вычисления)
Как включить TRIM в Linux
По умолчанию TRIM уже включен в большинстве дистрибутивов Linux.
Но, во-первых, в некоторых дистрибутивах эту службу нужно включать самостоятельно (например, в Arch Linux, который устанавливается и настраивается пользователем с нуля).
Во-вторых, вы можете захотеть изменить настройки частоты команды TRIM. По умолчанию операция TRIM выполняется автоматически один раз в неделю. Если ваш SSD практически полностью занят (мало свободного места) и вы активно записываете и удаляете на него файлы, то может оказаться, что для этого диска желательно запускать команду TRIM чаще.
Как включить автоматический TRIM в Linux
Сначала проверьте статус fstrim.timer, для этого выполните следующую команду:
systemctl status fstrim.timer
Если вы видите, что статус
Active: active (waiting)
Это означает, что служба fstrim уже добавлена в автоматический запуск.
Полный вывод:
● fstrim.timer - Discard unused filesystem blocks once a week
Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; preset: disabled)
Active: active (waiting) since Fri 2024-08-09 10:39:52 +07; 1h 41min ago
Invocation: c27c5ed11be644d79d071cba5033719b
Trigger: Mon 2024-08-12 00:56:05 +07; 2 days left
Triggers: ● fstrim.service
Docs: man:fstrim
Aug 09 10:39:52 HackWare systemd[1]: Started Discard unused filesystem blocks once a week.
В этих выводах вы можете видеть, что триггер, активирующий TRIM, сработает 12 августа 2024 г., и до его срабатывания осталось 2 дня.
Если вы видите статус fstrim.timer как неактивный:
Active: inactive (dead)
Затем вы можете включить автоматический TRIM в Linux с помощью следующих команд:
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
Если вы хотите изменить частоту TRIM в Linux, используйте следующую команду:
sudo systemctl edit fstrim.timer
Как вручную выполнить TRIM
Вы можете вручную выполнить TRIM в любое время для конкретного диска или для всех смонтированных файловых систем (поддерживаются только смонтированные файловые системы).
sudo fstrim -v MOUNTPOINT
Здесь вместо MOUNTPOINT нужно указать точку монтирования, например, чтобы выполнить TRIM для диска, являющегося корневым разделом файловой системы:
sudo fstrim -v /
Пример вывода:
/: 628 GiB (674344615936 bytes) trimmed
То есть благодаря операции TRIM для последующей быстрой записи было подготовлено 628 ГиБ (а это 70% всего диска — недаром скорость записи упала).
Следующая команда выполнит TRIM на диске, смонтированном в /mnt/disk_d/:
sudo fstrim -v /mnt/disk_d/
Пример вывода:
/mnt/disk_d/: 425.1 GiB (456420438016 bytes) trimmed
Время, необходимое для завершения TRIM, зависит от объема обрабатываемых данных. Операция может занять несколько минут, если для TRIM имеются сотни гигабайт. Повторный запуск TRIM завершится намного быстрее, если в TRIM не будет новых данных.
Вместо указания точки монтирования вы можете выбрать один из следующих вариантов.
Опция -a (--all) означает выполнение TRIM для всех смонтированных файловых систем.
Пример :
sudo fstrim -v -a
Опция -A (--fstab) означает выполнение TRIM для всех смонтированных файловых систем, упомянутых в /etc/fstab.
Пример :
sudo fstrim -v -A
Диски, не поддерживающие TRIM, автоматически пропускаются.
TRIM включен, но SSD по-прежнему работает очень медленно
Если операция TRIM не решила вашу проблему, попробуйте следующие варианты:
1. Обновите прошивку диска.
2. Проверьте исправность диска (с помощью утилит производителя или утилит Linux).
3. Убедитесь, что диск не перегревается.