Dapatkah kehilangan daya yang tidak terduga merusak instalasi Linux?

22

Saya mengembangkan aplikasi pada Linux embedded board (menjalankan Debian) misalnya Raspberry Pi, Beagle Board / Bone, atau olimex. Papan bekerja pada lingkungan yang listriknya terputus secara tak terduga (jauh lebih rumit untuk menempatkan PSU, dll.) Dan itu akan terjadi setiap hari beberapa kali. Saya ingin tahu apakah pemadaman listrik yang tidak terduga akan menyebabkan crash / masalah pada Sistem Operasi Linux? Jika itu adalah sesuatu yang harus saya khawatirkan, apa yang akan Anda sarankan untuk mencegah kerusakan pada OS terhadap pemadaman listrik yang tidak terduga?

PS. Aplikasi perlu menulis beberapa data ke media penyimpanan (kartu SD), saya pikir tidak akan cocok untuk me-mount sebagai read-only.

Penerobosan
sumber
1
Tinggal jauh dari ext2 (gunakan ext3 atau lebih tinggi) pada sistem berkas yang Anda banyak modifikasi, dan Anda harusnya OK untuk sebagian besar.
LawrenceC
Kecuali Anda sangat berhati-hati dalam menentukan kartu SD Anda, kartu - kartu tersebut tidak menjamin apa pun jika Anda memutus daya secara tidak terduga. Kartu itu mungkin berada di tengah-tengah gerakan keausan, yang mengarah ke korupsi aneh dan tak terduga — yang bahkan bisa berada di partisi yang berbeda!
derobert
Saya tidak tahu persis bagaimana melakukannya, tetapi Anda mungkin ingin mempertimbangkan untuk melakukan transaksi berbasis aplikasi kunci Anda. Dengan begitu, Anda dapat memiliki file saat ini dan cadangan. Anda menerapkan transaksi ke file Anda saat ini dan jika gagal, Anda dapat mengembalikan file saat ini dari cadangan dan mengajukan kembali transaksi. Jika Anda beralih antara saat ini dan cadangan menggunakan symlink atau bertukar nama file, maka itu dapat terjadi dengan sangat cepat dengan kemungkinan kesalahan yang jauh lebih kecil daripada dengan menyalin. Setelah pembaruan berhasil, file Anda saat ini menjadi cadangan Anda dan cadangan menjadi saat ini.
Joe
Lanjutan. Ini hampir berhasil. File baru saat ini juga akan membutuhkan transaksi yang diterapkan sehingga memerlukan pemrosesan transaksi dua kali, jadi saya yakin ada cara yang lebih baik. Bagaimanapun, itu mungkin masih jauh lebih cepat dan lebih aman daripada menyalin seluruh file jika itu besar.
Joe

Jawaban:

14

Pemadaman listrik yang tidak terduga dapat menyebabkan korupsi data sistem file - misalnya jika suatu proses telah mulai menulis ke file, tetapi belum selesai menulisnya, file tersebut mungkin hanya akan berakhir setengah tertulis. Sekarang bayangkan jika pemadaman listrik terjadi ketika Anda setengah jalan melalui peningkatan kernel ...

Seperti yang ditulis oleh l0b0, menggunakan sistem file jurnal akan membantu, karena ia akan dapat melacak apa yang sebenarnya telah dilakukan. Selain info wikipedia yang ditautkan dengan l0b0, Anda mungkin tertarik pada /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure juga .

Anda sebagai seorang programmer jelas perlu mempertimbangkan dengan hati-hati bagaimana menangani menulis ke file sehingga menjadi proses atom (yaitu baik dilakukan sepenuhnya atau tidak dilakukan sama sekali, tetapi tidak pernah setengah dilakukan). Ini masalah yang cukup kompleks.

Jenny D
sumber
10
Proses umum dalam kode untuk melindungi terhadap gangguan penulisan yang merusak file adalah bahwa alih-alih memodifikasi file.name secara langsung, Anda malah menulis file file yang sama sekali baru.name.newversion, dan kemudian menggunakan perintah delete / rename untuk mengganti versi lama dengan baru. Anda perlu menambahkan kode pembersihan untuk memulihkan dari gangguan pada setiap langkah; tetapi pendekatan ini selalu meninggalkan salinan file pada disk. Ini dapat memengaruhi desain Anda karena kinerjanya buruk memperbarui satu file besar atau membuat perubahan sering pada satu file.
Dan Neely
11

Untuk membantu meminimalkan kemungkinan kerusakan OS, sebaiknya partisi "sistem" dan "data" terpisah pada kartu SD. Dengan begitu Anda dapat memasang partisi "sistem" hanya-baca dan menggunakan FS yang sangat tangguh pada partisi "data".

Selain itu, sebagian besar papan tersebut memiliki kebutuhan daya yang sangat rendah, sehingga cadangan baterai dimungkinkan. Papan "LiPo rider" untuk Raspberry Pi dapat digunakan sebagai UPS dasar untuk memberikan pematian daya bersih yang bersih.

Stu
sumber
5

Ini akan tergantung pada

  1. apakah Anda menggunakan sistem file penjurnalan dan
  2. seberapa baik aplikasi mampu menangani pemrosesan yang dibatalkan.

Misalnya, pertimbangkan aplikasi yang memproses file dan menulis hasilnya saat dikomputasi (satu jalur output per jalur input) ke file lain. Jika daya terputus selama pemrosesan, dan aplikasi yang sama dijalankan setelah restart, itu tidak bisa hanya memulai kembali pemrosesan dari awal file input - itu berarti file output akan berisi informasi duplikat.

Mungkin sangat sulit untuk mengatakan sesuatu yang pasti tentang sistem kompleks hipotetis, tetapi sebagian besar perangkat lunak Linux yang stabil tampaknya mampu menangani crash dengan cukup baik.

l0b0
sumber
1

Karena tidak ada yang menyebutkan sistem file tertentu: sistem file yang lebih modern (ext3, ext4, ntfs) mampu menangani crash jauh lebih baik daripada sistem file yang lebih lama (ext2, ext, fat32) karena penjurnalan .

Dengan asumsi hard drive tidak macet dan tidak berbohong , kegagalan daya total tidak boleh merusak sistem file. Namun, file individual yang sedang ditulis mungkin masih rusak, jadi jika Anda sedang memperbarui OS ketika terjadi kegagalan daya, masih mungkin untuk menjatuhkan OS.

BlueRaja - Danny Pflughoeft
sumber