Делаем SD-карту защищенной от повреждений
Мое встроенное устройство Linux использует SD-карту для сохранения определенных диагностических данных, слишком много для внутренней флэш-памяти.
Проблема заключается в том, что если устройство неожиданно выключается, файловая система (FAT32) на карте повреждена.
Не существует способа предотвратить непредвиденные перебои с питанием или отключение пользователем таким образом, и устройство должно быть относительно необслуживаемым. Хуже того, данные записываются непрерывно, поэтому повреждения происходят очень часто, и Linux, обнаружив неисправный FS, автоматически перезаписывает его только для чтения.
Какие методы вы бы предложили, чтобы смягчить это? Будет ли достаточно запуска fsck.vfat при запуске?
Еще немного информации:
- Карта не должна считаться удаляемой пользователем. Это следует рассматривать как внутренний диск. Any data stored on it will be accessible for download over the network or to a usb drive, and the system automatically purges oldest entries. That means it does not need to be readable in your average PC.
- The system currently supports FAT, yaffs and jffs2. Adding other filesystems to the kernel is possible but if other avenues exist, we'd prefer them first.
- Writing can be suspended on demand even for several minutes without data loss.
- partial data loss or minor corruption is acceptable. Complete stopping of logging is not.
- the poweroff events are completely unpredictable most of the time.
- the system is running on ARM9, 200MHZ, 64MB RAM, 32MB internal flash and uses up most of CPU power for its primary role. Take this into consideration while thinking of fancy resource-heavy solutions.
2 ответа
Вы могли бы использовать block2mtd
драйвер для использования транзакционных файловых систем jffs2 или yaffs(2), которые вы, похоже, используете в других местах для своей SD-карты, что решило бы вашу проблему потери данных или повреждения файловой системы при отключении питания.
Однако это может повлечь за собой другие проблемы. Поскольку SD-карта, скорее всего, будет иметь собственные механизмы выравнивания износа и переназначения секторов, они могут мешать работе jffs2 и yaffs, делая то же самое, уменьшая срок службы или производительность вашей SD-карты. Если это не проблема, стоит попробовать.
Проверьте, поддерживает ли используемое вами ядро флаг сброса и / или синхронизации для vfat (кажется, что некоторые версии игнорируют его, будьте осторожны!).
Или просто покончите с файловой системой, если все может войти в один файл (как в случае с необработанным потоком журнала!) Или в несколько файлов фиксированного размера (используйте разделы;)