Membuat kartu SD anti-korupsi

11

Perangkat linux saya yang tertanam menggunakan kartu SD untuk menyimpan data diagnostik tertentu, terlalu berlebihan untuk flash internal.

Masalahnya adalah jika perangkat dimatikan secara tak terduga, sistem file (FAT32) pada kartu rusak.

Tidak ada cara untuk mencegah pemadaman listrik yang tak terduga atau pengguna mematikannya seperti itu, dan perangkat harus relatif bebas perawatan. Lebih buruk lagi, data ini ditulis terus menerus, sehingga korupsi sangat sering terjadi, dan Linux setelah mendeteksi FS yang salah mencatatnya hanya-baca secara diam-diam.

Metode apa yang akan Anda sarankan untuk mengurangi ini? Apakah menjalankan fsck.vfat secara otomatis pada saat startup sudah cukup?

Beberapa info lebih lanjut:

  • Kartu ini tidak dianggap dapat dilepas oleh pengguna. Ini dianggap sebagai disk internal. Setiap data yang disimpan di dalamnya akan dapat diakses untuk diunduh melalui jaringan atau ke drive usb, dan sistem secara otomatis membersihkan entri tertua. Itu berarti tidak perlu dibaca di PC rata-rata Anda.
  • Sistem saat ini mendukung FAT, yaffs dan jffs2. Menambahkan sistem file lain ke kernel dimungkinkan tetapi jika ada jalan lain, kami lebih suka dulu.
  • Menulis dapat ditangguhkan sesuai permintaan bahkan selama beberapa menit tanpa kehilangan data.
  • hilangnya sebagian data atau korupsi kecil dapat diterima. Berhenti total logging tidak.
  • peristiwa poweroff benar-benar tidak dapat diprediksi sebagian besar waktu.
  • sistem ini berjalan pada ARM9, 200MHZ, RAM 64MB, flash internal 32MB dan menggunakan sebagian besar daya CPU untuk peran utamanya. Pertimbangkan hal ini sambil memikirkan solusi mewah yang membutuhkan banyak sumber daya.
SF.
sumber
3
Anda mungkin sudah mempertimbangkannya, tetapi ada baiknya disebutkan untuk orang lain yang berkeliaran di pertanyaan ini: Kebanyakan kartu flash (SD, CF, dll) hanya memiliki toleransi tulis beberapa ribu siklus (paling-paling). Menggunakan kartu normal untuk pencatatan data atau tugas-tugas serupa pada akhirnya akan membunuhnya (dan biasanya dalam waktu kurang dari yang dipikirkan orang).
Chris S
@ Chris: Ini sebagian besar hanya append, dan menggantikan yang tertua dengan entri terbaru, memiliki sifat inheren dari load balancing yang sangat baik dari penulisan, terutama bahwa itu bulan untuk mengisi kartu. Masalahnya mungkin dengan entri FAT itu sendiri tetapi saya percaya controller membuat sesuatu yang masuk akal tentang hal itu.
SF.
Berapa biayanya jika perangkat Anda dimatikan dan tidak menulis data ini ke kartu? Seperti jika data diagnostik tidak ditulis, apakah Anda akan kehilangan banyak waktu atau uang atau hanya tidak memiliki beberapa file log?
Freiheit
1
@Freiheit: Fitur yang agak tidak jelas meskipun tidak sepenuhnya tidak penting yang dipasarkan untuk pelanggan tidak ada, dan juga jika ada orang lain yang benar-benar buruk dan mencari kambing hitam, kita kehilangan salah satu jalan pertahanan di pengadilan. Masalahnya adalah data sebelum kemungkinan kegagalan paling berharga - bukti bahwa perangkat bekerja dengan benar sampai saat-saat terakhir, dan bukan karena kesalahannya sendiri yang menyebabkan peristiwa meningkat menjadi bencana.
SF.
Dicatat. Anda jelas mengambil data untuk sesuatu yang penting!
Freiheit

Jawaban:

8

Anda dapat menggunakan block2mtddriver untuk menggunakan sistem file jffs2 atau yaffs transaksional (2) yang tampaknya Anda gunakan di tempat lain untuk kartu SD Anda, yang akan menyelesaikan masalah kehilangan data atau korupsi sistem file di poweroff.

Namun, hal itu dapat menimbulkan masalah lain. Karena kartu SD kemungkinan memiliki mekanisme sendiri untuk meratakan keausan dan memetakan kembali sektor, ini dapat mengganggu implementasi jffs2 dan yaffs untuk melakukan hal yang sama, mengurangi umur atau kinerja kartu SD Anda. Jika ini bukan masalah, patut dicoba.

the-wabbit
sumber
Dengan satu atau dua bulan mengisi kartu SD 2GB, mencapai batas keausan bahkan dengan penyeimbangan beban yang sepenuhnya acak, ini seharusnya tidak menjadi masalah.
SF.
5

Periksa apakah kernel yang Anda gunakan mendukung flush dan / atau sync flag untuk vfat (sepertinya beberapa versi mengabaikannya, hati-hati!).

Atau singkirkan saja sistem file jika semuanya dapat masuk ke satu file (seperti halnya aliran log mentah!) Atau ke beberapa file ukuran tetap (gunakan partisi;)

pemeras dan prajurit
sumber