Baru-baru ini kami memiliki situasi yang agak tidak menyenangkan dengan pelanggan kami - "kios" berbasis Raspberry Pi yang digunakan untuk menampilkan data penginderaan jauh (tidak lebih mewah daripada browser mode kios yang menampilkan halaman web yang memperbarui sendiri dari server pengumpulan data) gagal melakukan booting karena korupsi sistem file. Ext4, Manual fsck diperlukan, sistem akan menjadi bagian dari presentasi penting besok, layanan diperlukan segera. Tentu saja kami tidak bisa meminta pelanggan untuk mematikan sistem dengan baik ketika mematikannya untuk malam itu; sistem harus dengan mudah menahan perlakuan buruk tersebut.
Saya ingin menghindari situasi seperti itu di masa depan, dan saya ingin memindahkan OS ke sistem file yang akan mencegah hal ini. Ada banyak filesystem yang ditujukan untuk perangkat MTD, di mana menjalankannya pada kartu SD (perangkat blok standar) memerlukan beberapa gangguan serius. Ada juga beberapa sistem file lain (penjurnalan dll) yang memiliki daya tahan yang baik terhadap korupsi. Saya masih perlu melihat beberapa perbandingan yang masuk akal dari pro dan kontra mereka.
Sistem file mana yang tersedia di Linux akan memberikan perlawanan terbaik terhadap korupsi pada kegagalan daya yang tidak terduga dan tidak perlu melompat melewati lingkaran mustahil seperti yaffs2 untuk menginstal ke SD.
Wear-balancing adalah nilai tambah, tetapi bukan keharusan - kartu SD biasanya memiliki mekanisme sendiri, jika kurang sempurna, meskipun sistem harus "lembut untuk flash" (sistem seperti NTFS dapat membunuh kartu SD dalam waktu satu bulan).
Jawaban:
Perlawanan terbaik terhadap korupsi pada kartu SD tunggal akan ditawarkan oleh BTRFS dalam mode RAID1 dengan scrub otomatis menjalankan setiap periode waktu yang telah ditentukan.
Keuntungan-keuntungan:
Inilah cara melakukannya:
Saya menjalankan RaspberryPi saya di ArchARM linux dan kartu saya ada di pembaca SD, jadi modifikasi instruksi tersebut sesuai untuk distro lain dan / dev interface.
Berikut ini contoh tata letak partisi:
Untuk memasukkan btrf ke RAID1, Anda membuat sistem file seperti ini:
Maka Anda
rsync -aAXv
ke sistem Anda yang sebelumnya didukung.Untuk mendapatkannya dari BTRFS di raid1, Anda perlu memodifikasi initramfs . Oleh karena itu, Anda perlu melakukan yang berikut selagi sistem Anda masih berjalan di sistem file lama Anda.
Raspberry biasanya tidak menggunakan mkinitcpio sehingga Anda harus menginstalnya. Kemudian, Anda perlu menambahkan "btrfs" ke array MODULES di mkinitcpio.conf dan membuat ulang initramfs dengan
Untuk mengetahui apa yang harus diketik daripada YOUR_KERNEL_VERSION, jalankan
Jika Anda memperbarui kernel, Anda HARUS membuat ulang initramfs SEBELUM Anda reboot.
Kemudian, Anda perlu memodifikasi file boot RPi.
Di cmdline.txt, Anda harus memilikinya
dan di config.txt, Anda perlu menambahkan
Setelah Anda melakukan semua itu dan berhasil mem-boot ke sistem RAID1 btrfs Anda, satu-satunya yang tersisa adalah mengatur scrub periodik (setiap 3-7 hari) baik dengan timer systemd (lebih disukai), atau cron (dcron) seperti:
Ini akan berjalan pada sistem file Anda membandingkan checksum dari semua file dan memperbaikinya (mengganti dengan salinan yang benar) jika ditemukan ada korupsi.
Kombinasi BTRFS RAID1, medium tunggal, dan Raspberry Pi menjadikannya hal yang cukup misterius. Butuh beberapa waktu dan usaha untuk menyatukan semua bagian, tetapi ini dia.
sumber
/boot
partisi yang gemuk , apakah saya masih perlu memodifikasi initramfs?Penyimpanan flash juga lebih diinginkan daripada penyimpanan magnetik, karena berbagai alasan, tetapi untuk aplikasi ini saya akan mengatakan terutama karena tidak ada bagian yang bergerak. Yang sedang berkata, saya tidak berpikir ada filesystem 'bukti korupsi' di luar sana, tetapi ada beberapa filesystem yang kuat (ext4 menjadi satu) di luar sana, serta beberapa taktik untuk membantu mengurangi korupsi.
RAM Disk
Jika gambar RPi tidak harus berubah, dan kedengarannya tidak, jika tidak ada yang mencoba (atau seharusnya mencoba) menulis ke disk, kemudian coba gunakan sistem file root yang dibuat untuk dibuka ke dalam RAM . Idenya di sini adalah bahwa Anda memiliki sistem file root terkompresi pada saat boot up yang dibongkar ke dalam RAM. Semua perubahan terjadi pada disk RAM, sehingga secara efektif tidak ada tulisan pada Kartu SD, hanya membaca saat boot. ini harus mengurangi membaca / menulis ke drive Anda, melestarikan kehidupan itu. Ini mirip dengan apa yang dilakukan ketika Anda mem-boot linux dari CD , dan merupakan salah satu hal pertama yang terjadi ketika linux boot .
sumber
Saya akan pergi dengan cara lain dan hanya akan menggunakan sistem file read-only. Saya tidak pernah mendapatkan pi raspberry saya cukup stabil saat menggunakan filesystem root baca-tulis pada sdcard. Anda bisa mem-boot root Anda melalui cmdline kernel (ro) atau menggunakan initramfs dengan dukungan kuda termasuk sistem lengkap Anda.
Keduanya dimungkinkan untuk dibuat dengan sistem build buatan saya OpenADK. ( http://www.openadk.org )
sumber
Nah, masalah yang Anda alami di sini adalah bahwa menggunakan sistem file "modern" seperti ext * kemungkinan akan membuat Kartu SD Anda rusak; dari pengalaman saya yang terjadi dalam setahun, atau tahun depan jika Anda mengambil akhir yang lebih tinggi.
Masalahnya adalah bahwa sistem file modern selalu bergerak blok untuk mencegah fragmentasi data. Yang merupakan hal yang baik pada disk berputar, di mana Anda ingin semua data Anda dikumpulkan ketika memuatnya ke cache. The downside adalah bahwa ia melakukan lebih banyak menulis yang tidak bisa di-cache karena merapikan sedang ditangani ketika tidak banyak I / O terjadi.
Ini juga terjadi ketika Anda menangani banyak pencatatan, yang mungkin ingin Anda lakukan saat men-debug perangkat yang disematkan. Penulisan logging adalah jenis penulisan terburuk, karena banyak penulisan kecil yang terjadi secara teratur, yang menghasilkan banyak fragmentasi.
Seperti yang Anda katakan sistem Anda juga menangani data sensor, sangat mungkin Anda menyimpannya di flash saat datang. Dan mereka seburuk data log.
Saya mengalami masalah yang sama dengan yang Anda temui, dan inilah kesimpulan saya. Saya mencoba mencari Kartu SD yang akan dijual sebagai "lebih kuat", yaitu mampu menangani lebih banyak menulis daripada yang lain, tetapi saya tidak menemukan patokan di pasar yang berfokus pada itu, tidak seperti tolok ukur pada SSD. Karena mereka semua fokus hanya pada kecepatan, tidak mungkin untuk mengetahui jumlah penulisan per blok memori, dan teknologi yang digunakan dalam SDCard.
Padahal, saya perhatikan bahwa sandisk kelas "industri" memiliki umur yang lebih panjang tanpa nama. Yang tidak mengejutkan, ketika Anda membayar lebih, Anda mendapatkan lebih banyak.
Tetapi pada akhirnya, dengan penebangan intensif diaktifkan, saya tidak menemukan Kartu SD memiliki umur lebih dari beberapa tahun, satu tahun di mana kematian terbanyak terjadi.
Solusi yang saya temukan adalah solusi @ BigHomie's dan @wbx ': gunakan sistem file extX Read Only (karena penjurnalan tidak lagi diperlukan, Anda bahkan dapat mundur ke ext2 lama yang baik). Dan jika Anda ingin menyimpan log di dalam sesi atau menulis file sementara, Anda selalu dapat menggunakan RAMDISK.
Hanya ada tutorial dan skrip yang membantu mengisi ramdisk dengan data dari dalam bagian hanya baca sehingga Anda dapat mengeditnya untuk sesi ini.
NB: pengalaman saya menggunakan Angstrom Linux di Beaglebone, di antara uji coba 20 perangkat sensor. Pencatatan sistem itu sangat verbose, menggunakan sistem jurnal systemd.
sumber
Linux menawarkan banyak sistem file. ext4 adalah yang paling saya percayai. Ketika ragu, ext4 harus digunakan untuk partisi yang akan di-mount baca-tulis.
Sistem file ext2 jauh lebih rapuh. Ini adalah sistem file yang sangat baik untuk sistem yang dapat me-mount-nya hanya baca, atau unmount dengan benar. Tetapi korupsi sangat mungkin terjadi dengan kegagalan daya pada ext2 .
Pilihan lain dapat mempertimbangkan jfs walaupun filesystem jfs tidak dapat diandalkan di beberapa versi Linux. Korupsi lebih kecil kemungkinannya dengan jfs dibandingkan dengan ext4 . Jfs juga memiliki waktu pemasangan cepat dan waktu pemeriksaan sistem file.
sumber