Ми працюємо над невеликою вбудованою системою Linux (2.6.35-ish) з невеликим внутрішнім NAND-пристроєм для ОС та додатків (250-500Meg) та SD-карткою з 8 Гб SDHC SD-карт для даних.
Потужність пристрою можна відключити в будь-який час.
Система повинна зберігати дані на картках SD. Ці дані є досить важливими ... це вся мета системи. Системи, як правило, повністю відключаються від будь-якої мережі у віддалених місцях, а дані отримують через sneakernet кожні 4-8 тижнів.
Наразі у нас просто є VFAT на SD-картах. Це було головним чином, щоб перші клієнти тесту могли легко копіювати дані вручну на свої ноутбуки Win7.
Однак зараз я переживаю, що лише питання часу, коли відключення електроенергії в неправильний час призведе до втрати даних.
Який найкращий спосіб налаштувати таку систему, щоб запобігти втраті даних? JFFS2 звучить як те, що я хотів би з точки зору того, як він записує дані (а потреби в продуктивності взагалі не високі), але для використання block2mtd звучить досить неприємно і т. Д. Я також не впевнений, як взаємодіє рівень зносу карти з цим.
Який найкращий спосіб зробити це?
EDIT
Зараз я думаю про залишення файлової системи VFAT та виділення файлів денного розміру за один раз, наповнених 0xFF, що повинно значно обмежити вплив збою циклу живлення. Тоді я міг лише додавати записи до цих попередньо створених блоків, і, сподіваємось, SD-карти не такі дурні, що вони стирали б / записували рівень записів у регіони 0xFF.
Я можу скористатися режимом часу, але чи існує еквівалент номіналу VFAT для запобігання запису в змінене часове поле? Мені потрібен спосіб запобігти будь-якому оновленню метаданих, поки не буде створено файл нового дня.
EDIT 2
Хтось із бірж стека електроніки нагадав мені, що на NAND також є дані ECC, тому немає ніякого способу запобігти необхідності стирання.
Отже, чи буде JFFS2 через block2mtd доречним у цій ситуації?
EDIT 3
Це гірше, ніж я думав. SD-карти, які у мене є, видалять блоки даних, навіть якщо ви запишете на диск такий самий вміст. Ерабезблоки мають 64 КБ, і це занадто велика кількість, щоб повністю затримати запис. Я зберігатиму до 128 КБ даних у флеш-пам’яті NAND (якою я можу керувати поведінкою запису), у своєрідний журнал, а потім запишу 128 КБ блоків у файл, вирівняний 128 КБ, у розділ VFAT на SD-картці (у у випадку, якщо інші SD-картки мають ерозольні блоки 128 КБ).
sync
команду після кожного запису на SD-карту, вона буде писати біти негайно після того, як ви змінили / створили їх, не зберігаючи їх в оперативній пам'яті, щоб ваші зміни були принаймні на картці і не пішли б втрати електроенергії.
sync
Можливо, це погіршить ситуацію, оскільки це збільшує частину часу, коли метадані є в середині оновлення.