Saya menjalankan sistem tertanam kecil uClibc
dan busybox
berbasis pada perangkat x86. Saya menggunakan initramfs tetapi saya juga memasang ext3
direktori khusus pada perangkat flash ringkas dalam mode IDE yang saya gunakan untuk menyimpan data pencatatan pengukuran yang dibuat oleh aplikasi c ++ yang dibuat khusus. Saya memilih ext3
sistem file karena direkomendasikan untuk keamanan terhadap kehilangan daya saat menggunakan drive CF dalam mode IDE dalam beberapa buku yang telah saya baca ( Membangun Sistem Linux Tertanam oleh Karim Yaghmour dan Embedded Linux Primer oleh Christopher Hallinan). Ini sangat penting dan datanya sangat penting.
Namun, karena beberapa komentar dalam pertanyaan saya sebelumnya Kebingungan dengan cara mengembalikan file ext3 yang korup jika pemadaman listrik terjadi selama file menulis , akan tampak bahwa sebenarnya sistem file ini tidak menawarkan jaminan keamanan terhadap korupsi data karena daya kerugian. Jadi saya ingin tahu apakah
- Apakah
ext3
sebenarnya pilihan terbaik untuk pengaturan ini? - Apakah kehilangan daya selama operasi penulisan disk hanya merusak sebagian data yang saya tambahkan ke file secara berkala atau dapatkah merusak seluruh file?
- Apakah data yang tidak ditulis pada titik kehilangan daya benar-benar aman? Secara khusus, apakah ada risiko
initramfs.cpio
file saya bisa rusak juga? - Apakah ada metode apa pun yang dapat saya gunakan dalam kode aplikasi saya untuk melindungi data (yaitu membuat partisi tambahan dan menulis data saya ke gambar cermin sehingga selalu ada 2 salinan) - kecepatan bukanlah masalah nyata untuk aplikasi saya sehingga operasi penyalinan yang mahal dapat diterima.
Saya telah melihat dan membaca jawaban untuk pertanyaan terkait ini: Apakah sistem file jurnal menjamin terhadap korupsi setelah kegagalan daya? , tapi itu tidak cukup menutupi beberapa hal yang membingungkan saya.
Saya menyadari bahwa saya mengajukan banyak pertanyaan, tetapi meskipun membaca banyak materi, saya memiliki kegagalan mendasar untuk memahami risiko terhadap data saya jika terjadi kehilangan daya.
sumber
Tampak bagi saya bahwa apa yang dapat dicapai oleh implementasi sistem file jika kehilangan daya tiba-tiba terbatas - bagaimanapun juga, itu sebenarnya berinteraksi dengan perangkat keras, jadi apa yang terjadi antara waktu ia mengirim data / instruksi ke perangkat keras dan ketika itu mendapat respons di luar kendali. Jika ada sistem file yang dapat menghindari masalah ini, Anda pasti sudah mendengarnya.
Karena itu, strategi untuk melindungi data penting akan mendapat manfaat besar dari keputusan yang dibuat pada tingkat perangkat keras , misalnya, dengan menggunakan catu daya yang tidak pernah terputus. Mungkin ini tidak begitu layak dalam situasi Anda.
Anda sudah mengatakan kinerja bukan masalah besar, jadi manfaatkan penggunaannya
fsync()
.Saya telah menggunakan filesystem extN secara pribadi dan pada server internet lalu lintas rendah-menengah selama bertahun-tahun, dan seperti Alexios saya belum melihat banyak korupsi karena kegagalan daya (walaupun untuk bersikap adil, server memiliki UPS dan saya tidak dapat mengingat salah satu dari mereka benar-benar turun seperti itu). Masalah yang jauh lebih serius adalah korupsi akibat kegagalan perangkat keras, yang sistem file yang berbeda mungkin (sekali lagi) lebih mampu menangani masalah, tetapi (sekali lagi) ini pada dasarnya di luar kendali mereka dan mereka tidak dapat mencegahnya.
Saya kadang-kadang melihat file hilang, atau terpotong ke ukuran nol. Saya kira ada peluang bagus ini bisa dipulihkan entah bagaimana; ini tidak perlu bagi saya karena mereka didukung. Sebagian besar waktu jika ada yang salah sama sekali
fsck
tampaknya menghadapinya.Saya pikir risikonya benar-benar sangat rendah hanya dari kegagalan daya, kecuali jenis penyimpanan flash korupsi dapat dikenakan karena lonjakan daya yang dapat menyertai kegagalan daya - yang saya tidak punya pengalaman dengan, tetapi mudah-mudahan Anda telah memikirkan dan meneliti ini.
Layak mengulangi poin tentang fsync () . Objek C ++ / iostream tidak memiliki metode untuk ini (:: flush dan :: sync bukan fsync), tetapi yang Anda butuhkan hanyalah deskriptor file.
sumber
sync
opsi di/etc/fstab
file karena saya mengerti bahwa ini memaksa penulisan terjadi secara sinkron. Saya berasumsi bahwa ini berarti bahwa ketika file saya menulis kode kembali, maka data telah ditulis secara fisik ke disk. Saya mengerti bahwa pemasangan dengansync
dasarnya sama dengan memanggilfsync(my_filedescriptor)
setelah menulis. Apakah pemahaman saya tentang ini benar?fsync()
pada titik yang Anda anggap tepat tidak akan menyakitkan , dan membuat sistem lebih kuat (misalnya, jika perangkat dipasang dengan santai tanpa set sinkronisasi, dll).ZFS jelas merupakan sistem file yang dilindungi dari korupsi oleh desain dan mungkin satu-satunya. Namun, saya tidak yakin tentang ketersediaan implementasi ZFS (baik berbasis sekering atau asli) untuk platform berbasis uClinux.
sumber
Setidaknya ada satu sistem file komersial yang melakukan pekerjaan luar biasa memastikan bahwa sistem file hampir tidak dapat rusak karena kegagalan daya dan bahwa satu-satunya data Anda berisiko kehilangan adalah data yang sedang ditambahkan ketika daya padam.
Sisi buruknya adalah harganya sangat mahal, di sisi atas mereka menawarkan dukungan besar. Karena biaya, itu benar-benar hanya pilihan untuk taruhan tinggi dan / atau produk volume tinggi. Seperti peralatan tertanam yang penting dalam mis. Produksi minyak dan gas yang perlu memastikan integritas sistem dalam kondisi operasi yang "tidak pasti" (mis. Pemadaman listrik yang sering, dll.).
Lihat DataLight (perusahaan) dan / atau produk " Reliance NITRO ". (Reliance adalah warisan mereka dan aman tetapi bukan solusi yang sangat efektif, digantikan oleh Reliance NITRO ). Bahkan jika Anda tidak punya uang untuk menggunakan sistem ini, mereka memiliki beberapa artikel yang cukup bagus membahas bagaimana sistem mereka bekerja, mengapa lebih dapat diandalkan daripada misalnya ext3 dan ext4.
Saya minta maaf jika ini dibaca seperti iklan, hanya ingin menunjukkan opsi.
sumber