Opsi pemasangan apa yang digunakan untuk sistem file ext3 untuk meminimalkan kehilangan data atau korupsi?

15

Saya memiliki pengaturan tertanam menggunakan initramfs untuk sistem file root tetapi menggunakan partisi ext3 khusus yang dipasang pada drive IDE flash ringkas. Karena integritas data dalam menghadapi kehilangan daya adalah faktor terpenting dalam seluruh pengaturan, saya telah menggunakan opsi berikut untuk memasang (di bawah ini adalah entri dari /etc/fstabfile saya

<file system> <mount pt> <type> <options>                         <dump><pass>
/dev/sda2     /data      ext3   auto,exec,relatime,sync,barrier=1 0     2

Saya datang dengan opsi-opsi ini dari membaca di internet. Yang saya khawatirkan adalah isi dari /proc/mountspemberian berikut:

/dev/sda2 /data ext3 rw,sync,relatime,errors=continue,user_xattr,acl,
barrier=1,data=writeback 0 0

Dari apa yang saya pahami dari membaca sekitar adalah bahwa saya ingin menggunakan data=journalopsi untuk mount saya karena ini menawarkan perlindungan terbaik terhadap korupsi data. Namun, dari halaman manual untuk opsi ext3 spesifik mountuntuknya tertulis hal berikut tentang opsi writeback:

Pemesanan data tidak disimpan - data dapat ditulis ke dalam sistem file utama setelah metadata-nya telah berkomitmen untuk jurnal.
Ini dikabarkan sebagai opsi throughput tertinggi. Ini menjamin integritas sistem file internal , namun dapat memungkinkan data lama muncul dalam file setelah kerusakan dan pemulihan jurnal.

Saya sangat bingung tentang hal ini - halaman manual tampaknya menyarankan bahwa untuk integritas sistem file saya ingin menentukan data=writebackopsi untuk mounttetapi kebanyakan referensi lain yang saya temukan (termasuk beberapa buku yang diterbitkan pada embedded linux) menyarankan agar saya harus menggunakan data=journal. Apa yang akan menjadi pendekatan terbaik untuk saya gunakan? Kecepatan menulis tidak menjadi masalah sama sekali - integritas data memang demikian.

ahli matematika1975
sumber
1
Memberikan beberapa panduan seputar data = jurnal . Saya cenderung menggunakannya lebih dari yang lain karena RH hanya mendukung jenis pemesanan itu.
slm
2
@sim sebenarnya dikatakan data=ordered: p
sourcejedi

Jawaban:

7

Jangan sampai disesatkan oleh fakta yang hanya writebackmenyebutkan internal filesystem integrity.
Dengan ext3, apakah Anda menggunakan journal, orderedatau writeback, metadata sistem file selalu dijurnal dan itu berarti integritas sistem file internal.

The mode Data menawarkan cara kontrol atas bagaimana biasa data ditulis ke sistem file.
Dalam writebackmode, perubahan metadata pertama kali dicatat dalam jurnal dan blok komit ditulis. Setelah jurnal diperbarui, metadata dan penghapusan data dapat dilanjutkan. data=writeback bisa menjadi risiko keamanan yang parah: jika sistem crash saat menambahkan ke file, setelah metadata telah dilakukan (dan blok data tambahan dialokasikan), tetapi sebelum data ditulis (blok data ditimpa dengan data baru), kemudian setelah jurnal pemulihan file itu mungkin berisi blok yang diisi dengan data dari file yang sebelumnya dihapus - dari pengguna mana saja 1 .

Jadi, jika integritas data adalah perhatian utama Anda dan kecepatan tidak penting, data=journaladalah cara untuk pergi.

don_crissti
sumber
4

Seperti yang telah Anda perhatikan, poin utamanya adalah Anda tidak dapat mencegah sistem file dari semua jenis kerusakan.

Apa yang dapat Anda lakukan:

  1. Di sisi perangkat lunak, Anda dapat menggunakan fdatawrites setelah setiap operasi penting (Lihat posting 2003 dari Theodore T'so, pengembang Linux FS Kernel utama. Itu masih benar. Ada juga ini tentang kehilangan data utama yang tersembunyi di versi lama ext4)
  2. Kurangi interval komit menjadi 1 detik ( komit = 1 ) (lihat artikel ini dari LWN, ini tentang ext4 tetapi berisi informasi yang sangat berguna tentang ext3). NB: Seharusnya tidak perlu, dengan sinkronisasi .
  3. Seperti yang ditunjukkan oleh RHEL doc oleh sim, gunakan * data_err = batalkan * dan data = dipesan
  4. noatime akan mengurangi operasi yang tidak berguna pada sistem file
  5. Seperti yang telah Anda perhatikan, penghalang = 1 adalah cara yang baik untuk meminimalkan kehilangan data (lihat posting ini )
  6. Dan sinkronisasi juga, tentu saja, salah satu opsi "Saya tidak ingin kehilangan data saya".

Pada akhirnya, opsi mount paranoiac dapat terlihat seperti ini:

auto,exec,relatime,sync,barrier=1,commit=1,data=ordered,data_err=abort,noatime,

Dan Anda juga dapat memastikan integritas data dengan fsck otomatis di setiap boot.

Coren
sumber
2

Coba ubah bagian mana dari halaman manual yang Anda empatisize:

menulis kembali

Pemesanan data tidak disimpan - data dapat ditulis ke dalam sistem file utama setelah metadata-nya telah berkomitmen untuk jurnal. Ini dikabarkan sebagai opsi throughput tertinggi. Ini menjamin integritas sistem file internal, namun dapat memungkinkan data lama muncul dalam file setelah kerusakan dan pemulihan jurnal.

Seperti yang ditunjukkan don_crissti, mode lain tidak memiliki "namun".

depquid
sumber