Ресурс перезаписи — почти единственный паспортный параметр накопителя, который прямо ограничивает срок службы устройства. Его указывают либо суммарным объёмом записанных данных, либо числом полных перезаписей ёмкости за сутки на протяжении гарантийного срока. Обе формулировки остаются абстракцией до тех пор, пока не сопоставлены с реальным потоком записи. Один и тот же накопитель под архивом снимков переживёт материнскую плату, а под журналом транзакций израсходует запас за пару лет.

Что именно изнашивается в ячейке

Флеш-ячейка хранит заряд на изолированном затворе, отделённом от канала тонким слоем диэлектрика. Чтобы записать или стереть значение, заряд протаскивают через этот слой туннелированием под высоким напряжением. Каждый такой проход оставляет в диэлектрике дефекты: часть электронов застревает в ловушках, слой постепенно теряет изолирующие свойства, окно между уровнями заряда сужается.

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

Изнашивает ячейку не запись сама по себе, а цикл «стирание — программирование». Стирание идёт целыми блоками, а запись — страницами внутри блока, и эта асимметрия определяет всё дальнейшее.

Коэффициент усиления записи

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

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

Порядок расчёта

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

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

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

Как увеличить запас, не меняя тип памяти

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

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

Признаки исчерпания

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

Финальная стадия у многих контроллеров реализована как принудительный переход в режим только для чтения: устройство перестаёт принимать запись, но отдаёт содержимое. Рассчитывать на этот режим как на страховку не стоит — он предусмотрен не везде и не всегда срабатывает штатно. Единственная надёжная реакция на снижение показателей ресурса — заблаговременная замена и актуальная резервная копия.