zaLinux.ru

Очень медленная работа SSD в Linux. Как проверить и включить TRIM в Linux (РЕШЕНО)


Если ваш SSD изначально показывал высокую производительность, но со временем стал заметно медленнее считывать и записывать данные или периодически скорость чтения и записи SSD резко падает, то данная статья может вам помочь.

Для SSD дисков необходимо выполнять операцию Trim и по умолчанию она включена не на всех дистрибутивах Linux

Принципы работы и хранения информации твердотельных дисков (SSD) очень сильно отличаются от жёстких дисков (HDD).

Если говорить очень упрощённо, то при удалении файла на самом деле не стираются байты, вместо этого в журнале файловой системы делается отметка, что определённые области диска, которые ранее занимались этим файлом, теперь являются свободными и могут быть перезаписаны при необходимости. Сказанное справедливо и для SSD и для HDD. Для каждого из дисковых носителей это имеет разные последствия.

Для HDD это означает, что нередко можно восстановить файл, который считается удалённым. Для традиционных жёстких дисков операция записи в те части диска, где находится файл отмеченный как удалённый, никак не отличается от записи в незанятый сектор.

SSD хранят данные в ячейках флеш-памяти, сгруппированных (в MLC) в «страницы» (обычно по 4 Кбайт каждая), которые, в свою очередь, сгруппированы в блоки (обычно 128 страниц или 512 Кбайт суммарно). Ячейки NAND-флеш-памяти могут быть непосредственно записаны лишь в том случае, когда они чисты. В случае, когда они хранят данные, содержимое ячеек должно быть очищено, прежде чем в них будут записаны новые данные. В SSD операция записи может быть проделана только для страниц, однако из-за аппаратных ограничений команда удаления всегда выполняется на весь блок. В результате, запись на SSD-носитель выполняется очень быстро до тех пор, пока существуют чистые страницы, но значительно замедляется, если необходимо очищать предварительно записанные страницы. Так как очистка ячеек в странице необходима перед тем, как в них можно будет записывать снова, но только целый блок может быть очищен, процесс перезаписи инициирует цикл чтение-очистка-модификация-запись: содержимое целого блока должно быть сохранено в кеше перед тем, как оно может быть удалено с накопителя, перезаписываемые данные модифицируются в кеше и только после этого целый блок (с обновлённой страницей) записывается на накопитель. Это явление известно как усиление записи (Write amplification (WA)).

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

Именно для этого и используется Trim — эта команда сообщает диску, какие ячейки являются на самом деле не используемыми, чтобы диск мог заранее их очистить и подготовиться для следующей записи на него.

Trim (англ. to trim — подрезать) — команда интерфейса ATA, позволяющая операционной системе уведомить твердотельный накопитель о том, какие блоки данных (страницы) не несут полезной нагрузки и их можно не хранить физически.

Смотрите также:

Как включить 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, сработает 2024-08-12 и до его срабатывания осталось 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 GiB (а это 70% всего диска — не удивительно, что скорость записи упала).

А следующая команда выполнит TRIM для диска, смонтированного в /mnt/disk_d/:

sudo fstrim -v /mnt/disk_d/

Пример вывода:

/mnt/disk_d/: 425.1 GiB (456420438016 bytes) trimmed


Время, которое требуется для 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. Убедитесь, что диск не перегревается.


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *