Все о здоровье карт SD / microSD на Raspberry Pi

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

Сначала я дам подробный обзор работы карт памяти, чтобы вы могли понять возможности и ограничения проверки состояния здоровья вашей SD-карты. Затем я объясню, как защитить вашу карту microSD, уменьшив распространенные проблемы, с которыми сталкиваются пользователи Raspberry Pi. Мы также рассмотрим лучшие бренды карт памяти microSD для Raspberry Pi, которые мы рекомендуем. Если вы хотите, вы можете пропустить дальше, чтобы просто получить команды Linux для проверки текущего состояния карты microSD.

Основы: Внутри карты microSD

Inneres einer microSD Karte
Изображение: Иллюстрация внутренней части карты SD. Карта microSD имеет аналогичную структуру. Источник изображения: CC-BY-SA Korpsvart, Wikimedia Commons

Карта microSD содержит чип флэш-памяти (слева на рисунке) и микроконтроллер (справа на рисунке, обычно на базе ARM).

Flash

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

Информация всегда считывается между истоком (S) и стоком (D). Электроны, введенные в плавающий затвор, увеличивают, например, пороговое напряжение транзистора, начиная с которого будет протекать ток. Затем транзистор блокируется при нормальном напряжении считывания (не проводит ток).

Для программирования плавающего затвора используются значительно более высокие электрические напряжения (например, 10 В), чем для обычной операции считывания (например, 3,3 В). Для этого дополнительно используется управляющий затвор (V1/V2/V3).

Для стирания электроны снова выводятся из плавающего затвора путем подачи высокого отрицательного напряжения через управляющий затвор.

Компоненты флэш-памяти NAND, используемые в картах microSD, группируют отдельные транзисторы памяти в страницы, а несколько страниц - в блоки. Страница содержит от 512 до 8192 байт, блок может содержать до 256 страниц (таким образом, общий объем памяти составляет 2048 кБ при размере страницы 8 кБ).

Запись (для логической "1") может осуществляться побитно или, по крайней мере, побайтно/послово. Стирание (для логического "0") может производиться только по часовой стрелке. Информация, которая не была изменена, должна быть запрограммирована снова.

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

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

В сторону: Многоуровневые ячейки памяти

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

С одной стороны, это позволяет значительно увеличить плотность ячеек памяти, но с другой стороны, считывание происходит медленнее, и ячейки памяти гораздо чувствительнее реагируют ошибками битов на потери заряда. При использовании одноуровневых ячеек возможно от 100 000 до 1 000 000 циклов записи-стирания, при использовании TLC (трехуровневых ячеек с тремя битами на ячейку памяти) - около 1000 циклов записи-стирания.

Именно по этой причине промышленные SD-карты обычно имеют меньшую плотность памяти и используют SLC (одноуровневые ячейки) для лучшей целостности данных..

Контролер

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

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

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

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

Информация об исправлении ошибок для отдельных блоков также управляется, так что ошибки чтения могут быть исправлены контрольными суммами. Контроллер добавляет блоки с кластеризованными ошибками чтения в список плохих блоков и смещает фактическое физическое распределение логического блока.

Карта microSD обычно имеет - в зависимости от производителя - около 10% запасной емкости для замены плохих блоков на хорошие "резервные блоки".

Маленькие грязные секреты: Проблемы с флэш-памятью

Удаление происходит только по часовой стрелке

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

Дефектные блоки с завода

Флэш-память уже поставляется с дефектными блоками. В процессе эксплуатации добавляются новые дефектные блоки (плохие блоки). Поэтому контроллер старается записывать / стирать блоки как можно равномернее с помощью выравнивания износа.

Особенно чувствительны MLC и TLC

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

Читать Беспокойство

Еще не упомянутое мной, но особенно коварное явление - это Читать Беспокойство. Даже при чтении с карты памяти он может - просто читая - заставить соседние ячейки памяти в том же блоке изменить свое программирование. Вероятность этого резко возрастает после нескольких 100 000 считываний.

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

Все это - вещи, которые контроллер должен компенсировать, чтобы сделать вид, что это "идеальная карта памяти" снаружи, в то время как внутри она выглядит совсем не идеально!

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

Производитель и выбор хорошей карты

И микроконтроллер, и флеш-устройство, и готовая карта microSD могут быть от разных производителей - SD-карта Panasonic на фото в примере имеет флеш Samsung, а контроллер был сделан в Японии.

Устройства флэш-памяти NAND выпускаются четырьмя производителями:

  • Samsung <- лидер рынка
  • Toshiba
  • IM Flash Technologies (совместное предприятие Micron Technology и Intel)
  • Hynix в сотрудничестве с Numonyx

Toshiba и Samsung производят большинство всех чипов.

SanDisk

TL;DR рекомендуется

SanDisk и Toshiba имеют совместное предприятие по производству флэш-памяти. Однако в 2009 году SanDisk передала права на фабрики Toshiba, чтобы стать совместным предприятием. производитель безфабричной флэш-памяти. Разработка памяти до сих пор ведется совместно. SanDisk и Toshiba, наряду с Matshushita, являются основателями стандарта SD, представленного в 1999 году. Стандарт microSD также был создан SanDisk.

Мы уже давно полагаемся на бренд SanDisk и до сих пор имели с ним очень хороший опыт.

Samsung

TL;DR рекомендуется

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

Кингстон

TL;DR НЕ рекомендуется

У нас был неудачный опыт с надежностью карт памяти Kingston емкостью 128 ГБ в одном из критически важных проектов. У Kingston нет собственных фабрик, и она покупает избыточные мощности у других производителей флеш-памяти. В результате постоянная производительность не может быть гарантирована.

Следующее статья Банни Хуанг также интересен в этом контексте.

Toshiba

Toshiba, являясь #2 на мировом рынке DRAM, также продает свои собственные карты памяти. SanDisk и Toshiba, вместе с Matshushita, являются основателями стандарта SD, введенного в 1999 году. У нас пока нет опыта работы с картами Toshiba.

Transcend / Silicon Power

Мы также использовали карты Transcend и Silicon Power, особенно в недорогом диапазоне. Карты в основном хорошие, но мы наблюдали больше возвратов/дефектов у Transcend, чем у SanDisk. Поэтому для критически важных проектов я бы скорее рекомендовал SanDisk / Samsung.

Выбор хорошей карты памяти

Для того чтобы выбрать хорошую карту памяти, в первую очередь необходимо выбрать производителя. Мы рекомендуем Samsung или SanDisk, и, возможно, Toshiba, в шорт-лист.

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

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

В этот обзор на сайте eLinux.org Затем подходящую карту памяти можно проверить на совместимость с Raspberry Pi. Важное замечание: прошивка Raspberry Pi была несколько раз модифицирована для лучшей совместимости с картами памяти и во избежание повреждения данных.

Заказывать следует из надежных источников - например, мы получаем наши карты памяти SanDisk microSD непосредственно у Raspberry Pi Trading и авторитетных крупных немецких дистрибьюторов. На Amazon убедитесь, что заказываете непосредственно на Amazon, а не у продавца на торговой площадке.

Определенная информация (cid, csd, дата, manfid, oemid, serial) карты microSD можно прочитать с помощью Linux, чтобы проверить, что вы получили карту нужного производителя. Примеры с картой Transcend:

cd /sys/class/mmc_host/mmc?/mmc?:*
echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
 man:0x000074 oem:0x4a60 name:USD hwrev:0x1 fwrev:0x0
echo "serial:$(cat serial) mdt:$(cat date)"
serial:0x401e39f2 mdt:03/2017

Идентификатор производителя (манфид) назначается ООО "СД-3С, а также идентификатор OEM / Application ID (oemid). Сайт oemid идентифицирует OEM-производителя карты и/или содержимое карты.

Название продукта (имя) имеет длину 5 символов (ASCII). hwrev это ревизия оборудования, и fwrev ревизия микропрограммы. Вместе они представляют собой ревизию продукта (hwrev.fwrev).

Сайт серийный серийный номер карты microSD, это 32-битное поле, которое следует читать как целое число без знака.

Сайт mdt (Дата изготовления) указывает, когда была изготовлена карта - год и месяц.

Полученные значения можно сравнить со значениями на веб-сайтах для выявления мошенничества с помощью поддельных карт microSD. Рекомендую прочитать Статья в блоге Банни (одна) и эта статья (две).

Стабильный человек/эм комбинации бренда указывают на хорошо контролируемую и последовательную цепочку поставок. Например, SanDisk имеет следующую комбинацию для всех записей в eLinux.org Wiki: man:0x000003 oem:0x5344. Другие бренды, такие как Transcend, меняют своих поставщиков, поэтому постоянное качество больше не может быть гарантировано.

Избегайте повреждения данных во время работы

Карта microSD - это "жесткий диск" Raspberry Pi. При нормальной конфигурации Linux с ней обращаются точно так же, как и с жестким диском - происходит доступ как на чтение, так и на запись. Linux регистрирует информацию во многих лог-файлах и, помимо прочего, обновляет время доступа к файлам. Таким образом, данные часто изменяются и перезаписываются. Это то, для чего карты microSD изначально не предназначались.

Совет #1: правильно выключайте Raspberry Pi и используйте хороший блок питания

Вы бы не стали просто так отключать компьютер с Windows. С компьютерами Linux, и особенно с Raspberry Pi, поддерживающими карты памяти microSD, это лишь вопрос времени. перед повреждением данных во время отключения питания.

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

Как упоминалось ранее, контроллер microSD активно смещает данные во время работы для выравнивания износа и предотвращения нарушений при чтении. Это происходит без ведома системы Linux ("прозрачно"). И, в зависимости от производителя, более или менее консервативно. Также здесь - особенно во время операций записи! - возможны повреждения и потери данных.

Поэтому вы должны убедиться, что после выключения вашего Pi светодиод ACT-LED на Raspberry Pi перестал мигать, и только после этого отключить питание.

Плохой источник питания также может привести к проблемам, связанным с отключения (пониженное напряжение). Если есть сомнения, используйте блок питания, рекомендованный / поставляемый компанией Raspberry Pi Trading.

Наконечник #2 Система считывания с накладками

Система "только чтение" не защищает SD-карту от нарушений при чтении, а значит, и от старения из-за необходимых циклов стирания. Однако это происходит гораздо медленнее, чем при активной записи.

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

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

Вот некоторая информация из проекта Debian, на котором основан Raspbian: https://wiki.debian.org/ReadonlyRoot.

Используя наложения RAM-диска (в tmpfs), система может продолжать писать файлы журналов или вносить изменения в файлы. Оверлеи RAM-диска могут периодически синхронизироваться со специально выделенными разделами на SD-карте. Необходимо следить за RAM-диском, чтобы он не переполнялся (из-за файлов журналов), и, конечно, для нормальной работы доступно меньше RAM-памяти.

Мы используем эту технику с помощью нашего продукта Anonymeboxгде предполагается, что пользователи просто вынимают вилку из розетки.

Вы ищете партнера для реализации надежного решения только для чтения для вашего проекта встраиваемой системы Raspberry Pi? Мы (как pi3g e.K.) предлагаем услуги по консалтингу и развитию, для аппаратного и программного обеспечения.

Совет #3 Сокращение операций записи

Особенно в старых ядрах, Linux обновляет время доступа для каждого обращения к файлу, в соответствии со стандартом POSIX. Это означает, что каждая операция чтения автоматически приводит к операции записи. Существует возможность явного задания noatime в /etc/fstab если он еще не установлен (Raspbian, похоже, устанавливает его автоматически).

Дополнительная информация о relatime и noatime

Отключите ведение системного журнала по маске:

systemctl mask systemd-journald.service
Создана симлинка из /etc/systemd/system/systemd-journald.service на /dev/null.
sudo systemctl mask rsyslog.service
Создана симлинка из /etc/systemd/system/rsyslog.service на /dev/null.

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

Файл подкачки:

Если оперативной памяти недостаточно, Linux перемещает отдельные области оперативной памяти в файл SWAP. (Рассмотрим использование Raspberry Pi 4 с достаточным количеством оперативной памяти, например Pi 4 / 4 ГБ или Pi 4 / 8 ГБ для вашего случая использования). С помощью следующей команды можно проверить состояние SWAP-файла:

sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB: автогенерирование и использование файла подкачки
Загружен: загружен (/etc/init.d/dphys-swapfile)
Активен: активен (завершен) с Сб 2017-07-01 19:11:57 UTC; 8 мин назад
Процесс: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

Для отключения SWAP можно использовать следующую команду:

sudo systemctl disable dphys-swapfile

Заключение

Карты microSD при постоянном использовании подвергают долговременную надежность систем на базе Raspberry Pi серьезному испытанию.

Использование правильного источника питания, систем только для чтения с накладками, последовательное сокращение количества операций записи и выбор хорошей SD-карты известного бренда позволяют повысить стабильность в долгосрочной перспективе.

Если вам нужна профессиональная поддержка для вашего проекта / продукта на базе Raspberry Pi, пожалуйста, свяжитесь с нами для бесплатной первичной консультации..

Примечания

(*) Примечание: Raspberry Pi 3, 3B+ и 4 могут загружаться с USB-носителя или по сети (Ethernet), без карты microSD.

Специально для загрузки по сети все же рекомендуется установить карту microSD со специальной прошивкой, поскольку ошибка таймаута в коде загрузки препятствует стабильной загрузке (Raspberry Pi 3B).

Приведенные выше объяснения о структуре флэш-памяти относятся и к USB-накопителям, поскольку флэш-память также установлена в них.

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

3 комментариев

  1. Pete Октябрь 13, 2021 в 8:27 пп

    Привет,
    есть ли способ проверить контроллер на SD-карте, сколько плохих блоков присутствует?
    Проверяя это периодически, я хотел бы построить график тренда.
    Спасибо за работу.
    С уважением,
    Питер

    • unintell Ноябрь 9, 2022 в 3:55 пп

      это невозможно для обычной SD-карты потребительского класса, если только у вас нет MP-инструмента для конкретного используемого контроллера, который никогда не доступен.
      Это возможно, если карта промышленного класса и имеет информацию SMART (указанную в соответствующем техническом описании), и тогда вы можете написать некоторый код для считывания данных SMART.
      Но это только начало сложностей. Не существует промышленного стандарта для мониторинга состояния SD-карт, поэтому каждый производитель реализует протокол по-своему, и он не всегда публикуется.
      SMART-отчет некоторых производителей дает только процентное количество оставшегося времени жизни карты, некоторые предоставляют более подробную информацию, включая зарезервированные блоки, начальные плохие блоки, последующие плохие блоки, максимальное количество стираний, время жизни P/E и т.д.
      В настоящее время я смог прочитать статистику здоровья карт памяти от Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit и некоторых других.
      Моей мотивацией является взлом SMART информации с дешевых подержанных промышленных карт производства Foresee, на данный момент мне удалось взломать карты серий MPS/M9M/M9H/D7D/X52/X53 и я все еще работаю над некоторыми другими моделями.

      Надеюсь, что скоро появится промышленный стандарт для смарт-информации на SD-картах. Также меня позабавило, что некоторые SD-карты имеют больший ресурс TBW, чем многие SSD lmao

      • unintell Ноябрь 9, 2022 в 4:03 пп

        о, я забыл упомянуть, что большинство (но не все, черт.) карт предоставляют SMART информацию через отправку команды CMD56 на карту с аргументом 32bit int, вам нужно будет найти это магическое число из даташита и соответствующий формат данных для чтения данных. Если у вас есть даташит, то все готово, посмотрите пример кода для sdmon на github.
        Если даташита нет или магическое число не опубликовано, вам придется итерировать все 31-битное (младший бит всегда 1) пространство int, чтобы взломать его силой, и это может занять от 12 часов до половины месяца в зависимости от вашей удачи. Я надеюсь, что не существует злых производителей, которые начинают свои магические числа с 0xF_______. На данный момент все магические номера, которые мне удалось взломать/собрать, начинаются с 0x1_______.

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

Комментировать