2

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

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

Если команда TRIM позволяет ОС уведомлять контроллер о ячейках, готовых к удалению, после вызова контроллер не просто "удалит" ячейку, но и удалит ее содержимое.

Если это так, то как работает восстановление на SSD?

Спасибо, at0m

1 ответ1

3

TRIM будет делать то же самое в Windows, как и в любой другой операционной системе. Это команда для SSD (или другого устройства, которое ее поддерживает), в основном просто передаваемая операционной системой.

Во-первых, здесь важны два свойства flash:

  • Чтение и запись флэш-памяти происходит быстро, но стирание происходит медленно.
  • Данный блок может быть удален только определенное количество раз, прежде чем он изнашивается.

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

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

Но твердотельные накопители, SD-карты, USB-накопители и большинство других типов блочных флэш-устройств не позволяют правильно использовать эти файловые системы, связанные с флэш-памятью, поскольку между необработанной флэш-памятью и интерфейсом блочного устройства существует так называемый слой трансляции флэш-памяти. Этот слой не может быть обойден и эмулирует традиционное (магнитное) блочное устройство поверх вспышки. Он реализует необходимое выравнивание износа, рассеивая виртуальные блоки эмулируемого блочного устройства по разным физическим местам таким образом, который меняется каждый раз, когда блок перезаписывается. Это также позволяет виртуальному блочному устройству иметь небольшой размер блока, который напоминает размер блока традиционных блочных устройств (что-то вроде 512 байт или 4096 байт), даже если размер физического флэш-блока стирания намного больше (обычно 128 КБ).

В простейшем случае FTL (уровень флэш-трансляции) должен выполнять следующую работу каждый раз, когда вы пишете блок на виртуальном блочном устройстве, предполагая, что размер блока флэш-стирания составляет 128 КБ, а размер виртуального блока - 4 КБ:

  • Прочитать весь физический блок (который содержит 32 виртуальных блока)
  • Замените тот, который вы пишете, новым содержанием, а остальные 31 оставьте как есть.
  • Сотрите новый флэш-блок где-нибудь на устройстве (или возьмите тот, который уже был стерт недавно)
  • Напишите на нем новый набор из 32 виртуальных блоков.

Реальные FTL делают много умных оптимизаций, чтобы избежать необходимости часто выполнять этот полномасштабный процесс, так что он не так плох, как кажется. Но независимо от того, работа FTL когда-нибудь будет включать переписывание новых копий несвязанных блоков, когда пишется какой-то другой блок.

Беда в том, что это иногда напрасная работа! FTL не знает, какие блоки используются, а какие свободны. Это работа файловой системы, которая находится поверх виртуального блочного устройства. Нет необходимости переписывать копии блоков, которые фактически свободны, потому что никого не волнует, изменится ли содержимое этих блоков во время одной из операций переотображения и перезаписи FTL. Если бы только у FTL был способ сказать, какие виртуальные блоки ему не нужно заботиться о сохранении. Ну, этот способ существует, и он называется TRIM. TRIM сохранит вашу вспышку, позволяя FTL реже стирать и перезаписывать блоки.

Теперь, на этом фоне, к вашему вопросу: как работает восстановление на SSD?

Что ж, файловая система, которая находится над FTL, не должна TRIMing каких-либо блоков, к которым она все еще нуждается в доступе, поэтому я не вижу актуальности вопроса. Если в файловой системе есть ошибки, то, скорее всего, восстановление будет зависеть от того, насколько серьезная ошибка, я думаю. Но нет никаких сомнений в том, что с TRIM или без него дополнительная сложность уровня FTL наверняка сделает восстановление коррупции более трудным при некоторых обстоятельствах, например, если информация сопоставления виртуальных и физических объектов FTL будет повреждена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .