Сегодня SSD стоят почти в любом компьютере. По себе знаю, что люди часто видят диск как просто пространство для файлов и не думают о том, как он внутри работает. А о том, как он справляется с удалениями и записями, и подавно. Тем не менее, хотелось бы знать, что помогает SSD быть быстрее и служить дольше. 

В этой статье я расскажу основные особенности очистки памяти и рассмотрю, как она взаимосвязана с командой TRIM. Детали под катом.

Введение

Годами мы привыкли оценивать диски по двум параметрам — скорости и объёму. Всё остальное воспринималось как второстепенное. При этом к устройствам хранения обычно есть ещё пара негласных требований. Они должны быть компактными, тихими и экономными, особенно если речь про ноутбуки и портативные накопители. И главное — они должны оставаться доступными по цене, иначе массового применения не будет.

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

Я постараюсь кратко объяснить основное, чтобы стало понятнее, почему удаление на SSD — не то же самое, что на HDD.

На обычном жёстком диске (HDD) всё прозрачно. При записи данные сохраняются на диске, а их расположение — в специальной таблице. Когда вы удаляете файл, из таблицы удаляется только адрес этого файла. Сами биты остаются на месте до тех пор, пока какие-то новые данные их не перезапишут. Поэтому программы восстановления могут найти «следы» старых файлов и вернуть их.

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

Суть в следующем: наличие или отсутствие заряда (и его уровень) меняет пороговое напряжение транзистора. Во время чтения подается проверочное напряжение. Если транзистор открывается (пропускает ток), то на битовой линии фиксируется одно значение бита (например, ноль), если остается закрытым — другое значение (например, единица). Благодаря такой схеме можно компактно объединять множество транзисторов, а запись данных осуществляется методом туннелирования FN (Фаулера-Нордхайма).

Архитектура NAND. Источник.
Архитектура NAND. Источник.

Данные в нём лежат не в одном большом массиве, а по мелким блокам памяти. Минимальная единица записи — это страница (page), в современных SSD-шниках она обычно от 4 КБ до 16 КБ. Эти страницы объединяются в более крупные блоки. У них есть свое название, блоки стирания (erase blocks), размер у них обычно около 512 КБ, хотя в современных накопителях встречаются блоки размером 1 МБ и даже 2 МБ. 

И тут важный нюанс. Нельзя взять и перезаписать отдельные данные внутри блока: чтобы записать новую страницу, сначала нужно стереть весь блок целиком. Поэтому управление записью и удалением на SSD требует дополнительных алгоритмов и команд.

То есть, для записи в уже использованный блок данных контроллер SSD сначала должен скопировать все действительные данные (которые ещё используются) и записать их в пустые страницы другого блока, очистить все страницы в текущем блоке (от живых и мёртвых данных). Только после такой очистки контроллер начинает запись новых данных в уже освобождённый блок.

Пространство, занимаемое удалёнными данными, получает что-то вроде метки «невалидное» и больше не используются. Пока не выполнена специальная очистка, контроллер не записывает новые данные поверх таких участков.

Что такое TRIM

Так мы и подошли к термину — TRIM (англ. to trim — подрезать). Это команда интерфейса стандарта ATA (Advanced Technology Attachment), которая позволяет операционной системе уведомить твердотелку о том, какие блоки данных или страниц не несут полезной нагрузки и их можно не хранить физически.

Проще говоря, TRIM (в терминах SCSI её аналог — UNMAP) сообщает SSD, какие данные можно удалить. Когда вы удаляете файлы, создаёте или форматируете разделы, ОС формирует список логических адресов (LBA). Их она объявляет незанятыми, и отправляет этот список контроллеру SSD, помечая эти блоки как свободные для повторного использования. 

Благодаря этому SSD не тратит лишние ресурсы на запись в «мусорные» области, а встроенный механизм сборки мусора (garbage collection) эффективнее объединяет свободное пространство. 

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

Запись данных на пустой и уже заполненный диски. Источник.
Запись данных на пустой и уже заполненный диски. Источник.

TRIM играет ключевую роль в управлении хранилищем. Даже после удаления файлов они некоторое время физически занимают место на диске. Пока это пространство не очищено, эффективность работы накопителя может падать, а доступный объём — уменьшаться.

Так команда TRIM влияет на долговечность твердотельного накопителя. Если данные постоянно записываются и стираются из одних и тех же ячеек NAND, эти ячейки теряют целостность. Для оптимального срока службы каждая ячейка должна использоваться примерно с той же интенсивностью, что и другие ячейки.

Это называется выравниванием износа или wear leveling. То есть постоянное перемещение данных между разными ячейками, чтобы все ячейки изнашивались равномерно. И только сам контроллер знает, где именно в данный момент лежит конкретный фрагмент файла. ОС не имеет доступа к этой карте и не может управлять размещением блоков.

Что же происходит после получения TRIM

TRIM сам по себе — это всего лишь список адресов блоков, которые ОС считает свободными или уже неиспользуемыми. Когда вы удаляете файл или выполняете «дефрагментацию» на SSD — начинается самое интересное: что с этими блоками делает контроллер, зависит от множества факторов.

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

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

Для обычного пользователя и даже для специалиста по восстановлению данных важен один факт: после TRIM, почти всегда, если вы попытаетесь прочитать эти блоки, контроллер вернёт нули — даже если физически данные ещё не удалены. Это работает для подавляющего большинства современных SSD — как SATA, так и NVMe.

Нашел еще вот такую визуализацию работы TRIM. Источник.
Нашел еще вот такую визуализацию работы TRIM. Источник.

Поддержка SSD TRIM 

Microsoft 

Microsoft Windows, начиная с версии 7 и выше, поддерживает функцию Trim. Она запускается автоматически в фоновом режиме, если вы её не отключили. Вы можете запустить её вручную или проверить, включена ли функция Trim. 

Для этого просто пропишите в командной строке, запущенной от имени администратора:

fsutil behavior query DisableDeleteNotify
  • DisableDeleteNotify = 0 означает, что Trim включён (функция уведомления об удалении не отключена).

  • DisableDeleteNotify = 1 означает, что Trim отключён. 

Системы Windows XP и Vista Trim-функцию не поддерживают. 

Apple 

В MacOS с твердотельными накопителями Apple встроены функции Trim и Active Garbage Collection. Некоторые версии MacOS поддерживают твердотельные накопители сторонних производителей с дополнительным программным обеспечением или требуют активации через команду sudo trimforce enable в терминале. Чтобы проверить наличие поддержки Trim, выберите меню Apple, удерживая клавишу Option. В разделе «Информация о системе» найдите название вашего интерфейса хранилища в разделе «Оборудование». В поле «Поддержка TRIM» будет указано «Да» или «Нет».

RAID-массивы

Большинство RAID-массивов (избыточных массивов независимых дисков) не поддерживают функцию Trim, хотя ситуация меняется. С каждым поколением всё больше RAID-программ поддерживают Trim, поэтому уточните, какое именно программное обеспечение подходит именно вам.

Если вы используете Ubuntu версии 14.04 и выше, то включать функцию TRIM дополнительно не требуется. В данной системе она работает по умолчанию.

Как проверить поддержку TRIM 

Всё-таки если вам захотелось проверить, то протестировать работу TRIM несложно. Достаточно иметь доступ к компьютеру с Linux. Этот метод стирает данные, так что позаботьтесь заранее о своих мемах с котиками критических данных. 

Мы записываем на диск небольшой кусочек данных, потом посылаем команду TRIM и смотрим, что осталось на месте этих данных.

Для начала подключаем диск напрямую и делаем так:

1. Записываем известную сигнатуру в определённый сектор (например, 512 байт):

echo "TESTDATA1234567890" | dd of=/dev/sdX bs=512 seek=1000 count=1

2. Проверяем, что запись прошла успешно:

dd if=/dev/sdX bs=512 skip=1000 count=1 | hexdump -C

3. Отправляем команду TRIM (discard) на этот сектор (/dev/sdX меняем на адрес накопителя):

blkdiscard -o $((1000*512)) -l 512 /dev/sdX

4. Снова читаем сектор и смотрим результат:

dd if=/dev/sdX bs=512 skip=1000 count=1 | hexdump -C

Если после TRIM-сектор очищен (данные ушли, обычно возвращаются нули), значит команда работает.

Ещё один вариант, это проверить, как TRIM ведёт себя через блокиратор записи. Это такая штука, которая применяется в компьютерной криминалистике для защиты улик от изменений.

После прочтения вам может стать интересно, действительно ли блокиратор записи умеет блокировать не только запись, но и команду TRIM, это можно проверить. Опять же, на диске, на котором нет никаких важных данных. 

Сначала убедитесь, что TRIM вообще работает, сначала выполнив предыдущую последовательность. Затем мы проверим поведение через блокиратор. Повторите шаги записи сигнатуры и проверки её наличия из первого сценария, используя новую строку:

echo "TESTTRIM1234567890" | dd of=/dev/sdX bs=512 seek=1000 count=1
dd if=/dev/sdX bs=512 skip=1000 count=1 | hexdump -C

Теперь переподключите диск через блокиратор, смонтируйте его снова и выполните команду TRIM на том же секторе:

blkdiscard -o $((1000*512)) -l 512 /dev/sdX

После этого проверьте содержимое сектора ещё раз (используя команду dd из первого примера). И если вернутся нули, значит, команда TRIM срабатывает даже через защитное устройство.

Заключение

Функция продлевает срок службы накопителя, так как flash-память ограничена по числу циклов записи и при постоянной очистке многократное использование одних и тех же блоков невозможно. Кроме того, сам SSD будет работать гораздо быстрее.

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

Иначе говоря, если на диске осталось свободное место, обычно около 30-35% от общей ёмкости, контроллер эффективно управляет этой областью и поддерживает высокую скорость записи. Если же диск почти заполнен, то даже при активном TRIM скорость записи будет ниже, так как накопителю приходится сначала очищать блоки перед записью.

Что вы думаете по этому поводу? Делитесь мнением в комментариях.

© 2025 ООО «МТ ФИНАНС»

Комментарии (6)


  1. useribs
    22.11.2025 13:27

    Не хватает раздела с Linux, а именно про разные файловые системы. Где-то это реализовано по таймеру fstrim, где-то как sync/async discard. Ну и у хостеров, например, как и для чего используется TRIM внутри гостевых ОС (при thin provisioning сообщить виртуализации storage что это место свободно, при отсутствии trim занятое место будет расти до победного)


  1. MountainGoat
    22.11.2025 13:27

    HDD не так просты. Shingled HDD имеют буферную зону, куда пишут новый файл сначала, а потом при простое переносят его в основную. Копия в буферной зоне при этом физически не стирается конечно. И сомневаюсь, что всякие secure delete могут её стереть.

    TRIM таким HDD тоже нужен, потому что они постоянно в себе что-то шебуршат, реорганизуют и упаковывают. Так что пусть хотя бы не шебуршит заведомым мусором.


    1. useribs
      22.11.2025 13:27

      Точно? Не видел ниразу SMR и какие флаги они поддерживают, но думал что разница между SMR и новомодными zoned HDDs что как раз только последние рассказывают ОС про свое внутреннее устройство.


  1. Ava256
    22.11.2025 13:27

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

    Сначала было все нормально, потом из неоткуда появился какой-то блокиратор.
    Так и пишите что это перевод.


    1. ganzmavag
      22.11.2025 13:27

      Кажется там примерно вот такой перевод: https://habr.com/ru/articles/967428/

      Я с начала текста заподозрил неладное, он и по смыслу странный и фразы там какие-то не человеческие, типа

      При записи система не прячет файлы — она сохраняет их координаты в специальной таблице.

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

      Ребят, если это реально нейросеть - остановитесь, пожалуйста. Ну зачем?


    1. 15432
      22.11.2025 13:27

      О, многие SATA-USB адаптеры с поддержкой защиты от записи вообще не блокируют никакие команды, а тупо выставляют бит "Read Only" для операционки. При этом команды записи как SCSI, так и ATA Pass Through успешно проходят