"Ext4" aman "konfigurasi untuk sistem yang berjalan tanpa pengawasan

18

Saya memiliki sistem yang menjalankan linux yang harus dijalankan tanpa pengawasan untuk jangka waktu yang lama. Sistem ini menggunakan kartu CF industri untuk penyimpanan. Sebagian besar waktu tidak ada menulis ke flash, meskipun kadang-kadang beberapa konfigurasi data / pengaturan dapat dimodifikasi. Sistem harus tahan terhadap gangguan daya.

Saya ingin menggunakan ext4 untuk ini. Apa cara terbaik untuk mengkonfigurasi ext4 untuk pengaturan semacam ini? Ingatlah bahwa:

  • Performa bukan masalah sama sekali (terutama kinerja menulis)
  • Setelah kehilangan daya, sistem harus selalu boot dalam keadaan bersih, bahkan jika itu berarti bahwa data yang ditulis dalam beberapa detik terakhir hilang
  • Jika mungkin untuk menghindari fsck, maka semuanya akan lebih baik.

(Saya mengetahui pertanyaan terkait ini: Mencegah kerusakan data pada drive ext4 / Linux pada hilangnya daya )

Grodriguez
sumber

Jawaban:

11

Saya telah bekerja dalam membangun sistem untuk otomasi di atas kapal, dan ada prasyarat: dalam setiap saat daya dapat turun dan semuanya harus ditingkatkan lagi dengan benar.

Solusi saya adalah membangun sistem initramfs berbasis Gentoo, dengan hanya folder rw untuk aplikasi dan konfigurasi (ini adalah pendekatan yang digunakan oleh setiap router / vendor firewall). Solusi ini menambah lapisan kompleksitas tambahan ketika berhadapan dengan peningkatan sistem, tetapi pastikan Anda bahwa sistem SELALU akan booting.

Mengenai pertanyaan spesifik Anda, Anda harus tetap mengaktifkan jurnal EXT4 karena memiliki fsck lebih cepat (dari beberapa detik), gunakan data = opsi pemasangan jurnal , turunkan opsi komit atau gunakan opsi sinkronisasi untuk menjaga buffer selalu kosong.

Ref: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt

Giovanni Toraldo
sumber
Baik! Jika aplikasi tidak menulis terlalu banyak data, Anda harus puas dengan opsi sinkronisasi.
Giovanni Toraldo
1
Tempat yang lebih baik untuk dilihat adalah dokumentasi kernel Linux: kernel.org/doc/Documentation/filesystems/ext4.txt Aktifkan data = jurnal dan komit = nrsec untuk meminimalkan potensi kehilangan data (* == default)
Giovanni Toraldo
Komitmen berjangka waktunya pasti membantu - saya percaya Anda hanya bisa turun ke interval 1 detik (meskipun dengan penalti kinerja UTAMA untuk operasi intensif menulis), tetapi jika Anda tidak mampu kehilangan data 1 detik, Anda memiliki masalah yang lebih besar;)
voretaq7
2
salah satu efek positif utama dari penjurnalan adalah bahwa pulih dari kerusakan adalah masalah memutar ulang perubahan terbaru yang tidak dikomit, yang benar-benar lebih cepat daripada memeriksa seluruh volume untuk inkonsistensi. Jika ini adalah masalah utama Anda, maka Anda harus menggunakan EXT4 default dan berbahagia.
Giovanni Toraldo
1
@Grodriguez "kehilangan" data dapat berupa apa saja dari "File tidak ada lagi" hingga "Mengapa ada sepotong kernel di dalam basis data saya?" - Itu semua tergantung pada apa yang "hilang" :)
voretaq7
12

Saya akan mengawali ini dengan mengatakan bahwa sejauh yang saya ketahui, EXT (dalam semua inkarnasinya) adalah filesystem yang cukup mengerikan - saya telah melihat lebih banyak kasus " menarik " dari korupsi filesystem dalam jumlah yang relatif kecil dari Linux / EXT {2,3,4} sistem yang saya kelola dari pada sistem file Not-EXT yang relatif besar yang pernah saya gunakan.
Jika memungkinkan cobalah untuk memilih sistem file yang lebih kuat. Anda akan berterima kasih kepada diri sendiri ketika hal yang tak terhindarkan terjadi.


Itulah yang dikatakan dan semua bias pribadi saya di tempat terbuka dan disingkirkan, EXT4 memang memiliki tiga fitur yang dapat saya pikirkan yang dapat membantu Anda:

  • Journal
    EXT4 bisa menjadi filesystem journal, jika Anda ingin menjadi. Aktifkan fitur penjurnalan (dan secara khusus mengatur mode penjurnalan data ke journalvia tune2fsatau sebagai opsi pemasangan).
    Hal ini menimbulkan hit kinerja karena semua data harus dituliskan ke jurnal EXT sebelum "berkomitmen" ke sistem file (setiap penulisan pada dasarnya terjadi dua kali), tetapi memastikan Anda selalu dapat memulihkan sejauh replay jurnal membuat Anda tanpa masalah.

  • SYNCMounts hronous
    Ketika keselamatan merupakan hal terpenting untuk memasang sistem file dengan syncopsi selalu merupakan ide yang baik. Ini memaksa semua menulis ke disk segera - lagi ini adalah hit kinerja, tetapi ide yang bagus jika Anda mengharapkan kegagalan daya atau orang asing acak menarik kartu CF keluar.

  • Batasi sebanyak mungkin sistem file yang dapat ditulisi. Yang satu ini tidak spesifik untuk EXT, tetapi filosofi Linux yang terlalu umum "hanya membuat satu partisi root besar dan membuang semuanya ke dalamnya", terus terang, bodoh . Membuat struktur filesystem yang tepat ( /, /var, /usr, /home, dll ...), dan mount karena banyak filesystem read-only mungkin.
    Ini dulunya merupakan saran umum untuk sistem unix demi keamanan, tetapi dalam kasus Anda ini memiliki manfaat tambahan: Anda tidak dapat merusak sistem file jika Anda tidak dapat menulisnya.

voretaq7
sumber
Fungsionalitas tunggangan sinkron penuh tidak sama dengan hanya memanggil syncsetelah setiap penulisan - Tunggangan sinkron tidak akan (atau setidaknya tidak boleh) kembali dari panggilan tulis sistem file sampai data ada di disk. Memanggil syncakan mem-flush semua tulisan yang tertunda, tetapi masih ada jendela (seberapa pendek) antara ketika penulisan kembali dan panggilan Anda untuk synckembali selama data mungkin belum ditulis ke disk.
voretaq7
Sistem file mana yang Anda rekomendasikan? Bisakah Anda mengukur pengalaman Anda?
Mark Wagner
@embobo pengalaman saya sepenuhnya anekdotal: Saya belum pernah menguji-stres keluarga sistem file EXT, tetapi satu insiden yang menonjol dalam pikiran saya adalah ketika saya memiliki server Squid yang menderita "Ke mana semua inode saya pergi?!?" - filesystem dihidupkan, dan entah bagaimana kemudian ditandai bersih, tetapi setiap inode entah bagaimana dibiarkan dalam keadaan diklaim-tetapi-tidak pernah direferensikan. Fsck untuk memperbaiki kekacauan itu secara positif EPIC (akhirnya kami hanya membuat FS baru). Itu adalah hari dimana saya kehilangan kepercayaan pada keluarga EXT dari sistem file.
voretaq7
@Grodriguez Re: Jurnal, tiga opsi adalah data=journal(apa yang saya jelaskan di atas), data=ordered(metadata dijurnal. Data berkomitmen ke disk sebelum metadata berkomitmen ke sistem file), dan data=writeback(yang secara efektif tidak ada penjurnalan / perlindungan data - Hal Buruk dapat terjadi setelah crash, seperti sampah di tengah file). Saya percaya orderedini adalah default pada kebanyakan distro Linux hari ini ...
voretaq7
2
Selain "Batasi filesystem yang dapat ditulisi sebanyak mungkin": Dalam debian wiki adalah panduan untuk melakukan hal ini dengan banyak contoh pada daemon yang memerlukan perlakuan khusus. Ini juga berlaku untuk sebagian besar distris lainnya: wiki.debian.org/ReadonlyRoot
krissi
7

EXT4 tidak terdengar seperti pilihan terbaik untuk sistem Anda; Saya akan menyarankan melihat sistem file log-terstruktur. Ini bekerja dengan memperlakukan data sebagai aliran konstan pembaruan tulis terhadap aliran virtual, dengan pointer yang menunjuk 'kepala' terbaru. Pembaruan terjadi dengan menulis data dan metadata ke penyimpanan, kemudian memperbarui pointer. Dalam kasus crash setelah menulis tetapi sebelum penunjuk memperbarui data terbaru hilang tetapi sistem file konsisten.

Dua kandidat filesystem adalah LogFS dan NILFS . Keduanya tersedia di kernel Linux arus utama.

Steve Smith
sumber
1

Saya tertarik dengan perangkat gedung Anda. Anda mencari keandalan perangkat yang disematkan saat menggunakan sistem file yang tidak benar-benar cocok.

Ext4 (dan keluarga) adalah sistem file serba guna yang bagus dengan (saya kira) banyak milyaran jam penggunaan pada beragam perangkat keras dan kasus penggunaan. Namun, apa yang Anda minta tidak benar-benar cocok dengan ext4. Petunjuk dari voretaq7 dan Giovanni akan membantu mendapatkan yang terbaik dari penggunaan ext4 jika Anda harus, tetapi jawaban sebenarnya adalah menggunakan sesuatu yang lebih sesuai dengan kebutuhan Anda. Steve telah memberi Anda beberapa opsi. Jika Anda terus menarik daya dari ext4 FS Anda akhirnya akan berantakan.

Jika ini adalah sistem satu-satunya yang sedang Anda bangun, Anda harus membuat pilihan untuk menggunakan sesuatu yang lebih cocok atau menerima bahwa akan ada masalah di beberapa titik. Mungkin hanya 1 pemadaman listrik dari 100 atau 1 dari 1000. Itu bisa cukup baik bagi Anda untuk mengambil risiko dan perangkat mungkin bisa berjalan untuk waktu yang lama (tahun) tanpa intervensi manual.

Jika ini adalah produk yang ingin Anda gunakan secara luas / bawa ke pasar, Anda memiliki pilihan untuk menggunakan sesuatu yang lebih cocok. Atau Anda mengambil keputusan bisnis untuk mendukung persentase perangkat yang akan ditutup setiap tahun dan perlu diganti atau intervensi manual untuk memulihkannya.

goo
sumber