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).
sumber
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.Jawaban:
Nah, cara Anda dapat memperbaikinya adalah dengan memperbaiki masalah "daya dapat diputus kapan saja". Apakah tidak mungkin menambah bahkan daya baterai semenit pun?
Atau, mungkin Anda bisa menggunakan dua kartu SD. Tulis data ke satu kartu, sinkronkan, tulis ke yang lain. Setiap blok data Anda akan membutuhkan checksum dan nomor blok, tetapi bahkan dengan beberapa kegagalan daya yang cukup sial, salah satu kartu harus benar.
Masalah dasar Anda adalah pemakaian level pada kartu SD, yang AFAIK tergantung pada vendor kartu (dan mungkin bahkan batch, mereka dapat mengubahnya kapan saja). Mungkin tidak menangani pemadaman listrik dengan benar. Dan tergantung apa fungsinya, itu tidak hanya berarti merusak blok yang Anda tulis.
Tentu saja, "memperbarui tabel pemetaan" tidak selalu sepele. Dan urutan 5-10 bisa berbeda (jika semuanya selesai, tidak masalah, yah, penghapusan harus dilakukan sebelum menulis, tentu saja). Tetapi terjadi kegagalan daya, Anda bisa berakhir dengan tidak hanya A rusak (seperti yang Anda harapkan) tetapi B juga. Atau, jika listrik mati saat pembaruan pemetaan, siapa yang tahu jenis korupsi apa yang akan terjadi.
sumber
Sesuatu yang serupa telah dibahas di electronics.stackexchange.com: Bagaimana cara melindungi kartu SD dari kegagalan daya yang tidak terduga?
Jawaban menyamping yang bekerja bersama - sama dengan solusi perangkat lunak adalah untuk melihat perangkat keras (ada pertanyaan tentang ESE tentang ini juga, tapi saya tidak dapat menemukannya sekarang; itu bukan semata-mata tentang kartu SD, hanya tentang perangkat kehilangan daya dan bagaimana mendeteksi ini dan menindaklanjutinya).
Ceritanya adalah: Anda mungkin tidak memiliki daya baterai, tetapi catu daya Anda memiliki beberapa kapasitor yang cukup besar untuk memperlancar pasokan. Pada dasarnya, kekuatan tidak hanya padam. Tegangan berkurang. Mungkin ada IC / sirkuit perlindungan berwarna cokelat yang menegaskan sinyal RESET pada sistem tertanam Anda ketika voltase turun di bawah titik tertentu. Motherboard PC juga memilikinya, dan merespons sinyal 'POWEROK' dari PSU. Artinya, ketika listrik padam, komputer akan secara paksa dihentikan beberapa milidetik sebelum voltase turun di bawah level aman. Selama waktu ini, periferal seperti kartu SD masih menyala, tetapi tidak ada lagi transaksi yang datang dari komputer.
Sangat mungkin bahwa kartu SD memiliki cukup waktu untuk menyelesaikan transaksi yang tertunda termasuk keausan level, sebelum kekuatannya padam. Meningkatkan catu daya Anda dengan kapasitor yang cukup besar atau menggunakannya di dekat kartu SD dapat membantu memastikan hal ini, tetapi Anda selalu dapat bereksperimen dengan platform Anda apa adanya. Sangat mungkin mempertahankan daya untuk waktu yang cukup.
Jika aspek perangkat keras dari masalahnya adalah non-masalah, Anda bisa menyelesaikannya hanya untuk perangkat lunak. ide derobert tentang menggunakan dua kartu untuk redundansi tidak buruk, dan menggunakan sistem file standar seperti VFAT lebih sedikit berisiko untuk membingungkan algoritma levelling pemakaian kartu.
Bagaimanapun, bisa jadi Anda tidak akan memiliki masalah sebanyak itu. Dengan asumsi satu blok pada kartu Anda dapat bertahan 100 menulis (konservatif - tetapi cobalah untuk mendapatkan kartu berkualitas baik!), Dan menggunakan kartu 8GB, Anda akan telah menulis 800GB pada saat blok pertama mati (tentu saja secara statistik berbicara).
sumber
Kami memiliki masalah dengan SD kami, sistem file root ext2 yang rusak pada daya tak terduga gagal. Pertama-tama, kita membuat sistem berjalan dengan mount root read-only. Karena kami memerlukan beberapa penyimpanan yang dapat ditulisi (tetapi kami bukan pencatatan data), kami menyiapkan partisi kedua sebagai yang dapat ditulisi. Untuk meminimalkan kerusakan FS pada kegagalan daya yang tidak terduga kami membuat ini partisi ext3, meskipun ini akan menyebabkan setidaknya dua kali lebih banyak menulis fisik ke kartu. Kombinasi ini (tapi saya akui penulisan partisi kedua jarang terjadi dibandingkan dengan data logger) tampaknya berjalan tanpa masalah. Sejauh ini. (Sistem diinstal selama sekitar 30 bulan di fasilitas profesional)
sumber
Untuk Keamanan Data di lingkungan dengan kemungkinan pemadaman listrik dan keamanan data secara keseluruhan, Anda harus mempertimbangkan lebih banyak poin.
GUNAKAN TANPA sel MLC untuk penyimpanan, hanya SLC yang memiliki waktu penyimpanan data yang memadai. Kemudian kartu-kartu SLC tersebut dapat memiliki firmware pintar, beberapa di antaranya tidak dapat rusak karena kehilangan daya. Mereka mengenali pemadaman listrik dengan mengukur dan memastikan bahwa blok terakhir ditulis dengan lengkap.
Kartu-kartu itu lebih mahal dan sedikit lebih lambat dari sel MLC. Lihat vendor seperti swissbit untuk kartu.
sumber