Безпечно використовуйте SD-карти, коли живлення може вимкнутись у будь-який час


10

Ми працюємо над невеликою вбудованою системою 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 КБ).


1
"сподіваємось, SD картки не такі дурні ..." <--- ROFLOL. Не схоже!
дероберт

Поки ви не знайдете повного вирішення проблеми, яку ви маєте, використовуйте syncкоманду після кожного запису на SD-карту, вона буде писати біти негайно після того, як ви змінили / створили їх, не зберігаючи їх в оперативній пам'яті, щоб ваші зміни були принаймні на картці і не пішли б втрати електроенергії.
Ханан Н.

syncМожливо, це погіршить ситуацію, оскільки це збільшує частину часу, коли метадані є в середині оновлення.
Ben Voigt

Відповіді:


5

Ну, спосіб виправити це - виправити проблему "живлення може бути вимкнено в будь-який час". Неможливо додати навіть хвилину заряду акумулятора?

Крім того, можливо, ви могли б використовувати дві карти SD. Запишіть дані на одну карту, синхронізуйте, запишіть на іншу. Кожен блок ваших даних потребував би контрольної суми та номера блоку, але тоді навіть при деяких досить невдалих відключеннях живлення одна з карток має бути правильною.

Ваша основна проблема полягає в вирівнюванні зносу на картах SD, яке AFAIK залежить від постачальника картки (і, можливо, навіть партії, вони можуть змінювати її коли завгодно). Він, ймовірно, не справляється з відключенням живлення правильно. І залежно від того, що це робить, це може не означати лише пошкодження блоку, про який ви пишете.

  1. Припустимо, тривіально маленька карта - 3 (спалах) блоку. Блок 1 отримав більше записів, ніж 2 або 3. Я буду називати фізичні блоки за номером, а логічні блоки A, B, C за літерою. Зараз A = 1, B = 2, C = 3.
  2. Ви видаєте запис на блок A. SD-карта схожа на ага! нам потрібне вирівнювання зносу, інакше блок 1 зношується до 2 і 3. Він вирішує поміняти блок 1 і 2.
  3. Він зчитує блок 1 в позицію i ОЗУ (на SD-картці, а не в системній ОЗУ). Він оновлює частину, яку ви хотіли змінити.
  4. Він зчитує блок 2 в положення ii оперативної пам'яті
  5. Він стирає блок 1
  6. Він записує RAM позицію ii до блоку 1.
  7. Він оновлює таблицю зіставлення на позначення B = 1
  8. Він стирає блок 2.
  9. Він записує позицію ОЗУ i в блок 2.
  10. Він оновлює таблицю зіставлення так, щоб сказати A = 2

Звичайно, "оновлення таблиці відображення" не завжди тривіально. І порядок 5–10 може бути різним (якщо всі вони завершені, це не має значення, ну і стирання повинні бути, перш ніж писати). Але трапляється відключення електроенергії, ви можете закінчитись не тільки зіпсованим (як ви очікуєте), але й B. Або якщо відмова живлення трапиться під час оновлення карти, хто знає, яку саме корупцію це спричинить.


1
Ці пристрої повинні жити у відносно суворих умовах довгі роки, і після їх встановлення вони будуть доставлятись до різних країн, для яких нам не потрібно мати право на батареї. Ми, мабуть, кинемо MMC / SD і створимо власне рішення NAND-спалаху, перш ніж використовувати акумулятор.
darron

Ну, у нашому випадку рішення "виправити" потужність може бути відключена в будь-який час "" зводиться до того, щоб "зупинити водіїв вантажівки не засипати за кермом і в'їхати в наші пристрої". "Вантажівка врізалася в нього" - це насправді про найпоширеніший режим виходу з ладу.
СФ.

1
Хвилина заряду акумулятора не потрібна. Кількість енергії, необхідної для безпечного відключення SD-карти, повинна бути в межах діапазону, який може зберігати конденсатор.
Ben Voigt

4

Щось подібне обговорювалося в electronics.stackexchange.com: Як захистити SD-карту від несподіваних збоїв живлення?

Стороною відповіддю, яка працює в тандемі з програмними рішеннями, є перегляд апаратного забезпечення (в ESE виникло питання і про це, але зараз я не можу його знайти; це було не зовсім щодо SD-карт, а лише пристроїв, що втрачають живлення і як це виявити і діяти на ньому).

Коротка історія: у вас може не бути енергії акумулятора, але у вашого джерела живлення є досить великі конденсатори, щоб згладити живлення. В основному, влада не просто згасає. Напруга звужується. Ймовірно, існує захисна мережа / захисна схема, яка подає сигнал RESET на вашій вбудованій системі, коли напруга падає нижче певної точки. Материнські плати ПК також є, і вони відповідають на сигнал "POWEROK" від блоку живлення. Це означає, що коли живлення вимкнеться, комп'ютер буде примусово зупинений за кілька мілісекунд до того, як напруга опуститься нижче безпечних рівнів. За цей час периферійні пристрої на зразок SD-карт все ще живляться, але транзакцій, що надходять від комп'ютера, більше немає.

Дуже ймовірно, що SD-карта має достатньо часу, щоб виконати будь-які очікувані транзакції, включаючи вирівнювання зносу, до того , як потужність вимкнеться. Поліпшення джерела живлення достатньо великим конденсатором або використання одного поблизу SD-карти може допомогти у цьому, але ви завжди можете експериментувати зі своєю платформою як є. Цілком ймовірно, що він зберігає силу достатньо часу.

Якщо апаратний аспект проблеми не є проблемою, ви можете вирішити лише програмне забезпечення. ідентифікація derobert використання двох карт для надмірності не є поганою, і використання стандартної файлової системи, наприклад VFAT, ризикує заплутати алгоритми вирівнювання зносу карти.

У будь-якому випадку, цілком можливо, що у вас не буде стільки проблем. Якщо припустити, що блок на вашій карті може пережити 100 записів (консервативні - але намагайтеся отримати карти хорошої якості!), А використовуючи карти 8 ГБ, ви написали 800 ГБ до моменту, коли перший блок помер (статистично кажучи, звичайно).


Питання було розпочато, тому що я вже отримував масштабну корупцію SD-карт під час подій відключення харчування. Досить часто, насправді. Можливо, 1 з 20 подій відключення електроенергії виявився катастрофічним, і, можливо, кожен четвертий пошкодив принаймні ДЕЯКІ пошкодження. Зрештою я перейшов до зберігання даних, що вартують за день, на внутрішній спалах NAND та копіювання на SD опівночі (1 секунда або близько того). Я хочу покращити справи в майбутньому. Я вже наклав ковпачки на рейці 400 фунтів ... недостатньо, мабуть ... можливо, коричневий колір не обробляється належним чином.
darron

Це досить високий рівень захворюваності! Час отримати зонди осцилографа і побачити це в дії, міркує. Хоча, ймовірно, ви можете обійти це програмним забезпеченням, найкращим способом з точки зору енергоспоживання є переконання у відсутності апаратних збоїв. Можливо, ви могли б хеджувати свої ставки і запитати на electronics.stackexchange.com також?
Алексіос

@darron, з яким рішенням ви вирішили вирішити проблему зберігання SD-карти? Ви все ще пишете на NANDFlash, а потім копіюєте раз на день? Я маю дизайн із SD-карткою як основний RFS (немає окремого NANDFlash) і бачу проблеми з пошкодженням даних, як із умовами, так і без раптових відмов живлення.
Фред Бассет

4

У нас виникла проблема з тим, що наша коренева файлова система SD2 була пошкоджена при несподіваних помилках живлення. Перш за все, ми змушуємо запускати систему з кореневим кріпленням, доступним лише для читання. Оскільки нам знадобилося певне сховище для запису (але ми не проводили реєстрацію даних), ми створили другий розділ як записуваний. Щоб мінімізувати пошкодження FS при несподіваному збої живлення, ми створили цей розділ ext3, хоча це призведе до принаймні вдвічі більшої кількості фізичних записів на карту. Ця комбінація (але, я вважаю, що наші записи другого розділу нечасті порівняно з реєстратором даних), здається, працює без проблем. Так далеко. (Системи, встановлені близько 30 місяців у професійних установах)


3

Для безпеки даних у середовищі з можливістю вимкнення електроенергії та загальної безпеки даних ви повинні збільшити ще більше балів.

ВИКОРИСТУЙТЕ НЕ MLC комірок для зберігання, лише у SLC є час збереження даних, який достатній. Тоді ці картки SLC можуть мати інтелектуальне програмне забезпечення, деякі не можуть бути пошкоджені втратою електроенергії. Вони розпізнають вимкнення електроенергії, вимірюючи і впевнені, що останній блок записаний повністю.

Ці картки коштують дорожче і трохи повільніше, ніж комірки MLC. Дивіться таких постачальників, як швейцарські картки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.