Saya telah mengajukan pertanyaan pada #btrfs IRC, mereka mengatakan di should be ok if your hw isn't "buggy"
mana tidak- "kereta" berarti your hw has correct flush/barrier semantics
.
TL; DR: Ini berarti bahwa btrf dilindungi terhadap korupsi data karena kehilangan daya dengan cara yang sama seperti ZFS.
Inilah sebabnya: Gagasan umum di balik ZFS dan btrfs serupa. Keduanya menggunakan pohon Merkle sebagai struktur data . Menulis mungkin memerlukan beberapa blok pada disk untuk diperbarui. Sistem file menangani ini dengan menulis data baru ke blok kosong (bahkan jika file yang ada sedang dimodifikasi, sehingga tidak perlu memodifikasi blok yang mencerminkan keadaan lama) dan membangun pohon baru yang diperbarui. Setelah semua pengangkatan berat selesai dan data + pohon yang diperbarui telah ditulis ke disk, penunjuk kepala akan diperbarui ke pohon baru yang membuat perubahan terlihat.
Berikut adalah hal-hal yang seharusnya berperilaku saat menulis ke file:
- Tulis data untuk membebaskan blok pada disk.
- Buat salinan pohon Merkle *, perbarui sesuai dengan perubahan yang ditulis dalam (1).
- Minta perangkat keras untuk menyiram data ke disk - perangkat keras menulis semua data yang tertunda.
- Perbarui penunjuk kepala ke pohon Merkle baru.
- Gratis blok lama yang tidak diperlukan lagi.
Jika daya hilang setelah (4) transaksi selesai. Jika daya hilang selama langkah (1) hingga (3) sistem file akan muncul dengan keadaan lama (data yang ditulis pada langkah (1) hilang tetapi sistem file konsisten). Perhatikan bahwa tidak perlu memeriksa kesalahan sistem file yang berarti sistem file tersedia segera yang merupakan keuntungan besar (memeriksa sistem file besar bisa memakan waktu sangat lama!).
Berikut adalah contoh bagaimana hal-hal yang salah dengan perangkat keras "kereta":
- Tulis data untuk membebaskan blok pada disk.
- Buat salinan pohon Merkle *, perbarui sesuai dengan perubahan yang ditulis dalam (1).
- Minta perangkat keras untuk mem-flush data ke disk - perangkat keras mengonfirmasi penyelesaian tetapi tidak sepenuhnya memintas (mis. Data mungkin tetap ada dalam cache tulis-kembali disk).
- Perbarui penunjuk kepala ke pohon Merkle baru. Data ini ditulis ke disk sebelum data lain yang tertunda (mis. Karena kepala disk berada di lokasi yang tepat).
- Data ditulis dalam langkah (1) dan (2) ditulis ke disk.
- Gratis blok lama yang tidak diperlukan lagi.
Sistem file akan menjadi tidak konsisten jika daya hilang antara (4) dan (5) atau saat melakukan langkah (5). Sebagai akibatnya pohon Merkle dan / atau data mungkin hanya ditulis sebagian menyebabkan sistem file menjadi tidak konsisten.
Dalam praktiknya Anda harus sangat berhati-hati saat menggunakan pengontrol RAID . Mereka biasanya menonaktifkan cache write-back pada disk dan menggunakan cache write-back mereka sendiri. Ada dua cara umum untuk kesalahan di sini:
* Saya menyederhanakan hal-hal di sini. Sebenarnya tidak perlu menyalin seluruh pohon. Hanya bagian yang diubah yang perlu ditambahkan - bagian yang tersisa dapat dibagi antara pohon yang lama dan yang baru .
zpool clear -F
perintah