Mencegah kerusakan data pada drive ext4 / Linux pada hilangnya daya

9

Saya memiliki beberapa papan tertanam yang menjalankan American Megatrends bios dengan embedded linux sebagai OS. Masalah yang saya miliki adalah bahwa ide kilat industri akan rusak karena kehilangan daya. Saya minta mereka diformat sebagai ext4. Setiap kali ini terjadi, saya biasanya dapat memperbaiki flash dengan fsck, tetapi ini tidak akan mungkin dilakukan dalam penerapan kami. Saya telah mendengar bahwa menonaktifkan cache tulis harus membantu, tetapi saya tidak tahu bagaimana melakukannya. Juga, adakah hal lain yang harus saya lakukan?

Info lebih lanjut

Drive adalah modul flash ide 4GB. Saya punya satu partisi yang ext4. OS diinstal pada partisi itu dan grub adalah bootloader saya.

fdisk -l menunjukkan / dev / sda sebagai modul flash saya dengan / dev / sda1 sebagai partisi utama saya.

Setelah kehilangan daya, saya biasanya tidak dapat membuatnya sepenuhnya melalui skrip init boot.

Ketika saya memasang drive di PC lain saya menjalankan fsck / dev / sda1. Itu selalu menampilkan pesan seperti

"zero datetime on node 1553 ... fix (y)?"

Saya memperbaikinya dan boot dengan baik sampai kehilangan daya berikutnya.

Ketika saya sampai di kantor besok, saya akan memposting output aktual dari fdisk -l

Ini semua yang saya tahu tentang cara kerja sistem. Saya bukan orang sistem, saya seorang Insinyur Perangkat Lunak yang memiliki kebiasaan masuk ke dalam kesulitan yang berada di luar deskripsi pekerjaannya. Saya tahu cara memformat drive, menginstal bootloader, menulis perangkat lunak, dan meretas pada sistem operasi.

Ini adalah output dari dumpe2fs

#sudo dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   VideoServer
Last mounted on:          /
Filesystem UUID:          9cba62b0-8038-4913-be30-8eb211b23d78
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              245760
Block count:              977949
Reserved block count:     48896
Free blocks:              158584
Free inodes:              102920
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      239
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Fri Feb  4 15:12:00 2011
Last mount time:          Sun Oct  2 23:48:37 2011
Last write time:          Mon Oct  3 16:34:01 2011
Mount count:              2
Maximum mount count:      26
Last checked:             Tue Oct  4 07:44:50 2011
Check interval:           15552000 (6 months)
Next check after:         Sun Apr  1 07:44:50 2012
Lifetime writes:          21 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      249d2b79-1e20-49a3-b324-6cb631294a63
Journal backup:           inode blocks
Jonathan Henson
sumber

Jawaban:

6

Cache tulis biasanya tidak ada hubungannya dengan BIOS, sebagian besar tidak ada opsi untuk beralih pengaturan cache disk di sana. Dengan linux, menggunakan hdparm -W 0harus membantu.

Pengaturan ini gigih, jadi jika Anda tidak memiliki hdparm untuk bermain-main dengan sistem produksi Anda, Anda harus dapat menonaktifkan cache tulis disk pada sistem yang berbeda dan mengganti disk.

BTW: Saya akan mendukung gagasan sistem file root yang tidak dapat ditulisi (sehingga sistem Anda bisa boot dalam semacam "mode pemulihan" dan memungkinkan akses jarak jauh bahkan jika sistem file yang dapat ditulis tidak dapat dipasang untuk beberapa alasan). Dan jika Anda dapat mengubah desain perangkat keras, pertimbangkan untuk menggunakan perangkat mtd alih-alih disk IDE / SATA dengan sistem file flash-aware seperti jffs2 . Kami telah menggunakan kombinasi ini dengan beberapa perangkat tertanam (sebagian besar solusi router VPN di lapangan) selama beberapa tahun dengan hasil yang baik.

Pembaruan: akar masalah Anda tampaknya adalah Anda menjalankan sistem file ext4 dengan penjurnalan jurnal dinonaktifkan - has_journaltidak ada dalam Filesystem featuresdaftar. Matikan saja semua layanan, periksa apakah masih ada file yang terbuka lsof +f -- /, remount partisi root Anda dengan read-only saja mount -o remount,ro /, aktifkan jurnal dengan tune2fs -O has_journal /dev/sda1dan setel mode jurnal "dipesan" sebagai opsi pemasangan default menggunakan tune2fs -o journal_data_ordered /dev/sda1- Anda harus mengulang jalankan fsck (lebih disukai dari sistem penyelamatan) dan remount root / reboot setelah operasi ini.

Dengan pengaturan ini di tempat, metadata dijamin dapat dipulihkan dari jurnal bahkan jika terjadi kegagalan daya tiba-tiba. Data aktual juga ditulis secara konsisten ke disk, meskipun Anda mungkin melihat data beberapa detik sebelum pemadaman listrik hilang saat boot. Jika ini tidak dapat diterima, Anda mungkin mempertimbangkan untuk menggunakan tune2fs -o journal_data /dev/sda1opsi mount dengan sistem file Anda - ini akan mencakup semua data yang ditulis ke disk dalam jurnal - ini jelas akan memberi Anda konsistensi data yang lebih baik tetapi dengan biaya penalti kinerja dan tingkat keausan yang lebih tinggi pada SSD Anda.

the-wabbit
sumber
Jadi, apakah cache menulis masalah saya atau sesuatu yang lain?
Jonathan Henson
Nah, bagaimana saya harus tahu, itu sistem Anda setelah semua :-) Anda harus memberikan beberapa rincian tentang opsi pemasangan sistem file yang digunakan (apakah Anda mengaktifkan extents? Apa jenis data / mode jurnal?) Dan jenis korupsi yang Anda melihat (keluaran fsck akan lebih baik) untuk analisis yang lebih rinci.
the-wabbit
Ok terima kasih. Saya seorang insinyur perangkat lunak yang tidak berdaya lho :). Saya akan mendapatkan beberapa detail. Saya menambahkan beberapa detail dalam hitungan menit.
Jonathan Henson
Saya tidak tahu apa luasannya dan saya tidak yakin apa itu mode Jurnal.
Jonathan Henson
Ah, begitu. Cukup posting baris pertama dari output dumpe2fs /dev/sda1(atau apa pun perangkat / nama partisi Anda untuk sistem ini) - mereka harus berisi semua informasi yang relevan. Dan opsi mount untuk sistem file root dari / etc / fstab juga akan membantu.
the-wabbit
5

Saran cache tulis adalah awal yang baik tetapi ini terdengar seperti cacat desain arsitektur. Pada sistem tertanam, blitz internal mungkin TIDAK boleh dipasang R / W kecuali dalam keadaan langka. Anda harus benar-benar melakukan sebagian besar pekerjaan dalam sistem file memori dan menyinkronkan perubahan kembali ke flash RW pada beberapa perintah pengguna atau interval reguler. Benar-benar tidak biasa bagi embedded system untuk menggunakan filesystem biasa (seperti ext4) dalam mode rw selama operasi normal. Jika ada beberapa persyaratan aplikasi di mana Anda memerlukan banyak ruang penyimpanan, Anda harus mempertimbangkan agar partisi sistem Anda berbeda dan mendesainnya sedemikian rupa sehingga partisi data dapat di-fsck sebagai bagian dari startup.

Jika Anda memerlukan beberapa titik awal, saya akan melihat bagaimana orang-orang mengatur sistem Diskless Linux:

http://frank.harvard.edu/~coldwell/diskless/

dan mulai dari sana. Gagasan umum adalah biner dan data sistem Anda dapat dipasang hanya-baca sehingga sistem file Anda tidak akan rusak. Namun Anda harus dapat menulis ke area tertentu, jadi Anda perlu sesuatu untuk biasanya filesystem memori / tmp, / var / tmp. Bahkan jika hal-hal tertentu perlu ditulis, Anda cukup membuat skrip untuk me-mount partisi sebagai r + w dan kemudian melakukan perubahan, kemudian kembali ke read-only.

Sebuah contoh yang sangat bagus dari hal ini adalah perangkat keras Cyclades, linux yang disematkan dan setiap kali Anda melakukan perubahan konfigurasi Anda harus menjalankan skrip save yang sebenarnya rebundles konfigurasi dan menuliskannya ke flash.

jumlahnya banyak
sumber
Ada file konfigurasi yang perlu diedit oleh aplikasi serta / etc / networks dan file hostname. Bisakah Anda memberi saya rekomendasi yaitu sesuatu seperti, Anda memerlukan satu partisi dengan tipe ini dan itu dan yang lain untuk file konfigurasi Anda dari jenis lain dan seterusnya? Saya benar-benar tidak tahu tentang hal-hal ini. Saya menulis perangkat lunak dan secara ajaib diharapkan untuk tahu persis (bukan bahwa saya tidak cukup tahu untuk menulis perangkat lunak * nix, tapi saya tentu saja tidak tahu sebanyak orang yang berdedikasi sistem) bagaimana perangkat keras harus bekerja oleh majikan saya.
Jonathan Henson
Tentu, saya memperbarui jawabannya untuk memasukkan lebih banyak info. Ini adalah topik yang cukup kompleks untuk dibahas dalam satu pertanyaan karena berurusan dengan banyak linux internal. Anda mungkin ingin mencoba dan mengontrak seseorang yang telah melakukan sistem disk / pxe / embedded sebelumnya untuk memahami persyaratan aplikasi Anda dan merancang solusi yang dapat diandalkan.
polinomial
Kasus terburuk, Anda dapat menggunakan partisi sistem (tidak dapat ditulisi) dan dua partisi konfigurasi. Jika partisi primer tidak dapat dibaca atau tidak lengkap, boot dari partisi sekunder, format ulang partisi primer, dan salin partisi sekunder ke dalamnya. Perbarui primer dan sekunder dalam operasi yang tidak tumpang tindih.
David Schwartz
Oke, saya memperbarui jawaban saya. Saya mungkin akan mengambil saran Anda dan membawa ini ke profesor lama saya dari program pascasarjana saya. Sementara itu, adakah yang cepat dan kotor yang setidaknya akan membuat saya dalam posisi yang lebih baik yang tidak memasukkan pantat saya ke wajan?
Jonathan Henson
Menonaktifkan cache tulis atau menjalankan 'sinkronisasi' secara teratur mungkin akan membantu dalam jangka pendek.
polinomial