Делаем SD-карту защищенной от повреждений

11

Мое встроенное устройство Linux использует SD-карту для сохранения определенных диагностических данных, слишком много для внутренней флэш-памяти.

Проблема в том, что если устройство неожиданно выключилось, файловая система (FAT32) на карте повреждена.

Не существует способа предотвратить непредвиденные перебои с питанием или отключение пользователем таким образом, и устройство должно быть относительно необслуживаемым. Хуже того, данные записываются непрерывно, поэтому повреждения происходят очень часто, и Linux, обнаружив неисправный FS, автоматически перезаписывает его только для чтения.

Какие методы вы бы предложили, чтобы смягчить это? Будет ли достаточно запуска fsck.vfat при запуске?

Еще немного информации:

  • Карта не должна считаться удаляемой пользователем. Это следует рассматривать как внутренний диск. Любые данные, хранящиеся на нем, будут доступны для загрузки по сети или на USB-накопитель, и система автоматически удалит самые старые записи. Это означает, что он не должен быть читаемым на вашем обычном ПК.
  • В настоящее время система поддерживает FAT, yaffs и jffs2. Добавление других файловых систем в ядро ​​возможно, но если существуют другие возможности, мы бы предпочли их в первую очередь.
  • Запись может быть приостановлена ​​по требованию даже на несколько минут без потери данных.
  • частичная потеря данных или незначительное повреждение допустимы. Полной остановки регистрации нет.
  • события отключения питания в большинстве случаев совершенно непредсказуемы.
  • система работает на ARM9, 200 МГц, 64 МБ ОЗУ, 32 МБ встроенной флэш-памяти и использует большую часть ресурсов процессора для выполнения своей основной роли. Примите это во внимание, думая о причудливых ресурсоемких решениях.
Научная фантастика
источник
3
Вы, наверное, уже об этом подумали, но стоит упомянуть других, которые бродили по этому вопросу: большинство флэш-карт (SD, CF и т. Д.) Допускают запись всего в несколько тысяч циклов (в лучшем случае). Использование обычных карт для регистрации данных или подобных задач в конечном итоге убьет их (и обычно за меньшее время, чем думают люди).
Крис С
@ChrisS: Это в основном только для добавления и замены самых старых на новые записи, имеет присущую очень хорошую балансировку нагрузки записей, особенно в том, что заполнение карты занимает месяцы. Проблема может быть с самой записью FAT, но я верю, что контроллер делает что-то разумное в этом.
SF.
Какова стоимость, если ваше устройство выключено и не записывает эти данные на карту? Например, если диагностические данные не будут записаны, вы потеряете много времени или денег или просто не будете иметь некоторые файлы журналов?
Freiheit
1
@Freiheit: довольно неясная, хотя и не совсем не важная функция, продаваемая для покупателей, отсутствует, и, кроме того, в случае, если кто-то еще испортит и ищет козла отпущения, мы теряем один из способов защиты в суде. Самое важное - это данные до вероятного сбоя - доказательство того, что устройство работало правильно до последнего момента, а не то, что из-за его собственной ошибки события переросли в катастрофу.
SF.
Отметил. Вы явно собираете данные для чего-то важного!
Freiheit

Ответы:

8

Вы можете использовать block2mtdдрайвер для использования транзакционных файловых систем jffs2 или yaffs (2), которые вы, похоже, используете в других местах для своей SD-карты, что решило бы вашу проблему потери данных или повреждения файловой системы при отключении питания.

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

заместитель Wabbit
источник
С месяц или два, чтобы заполнить SD-карту 2 ГБ, достижение предела износа даже при полностью рандомизированной балансировке нагрузки это не должно быть проблемой.
SF.
5

Проверьте, поддерживает ли используемое вами ядро ​​флаг сброса и / или синхронизации для vfat (кажется, что некоторые версии игнорируют его, будьте осторожны!).

Или просто покончите с файловой системой, если все может войти в один файл (как в случае с необработанным потоком журнала!) Или в несколько файлов фиксированного размера (используйте разделы;)

rackandboneman
источник