Beberapa waktu yang lalu, ada beberapa diskusi tentang ext4 yang berpotensi meninggalkan file kosong setelah unmount yang tidak bersih, disimpulkan dengan cukup baik dalam artikel ini . Pada dasarnya, karena alokasi yang tertunda, menulis dapat disimpan dalam cache tulis untuk waktu yang lebih lama daripada interval komit default jurnal ext (5 detik).
Masalahnya tampaknya telah diperbaiki dalam tambalan yang memaksa alokasi blok dalam situasi tertentu, sehingga memaksa data ke disk setelah paling banyak 5 detik secara default.
Saya bertanya-tanya apa yang terjadi ketika aplikasi menimpa bagian file yang ada, tanpa memotong atau menambahkan file itu sendiri. Apakah itu akan dipaksa untuk disk dalam 5 detik juga?
Sepertinya situasi yang berbeda dari menambahkan ke file: saat menambahkan, ukuran file berubah, yang merupakan perubahan metadata; oleh karena itu, komit jurnal akan diperlukan dalam 5 detik, dan karena data = dipesan, data harus ditulis sebelum itu karena masalah keamanan (jika tidak, bagian dari file yang dihapus dari pengguna lain dapat muncul untuk pemilik yang ditambahkan) mengajukan).
Ketika hanya menimpa data file, tidak ada alasan mengapa penulisan data harus terjadi sebelum jurnal metadata melakukan, karena data lama milik pengguna yang sama dengan yang baru. Jadi, apakah penulisan itu terjadi sebelum komit, atau bisakah ditunda lebih lama dari interval jurnal komit? Jika ya, berapa lama?
Pembaruan: Saya tahu bahwa semua ini tidak relevan ketika melakukan hal yang benar, yaitu menggunakan fsync (). (Ini adalah alasan utama untuk semua diskusi tentang ext4 dan kehilangan data - masalahnya hanya menyangkut aplikasi yang tidak fsync (), atau tidak pada saat yang tepat.) Saya tidak menulis aplikasi sendiri, saya bertanya karena saya tidak tahu apakah semua aplikasi saya melakukan hal yang benar, dan saya ingin tahu perkiraan waktu untuk penulisan "berbahaya" semacam itu. Alasan untuk bertanya adalah driver grafis saya yang menyebabkan panik kernel secara teratur, dan saya ingin tahu apakah saya harus khawatir tentang lebih dari 5 detik terakhir dari data yang ditulis.
sumber
sync
(atau, yang setara, ketika timer interval komit dipecat). Pada titik ketikasync
selesai, sama sekali tidak ada data kotor, metadata atau halaman jurnal. Setiap perubahan pada sistem file selama transfer data sinkron diblokir sampai selesai.commit=...
dansync
BUKAN setara? Atau apakah tytso menyiratkan bahwa bahkan dengansync
itu tidak melakukan halaman yang tidak terisi? Saya tidak bisa membayangkan hal itu terjadi, karena itu akan melanggar spesifikasi POSIX. Mungkin Anda bisa menggunakan skrip bash yang saya berikan untuk keamanan data yang lebih baik: PApa pun jawaban untuk pertanyaan Anda, tidak masalah.
The terkena dijamin perilaku filesystem ext4 adalah bahwa "data yang akan di disk setelah sukses
sync
/fsync
panggilan". Jadi, jika Anda memiliki aplikasi yang membuat Anda mengajukan pertanyaan ini, Anda harus memasukkan panggilan sinkronisasi di titik-titik kritis di mana integritas data perlu dipastikan. Jika Anda seorang pengguna khawatir tentang masalah yang sama, Anda dapat menghubungisync
utilitas baris perintah sebelum melakukan perilaku berbahaya apa pun yang dapat menyebabkan shutdown yang tidak bersih.sumber