Все о здоровье SD-карты на Raspberry Pi
SD-карта, наряду с блоком питания, является важнейшим дополнительным компонентом Raspberry Pi. Контроль ее состояния действительно важен для обеспечения бесперебойной работы операционной системы Raspberry Pi и хорошего пользовательского опыта. В этой статье мы расскажем вам о нескольких способах проверки и мониторинга состояния вашей карты microSD.
Сначала я подробно расскажу о том, как работают карты памяти, чтобы вы могли понять возможности и ограничения проверки состояния SD-карты.
Затем я расскажу о том, как защитить карту microSD, уменьшив распространенные проблемы, с которыми сталкиваются пользователи Raspberry Pi. Мы также рассмотрим лучшие бренды карт microSD для Raspberry Pi, которые мы рекомендуем.
При желании можно опуститься еще ниже и получить только команды Linux для проверки текущего состояния карты microSD.
Основы: Внутри карты microSD
Карта 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 (рекомендуется)
SanDisk и Toshiba имеют совместное предприятие по производству флэш-памяти. Однако в 2009 году SanDisk передала права на фабрики Toshiba, чтобы стать совместным предприятием. производитель безфабричной флэш-памяти. Они до сих пор сотрудничают в области разработки памяти. SanDisk и Toshiba, а также Matshushita являются основателями стандарта SD, представленного в 1999 году. SanDisk также создала стандарт microSD.
Мы уже давно полагаемся на бренд SanDisk и до сих пор имели с ним очень хороший опыт.
Samsung (рекомендуется)
Мы также рекомендуем карты памяти Samsung. Являясь лидером на рынке флэш-памяти NAND, Samsung может идеально подобрать все компоненты SD-карты друг к другу и обладает всей необходимой информацией для создания надежного продукта.
Kingston (НЕ рекомендуется)
У нас был неудачный опыт работы с надежностью карт 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 3, 3B+ и 4 могут загружаться с USB-носителя или по сети (Ethernet), без карты microSD.
Специально для загрузки по сети рекомендуется установить карту microSD со специальной прошивкой, поскольку ошибка таймаута в загрузочном коде препятствует стабильной загрузке (Raspberry Pi 3B).
Приведенные выше пояснения о структуре флэш-памяти применимы и к USB-накопителям, поскольку они также основаны на флэш-памяти.
(**) ПримечаниеВ качестве альтернативы плавающим затворам все чаще используются флэш-памяти с захватом заряда, но принцип работы остается прежним. Флэш-память с улавливанием заряда обеспечивает более высокую плотность памяти.
Если вы хотите узнать больше о работе с SD-картами в Raspberry Pi, ознакомьтесь со статьей наши многочисленные статьи по этой теме здесь.
Привет,
есть ли способ проверить контроллер на SD-карте, сколько плохих блоков присутствует?
Проверяя это периодически, я хотел бы построить график тренда.
Спасибо за работу.
С уважением,
Питер
это невозможно для обычной 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
о, я забыл упомянуть, что большинство (но не все, черт.) карт предоставляют SMART информацию через отправку команды CMD56 на карту с аргументом 32bit int, вам нужно будет найти это магическое число из даташита и соответствующий формат данных для чтения данных. Если у вас есть даташит, то все готово, посмотрите пример кода для sdmon на github.
Если даташита нет или магическое число не опубликовано, вам придется итерировать все 31-битное (младший бит всегда 1) пространство int, чтобы взломать его силой, и это может занять от 12 часов до половины месяца в зависимости от вашей удачи. Я надеюсь, что не существует злых производителей, которые начинают свои магические числа с 0xF_______. На данный момент все магические номера, которые мне удалось взломать/собрать, начинаются с 0x1_______.
Некоторые карты требуют более сложной процедуры для считывания информации SMART, например, Apacer, но хорошо, что они предоставили необходимую информацию в техническом описании. Apacer производит OEM-карты и для других брендов, так что здесь применима та же процедура.
[...] Здоровье SD-карты (включает лучшие практики по уходу за SD-картой!) [...]
[...] Все о здоровье карт памяти SD / microSD на Raspberry Pi [...]