Kami sedang mengerjakan sistem Linux tertanam kecil (2.6.35-ish) dengan perangkat NAND internal yang kecil untuk OS dan aplikasi (250-500Meg) dan kartu SD dengan kartu SDHC SDHC 8Gb untuk data.
Kekuatan unit dapat terputus kapan saja.
Sistem harus menyimpan data ke kartu SD. Data ini sangat penting ... itu adalah seluruh tujuan sistem. Sistem biasanya sepenuhnya terputus dari jaringan apa pun di lokasi terpencil dan data diambil melalui sneakernet setiap 4-8 minggu.
Saat ini, kami hanya punya VFAT pada kartu SD. Itu terutama sehingga klien uji pertama dapat dengan mudah menyalin data secara manual ke laptop Win7 mereka.
Namun, saya sekarang khawatir bahwa itu hanya masalah waktu sampai pemadaman listrik pada waktu yang salah menyebabkan hilangnya data.
Apa cara terbaik untuk mengkonfigurasi sistem seperti itu untuk mencegah kehilangan data? JFFS2 kedengarannya seperti apa yang saya inginkan dalam hal bagaimana menulis data (dan kebutuhan kinerja tidak tinggi sama sekali), tetapi kedengarannya cukup kludgy untuk menggunakan block2mtd, dll. Saya juga tidak yakin bagaimana leveling kartu yang dipakai akan berinteraksi dengan itu.
Apa cara terbaik untuk melakukan ini?
EDIT
Saya sekarang berpikir untuk meninggalkan filesystem VFAT dan mengalokasikan file berukuran sehari pada suatu waktu, diisi dengan 0xFF, yang seharusnya sangat membatasi paparan terhadap kegagalan siklus daya. Saya kemudian hanya dapat menambahkan catatan dalam blok-blok yang sudah ditentukan sebelumnya, dan mudah-mudahan kartu SD tidak begitu bodoh sehingga mereka menghapus / memakai tingkat penulisan ke wilayah 0xFF.
Saya dapat menggunakan noatime, tetapi adakah yang setara dengan VFAT nomtime untuk mencegah penulisan ke bidang waktu yang dimodifikasi? Saya memerlukan beberapa cara untuk mencegah pembaruan metadata sama sekali sampai file hari baru dibuat.
EDIT 2
Seseorang di pertukaran tumpukan elektronik mengingatkan saya bahwa ada juga data ECC di NAND, jadi tidak ada cara untuk mencegah perlunya menghapus.
Jadi, apakah JFFS2 melalui block2mtd sesuai dalam situasi ini?
EDIT 3
Ini lebih buruk daripada yang saya kira. Kartu SD yang saya miliki akan menghapus blok data bahkan jika Anda menulis konten yang sama persis ke disk. Eraseblocks adalah 64KB, dan itu terlalu besar untuk ditunda menulis. Saya akan menyimpan hingga 128KB data dalam NAND flash (yang dapat saya kendalikan perilaku menulis), dalam semacam jurnal, dan kemudian menulis blok 128KB ke file yang selaras 128KB dalam partisi VFAT pada kartu SD (di kasus kartu SD lainnya memiliki eraseblock 128KB).
sync
perintah setelah setiap menulis ke kartu SD, itu akan menulis bit segera setelah Anda mengubah / membuat mereka tanpa menyimpannya dalam RAM sehingga perubahan Anda setidaknya berada di kartu dan tidak akan hilang karena kehilangan daya.
sync
mungkin akan membuat masalah menjadi lebih buruk, karena itu meningkatkan sebagian kecil waktu metadata sedang diperbarui.