Как SD-карты реализуют защиту от записи по окончании срока службы?

Как SD-карты реализуют защиту от записи по окончании срока службы?

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

Немного предыстории: у меня была microSD, которая прослужила 2 года при интенсивном использовании Raspberry Pi, прежде чем перешла в режим защиты от записи. Я использовал dd, чтобы перенести всю ОС и файловую систему на мою новую карту. Через несколько дней использования я понял, что эта карта тоже защищала себя от записи. Я думал, что мне ужасно не повезло, пока моя вторая резервная карта не сделала то же самое почти сразу.

Это меня беспокоило, поэтому я с тех пор оставил свой Raspberry в покое. Но я начал задаваться вопросом, как SD-карта знает, что нужно защищать себя от записи. Если она ведет подсчет циклов записи, и я использовал dd для создания образа всего диска, то я, возможно, испортил свои SD-карты, заставив их думать, что они старые. Но я нигде не могу найти реализацию поведения окончания срока службы. Кто-нибудь знает, как это работает? Я бы хотел попробовать отменить ее, но защита от записи, похоже, реализована на очень низком уровне. Я даже не могу получить доступ к /dev/sdX с помощью sudo.

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

Учитывая мой многословный бэкграунд, кто-нибудь знает, как реализуется поведение, связанное с окончанием срока службы, и есть ли способ отменить случайное срабатывание поведения?

решение1

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

Хотя SanDisk уже давно предоставил некоторую информацию (https://web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/~c274/resources/hardware/SDcards/WPaperWearLevelv1.0.pdf). Хотя это, вероятно, изменилось или было улучшено, основы все еще должны применяться:

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

Даже если износ распространяется по всей карте, принцип остается тем же.

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

Поскольку емкость карты не уменьшается, а выравнивание износа на потребительских картах не перезаписывает сохраненные данные (как в SSD), некоторые типы записей могут быстро изнашивать карту. Один тип — это запись только в сектор, для чего требуется запись всего блока. В зависимости от вашей операционной системы ddможет использоваться размер блока по умолчанию, 512который может быть намного меньше размера блока карты, что приводит к огромному увеличению записи. Пример: если размер блока SD-карт составляет 16 КБ, а один сектор — 512 байт, величина износа может быть увеличена в этом случае до 31 раза! Это может быть причиной того, что ваша вторая карта вышла из строя раньше времени.

Информация об износе не копируется, поскольку она является частью оборудования SD-карты, и поэтому эта информация не может быть прочитана/восстановлена ​​обычными способами. То же самое относится и к защите от записи, поскольку сам контроллер SD-карт предотвращает это. Так что нет, если мы не говорим об аппаратной (механический переключатель в SD-картах) или программной (монтаж только для чтения) защите от записи, этот процесс необратим.

решение2

Предполагается, что на картах есть дополнительное пространство для выравнивания износа, но похоже, что те, что у вас, тупые и не имеют запасных блоков, и переходят в режим только для чтения, потому что вы записали в каждый блок на диске. Копирование файлов вместо использования ddили использование e2image -arдля копирования файловой системы ext[234] позволит избежать ненужной записи в каждый неиспользуемый блок на диске, что может помочь.

Связанный контент