Apakah BTRFS menjamin konsistensi data pada pemadaman listrik?

11

Seperti yang dinyatakan ZFS secara eksklusif ,ZFS diklaim kebal ZFS menerima bahwa itu mungkin rentan terhadap kegagalan daya.

Saya tidak dapat menemukan pernyataan seperti itu untuk BTRFS. Apakah (atau dirancang / direncanakan) tahan lama di antara pemadaman listrik?

ceremcem
sumber
Baca lagi. "Jika kolam Anda rusak karena kegagalan perangkat keras atau pemadaman listrik, lihat Memperbaiki ZFS Storage Pool-Wide Damage." (..) Berusaha memulihkan kolam dengan menggunakan zpool clear -F perintah
Michael D.
Jadi Anda mengatakan "ZFS tidak menjamin konsistensi data, hanya mencoba memulihkan"?
ceremcem
Iya. Sudah ada beberapa cache untuk ditangani, hard drive built-in cache, cache OS / buffer. Pada titik tertentu ada syncatau flushyang menulis cache ke disk, atau tidak selama pemadaman listrik, data akan hilang. ZFS mungkin bekerja dengan sempurna jika hard disk sehat dan tidak ada pemadaman listrik (atau UPS terhubung ke komputer yang dimatikan dengan benar pada pemadaman). Apa yang tidak bisa Anda katakan tentang FAT32 atau lebih.
Michael D.
2
Kehilangan data bukan masalah karena merupakan konsekuensi alami ketika kehilangan daya terjadi, tetapi, konsistensi data menjadi masalah dalam kasus saya. Sistem file mungkin kehilangan data dalam kondisi ekstrem seperti itu, tetapi seharusnya tidak menyebabkan data tidak konsisten dalam disk. Saya memerlukan fasilitas snapshot terus menerus, jadi saya akan terus menggunakan BTRFS. NILFS2 adalah opsi terdekat dalam kasus saya.
ceremcem
1
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. Saya telah memposting tautan ke pertanyaan ini di IRC, semoga seseorang akan meluangkan waktu untuk menjelaskan; tetapi untuk sekarang ini saatnya.
Hi-Angel

Jawaban:

5

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:

  1. Tulis data untuk membebaskan blok pada disk.
  2. Buat salinan pohon Merkle *, perbarui sesuai dengan perubahan yang ditulis dalam (1).
  3. Minta perangkat keras untuk menyiram data ke disk - perangkat keras menulis semua data yang tertunda.
  4. Perbarui penunjuk kepala ke pohon Merkle baru.
  5. 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":

  1. Tulis data untuk membebaskan blok pada disk.
  2. Buat salinan pohon Merkle *, perbarui sesuai dengan perubahan yang ditulis dalam (1).
  3. 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).
  4. 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).
  5. Data ditulis dalam langkah (1) dan (2) ditulis ke disk.
  6. 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 .

Martin
sumber
Terima kasih atas penjelasan yang bagus ini. Namun, kutipan diperlukan untuk semua klaim, termasuk percakapan IRC. Maka jawaban Anda akan diterima.
ceremcem
Mengenai log IRC, saya merujuk pada komentar @ Hi-Angel di sini. Mungkin dia bisa memberikan referensi? Saya menambahkan beberapa referensi lagi ke bagian lain.
Martin
BTRFS tidak menggunakan pohon Merkle, ia menggunakan B-tree (karenanya 'B-TRee FileSystem'), dan contoh kegagalan Anda mengharuskan hambatan penulisan tidak diterapkan dengan benar oleh perangkat keras (yang sebenarnya merupakan kasus yang agak tidak biasa akhir-akhir ini) . Kalau tidak, jawaban yang bagus.
Austin Hemmelgarn
Pohon-pohon yang digunakan oleh btrf sebenarnya adalah B-pohon (properti ini adalah tentang "bentuk" pohon dan fakta bahwa mereka menyeimbangkan diri sendiri) dan pohon hash / Merkle (daun berisi hash dari beberapa data, node berisi hash anak-anak mereka, sehingga setiap perubahan menyebar sampai ke akar). Mampu memverifikasi hash ini yang memungkinkan btrfs dan ZFS mendeteksi data yang rusak (dan membacanya dari disk lain jika digunakan dalam mode "mirroring").
Martin