TRIM отключен, но ведет себя как включенный

Я отключил опцию TRIM и заполнил свой SSD случайными файлами, чтобы не было свободного места. Однако когда я удалил эти файлы из корзины и скачал что-то другое, я сделал это без проблем. Возможно я ошибаюсь, но разве не должна была быть ошибка, ведь все место на SSD все равно было занято из-за отключения TRIM?

4 ответа

TL;DR: SSD-накопители имеют больше физических блоков, чем логических, и все современные прошивки SSD используют семантику копирования при записи при обновлении содержимого логического блока.


Вы неправильно понимаете, как работает прошивка SSD.

Прошивка SSD различает логические блоки хранения и физические блоки хранения. ОС видит только логические блоки, а не физические блоки, и в любой момент времени каждый логический блок сопоставляется ровно с нулем или одним физическим блоком. На правильно функционирующем SSD всегда больше физических блоков, чем логических (на новеньком SSD обычно как минимум на 10 % больше).

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

Эта специальная обработка в данном контексте известна как «выравнивание износа» или, в более общем смысле, как «копирование при записи». Это сделано для того, чтобы отдельные физические блоки флэш-памяти не изнашивались слишком быстро, поскольку флэш-память ограничена по записи (отдельные флэш-ячейки фактически немного выходят из строя каждый раз, когда вы в них записываете).

Большинство современных твердотельных накопителей идут дальше и отслеживают, сколько раз был записан каждый отдельный физический блок, а затем выбирают свободный физический блок, который был записан с наименьшей степенью записи, всякий раз, когда им нужно записать данные. Однако этот улучшенный подход имеет одно существенное ограничение: прошивка не имеет возможности узнать, что логический блок больше не используется, а это означает, что физический блок, который был частью удаленного файла, не будет «освобожден» в процессе удаления. прошивку до тех пор, пока логический блок, который ей соответствует, не будет записан снова, поэтому блоки, которые в противном случае являются идеальными кандидатами на перезапись, на самом деле могут не использоваться повторно в течение длительного времени. Вы также не можете обойти это, просто стирая содержимое каждого файла перед его удалением, потому что в этом случае другой физический блок останется неиспользованным, что на самом деле не решает проблему.

Здесь на помощь приходит команда ATA (а также ее эквиваленты в других протоколах хранения). Он позволяет ОС сообщить прошивке SSD: «Эй, я не храню здесь никаких данных, вы можете использовать этот блок повторно». Однако примечательно:

  • (и все другие эквиваленты) носит в основном рекомендательный характер. Прошивка на самом деле не должна ничего делать с физическим блоком, хотя в большинстве случаев обрезанный логический блок будет считываться как все нули, все единицы или (реже) некоторый фиксированный набор байтов.
  • По нескольким причинам, даже если он поддерживается, он обычно не вызывается как часть блоков освобождения ОС в файловой системе (будь то для удаления файла или по какой-либо другой причине). В частности, старые твердотельные накопители ATA не поддерживали команды организации очередей (что делало такое встроенное использование ужасно плохим для производительности), а некоторые устройства могут заставить операцию быть синхронной, даже когда она поставлена ​​в очередь (то есть, все равно приходится ждать ее завершения, прежде чем он обрабатывает любые другие команды), что почти так же плохо.
  • TRIMне гарантирует удаление данных на физическом носителе. В зависимости от твердотельного накопителя любые данные, хранящиеся в соответствующем физическом блоке, могут сохраняться в течение неопределенного периода времени, вплоть до того времени, которое потребуется для записи на устройство, чтобы привести к перезаписи этого физического блока. Однако данные в обрезанной области обычно невозможно восстановить без разборки и переподключения SSD или обновления его для использования специальной прошивки.

Кажется, вы неправильно поняли, как работает TRIM.

Компьютеру разрешено записывать данные на SSD где угодно и когда угодно. Эта область не требует предварительной обработки TRIM-med. Перезапись — это совершенно нормально, как и в случае с вращающимися жесткими дисками.

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

SSD-накопители полностью функциональны без TRIM — они могут просто работать медленнее и иметь более короткий срок службы из-за неэффективного выравнивания износа.

Нет.

TRIM — это «уведомление об удалении», поскольку ОС сообщает диску, что «эта область была (логически) удалена», чтобы диск мог стереть данные в любое время, обычно в фоновом режиме во время простоя.

Если TRIM отключен, привод узнает, что блок был удален, только при следующей записи. Для SSD все равно придется выполнить обычную очистку: найти пустую страницу для записи и обновить LPT (таблицу логико-физической трансляции) (при необходимости).

Когда ваш диск заполняется данными, SSD некуда записать, поэтому ему приходится стирать некоторые существующие блоки. Это приводит к снижению скорости записи, но НЕ к невозможности писать.


Кстати, безопасное стирание на жестком диске обычно включает в себя запись всего диска случайными данными за несколько проходов. Однако SSD я обычно считаю достаточно безопасным, чтобы выполнить TRIM с полным приводом (blkdiscard) и оставьте его включенным на некоторое время.

Это хороший вопрос. Я подозреваю, что вы думаете о Flash как о физическом устройстве, которое необходимо стереть, прежде чем его можно будет записать. Маршрутизаторы, отдельные флэш-чипы и встроенные микроконтроллеры обычно имеют этот тип.

Однако твердотельные накопители имеют контроллер, благодаря которому устройство выглядит для компьютера как механический диск (по причинам устаревшего типа). Это означает, что компьютер может произвольно перезаписывать разделы диска без необходимости самостоятельно выдавать команды стирания*. Это медленно, особенно если операция записи компьютера не изменила весь блок стирания флэш-памяти (таким образом, требуется переместить действительные разделы в другой регион, что занимает больше времени).

Для решения этой проблемы был создан TRIM. TRIM — это сигнал контроллеру флэш-памяти о том, что некоторые разделы памяти больше не содержат данных (пустое/удаленное — это не то же самое, что «неиспользуемое»). Затем контроллер может выбрать неиспользуемые блоки для хранения новых файлов, поскольку ему не нужно будет перемещать из них какие-либо данные перед стиранием.

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

*Есть дополнительные подробности о том, как работают выравнивание износа флэш-памяти и эта функция «эмуляции механического привода», но они здесь не очень важны.

Другие вопросы по тегам