Ограничение записи на SD-карту — регистрация данных

#raspberry-pi #hardware #sd-card #fat

#raspberry-pi #аппаратное обеспечение #sd-карта #Жирные

Вопрос:

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

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

Если на нем всего 100 тыс. циклов записи, через пару лет у него будет плохой блок. Но я читал, что есть схема для предотвращения этого — предотвратит ли это неисправный блок? Было бы безопаснее распространять журнал в нескольких блоках?

Спасибо

Комментарии:

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

Ответ №1:

Общий ответ на этот вопрос — сильное «это зависит». (Практический ответ — это то, что у вас уже есть; если параметры вашей файловой системы верны, в этом случае у вас большой запас.) Это зависит от следующего:

  • Тип SD-карты (SLC / MLC)
  • Контроллер SD-карты (выравнивание износа)
  • Размер SD-карты
  • файловая система
  • удача

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

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

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

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

http://en.wikipedia.org/wiki/Wear_leveling

Доступны различные типы флэш-чипов. Чипы SLC хранят только один бит на ячейку памяти (это 0 или 1), ячейки MLC хранят два или три бита. Естественно, чипы MLC более чувствительны к старению. Трехразрядные (восьмиуровневые) ячейки могут выдерживать не более 1000 операций записи. Итак, если вам нужна надежность, возьмите карту SLC, несмотря на ее более высокую цену,

Поскольку выравнивание износа распределяет износ по карте, карты большего размера стирают больше секторов, чем маленькие карты, поскольку у них больше секторов. В принципе, карта емкостью 4 гигабайта со 100 000 циклами записи сможет хранить 400 ТБ данных в течение всего срока службы.

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

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


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

Итак, мы можем просто сделать некоторые приблизительные оценки. Давайте предположим, что небольшая запись делает недействительными в среднем два блока размером 4 КБ. Таким образом, ведение журнала каждые 10 минут потребляет сектор стирания 128 КБ каждые 160 минут. Если карта представляет собой карту емкостью 8 гигабайт, на ней около 64 тыс. секторов, поэтому карта обновляется раз в 20 лет. Если карта выдержит 1000 циклов записи, она будет работать 20 000 лет…

Приведенный выше расчет предполагает идеальное выравнивание износа и очень эффективную файловую систему. Однако запас прочности в 1000 должен быть достаточным.

Конечно, это можно довольно легко испортить. Один из самых простых способов — забыть смонтировать диск с атрибутом noatime. Затем файловая система обновит время доступа к файлам, что может привести к записи при каждом обращении к файлу (даже при чтении). Или ОС заменяет виртуальную память на карту.

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

Комментарии:

1. Спасибо, что нашли время написать такой информативный ответ.