Є кілька існуючих тем, що обертаються навколо цього питання, але те, що я шукаю, є дещо іншим. У мене є вбудована карта SD на Linux, і вона страждає від втрати живлення. Можливо, я можу в якийсь момент змінити обладнання, закрити його належним чином тощо. Але зараз я просто хотів би знайти файлову систему, яка переживає втрати електроенергії без суєти. Втрати даних прийнятні. Я вважаю за краще не втрачати більше файлу, про який я зараз пишу, але я все-таки краще втрачу це все, ніж зіткнутись із «не в змозі встановити», «чекати цього 10 хвилин fsck» або «не в змозі створити новий файл через цей inode щось щось помилка '. Програма ОБОВ'ЯЗКОВО продовжить!
Я докладаю багато зусиль для забезпечення цього. Я використовую компоненти промислового класу, я отримав апаратні сторожові собаки, програмні сторожові собаки, внутрішні, зовнішні, init перезапустив програми, демони постійно перевіряють пам’ять, дескриптори файлів і багато чого іншого, я отримав сторожових спостерігачів за своїми сторожовими собаками, які в свою чергу спостерігають інші сторожові собаки ... Але я не можу гарантувати, що SD-карта може змонтуватися та функціонувати?
Моя найкраща ставка зараз - використовувати JFS на SD-картці, включити fsck і fsck.jfs в моїй установці. (Додаю 600 кбіт + з'їдаю мій баран та міг спалах. Що погано.) І запускайте fsck при кожному запуску (можливо, додаючи багато часу на завантаження. Що дещо погано.) Це здається трохи сумно.
Хтось знає про кращий спосіб чи кращу файлову систему?
ОНОВЛЕННЯ: e2fsprogs-libs (залежність від jfsutils) здається пекло складно скласти в моєму розповсюдженні. Я перегляну ZFS (хоча це не є рідним для мого розповсюдження. І, здається, робить багато, що мені не потрібно.)
ОНОВЛЕННЯ2: Ще трохи інформації про мою систему та мої тести: Зберігання SD-карт є вторинним, необов'язковим сховищем. SD-карти - це 2Gb-8Gb microSD промислового класу. SD-карта кріпиться через мій rc командою mount -t. Опції "час переходу", але не "синхронізація". Мій дистрибутив - це спеціальний uClinux з ароматизованим аналоговим пристроєм, з ядром 3,10 та службовою скринькою 1,21. Моє основне сховище - це спіралевий спалах із jffs2. У мене ніколи не було проблем з цим. Я навіть не знаю, чи є в наявності fsck.jffs2. Нанд спалах з іншого боку ... але це вже інша історія. Мета SD-карти - зберігати дані вимірювань. Програма "монітор" додасть результати до файлу та має стратегічні місця синхронізації. Коли файл вийде вище заданого розміру, буде створено новий. Після досягнення заданої кількості файлів найстаріший файл буде видалений. Якщо поточний файл вимірювання втрачено через втрату електроенергії, це не буде катастрофою. Файли зазвичай на 50-100 кбіт, і 1 результат зазвичай становить 1 кбіт. Це лише початкова фаза розвитку. Нічого не виправлено. Це перший раз, коли я маю справу з файловими системами, що не мають флеш-систем, у вбудованих системах. (Я отримав ext4 на своїх серверах x86.)
Я почав з vfat. Файлова система за замовчуванням. (Я подумав, що на фабриках може бути причина для його вибору. І якщо все працює, я не надто переймаюсь цим.) Я ніколи не бачив жодних проблем з втратою електроенергії у своїх вбудованих пристроях vfat. Однак у мене є проблеми з FAT в WinCE. Однак коли моя програма "монітор" досягла 100-200 файлів, вона більше не створювала. Здається, що FAT має спеціальну проблему з обмеженням файлів у корені та дещо більший розмір у підручниках. Мені потрібно вміти створювати 500-1000 файлів за 1 dir. Тож vfat не зробить.
Потім я перейшов на ext2. Я не вставив fsck при запуску. (Не знав, що я повинен це зробити.) Протягом дня моя програма "монітор" не змогла створити більше файлів через помилку "щось щось вводити". Катастрофа!
Моє поточне рішення ext2 з "e2fsck -y" при запуску. Поки що це здається перспективним. Але e2fsck і вся концепція 'fsck при запуску' на мене насувається. Сам e2fsck витрачає більше 350 кб мого основного спалаху та таран. (Коли він не працює.) Це означає, що це моя найбільша програма. Це більше, ніж зайнятий. Це майже конкурує з моїм ядром.
Я розглядав ext3. Він опублікував метадані, що не зашкодить. Я сумніваюся, наскільки це допоможе, хоча. Я думаю, що мої маленькі файли та керовані синхронізації мають бути охоплені? Він має впорядковану послідовність запису. Це означає, що дані також дещо реєструються. Однак це може призвести до недетермінованих відставань. Що погано в моїй ситуації. (Мабуть, це не проблема.) Він також має функцію запланованої синхронізації. Напр. здійснювати кожні 5 сек. Я думаю, що заважає моїм власним синхронізаціям. Занадто багато записів погані для карт SD. Навіть промислові. Я не можу знайти жодної документації, як це відключити. А ext3 як і раніше вимагає запуску fsck при кожному запуску! Але ext3 - це все-таки можливість.
Ext4. Виправить багато проблем із продуктивністю ext3. Мені справді не потрібна продуктивність. І мій розподіл, схоже, не має вбудованого mkfs.ext4 та fsck.ext4. Можливо, це не проблема. Це все-таки може. Напр. e2progs-libs (залежність від jfsutils), здається, має багато проблем із компіляцією.
JFS, XFS, BRFSS. Усі підтримуються моїм ядром. Наразі не входить у вікно мого простору користувачів. Здається, все це досить великі, складні системи. І всі вони, здається, вимагають еквівалент 'fsck' при запуску?
Я також розглядав можливість кинути власну файлову систему: Завжди пишіть 2 копії файлової таблиці. Під час проїзду вибирайте той, з правильним CRC та новим порядковим номером. Складіть послідовність запису на 2 етапи. Виділіть тимчасові, зафіксуйте на коміті. Fsck не потрібен. Боюся, що це може бути трохи наївно.
ОНОВЛЕННЯ3: BTW, природа вбудованих систем (як мінімум, ця) полягає в тому, що вони автономні, без нагляду, недоступні, і вони повинні працювати протягом багатьох років. Такі програми, як fsck, які можуть потребувати взаємодії з людьми, мене відштовхують.