Memaksa pembaruan checksum di zfs?

13

Saya baru-baru ini mengubah checksumproperti di salah satu sistem file zfs saya yang tidak terduplikasi menjadi sha256dari on(fletcher4) untuk lebih mendukung pengiriman duplikat steam replikasi, seperti dalam perintah ini zfs send -DR -I _starting-snaphot_ _ending-snapshot_.

Namun, manual zfs mengatakan ini tentang send -D:

Bendera ini dapat digunakan terlepas dari properti dedup dataset, tetapi kinerjanya akan jauh lebih baik jika sistem file menggunakan checksum yang mampu dedup (mis. Sha256).

Halaman manual zfs juga menyatakan ini tentang checksumproperti:

Mengubah properti ini hanya memengaruhi data yang baru ditulis.

Saya tidak punya keinginan untuk mempercayai fletcher4. Pengorbanannya adalah bahwa tidak seperti SHA256, fletcher4 bukan fungsi hash pseudo-acak, dan karenanya tidak dapat dipercaya untuk tidak bertabrakan. Karena itu hanya cocok untuk pemotongan ketika dikombinasikan dengan opsi 'verifikasi', yang mendeteksi dan menyelesaikan tabrakan hash.

Bagaimana saya bisa memperbarui checksum sistem file, lebih disukai tanpa menyinggung sistem?

84104
sumber

Jawaban:

11

Untuk mengubah properti (baik itu kompon, deduplikasi atau checksumming) dari data yang sudah ditulis, pendekatan zfs adalah menjalankan data melalui zfs send | zfs receiveurutan. Jelas, Anda tidak perlu untuk offline sistem untuk itu, tetapi Anda akan perlu

  1. sumber daya yang cukup di zpool Anda / pada sistem untuk menampung dua salinan data yang dikurangi
  2. waktu henti untuk data yang ditetapkan karena Anda perlu memusnahkannya atau mengganti namanya dalam prosedur
  3. cukup waktu dan kesabaran untuk menyelesaikan operasi

Karena Anda sudah menggunakan deduplikasi untuk zpool, menjalankan zfs send | zfs receivetujuan dengan sumber yang sama dengan sumber hanya akan menggunakan ruang yang diperlukan untuk blok metadata yang baru ditulis. Tetapi bersiaplah untuk menyalin untuk mengambil beberapa saat - dedup bisa sangat lambat, terutama jika Anda tidak memiliki cukup RAM untuk menahan seluruh tabel dedup dalam RAM.

Anda harus menghentikan semua operasi penulisan untuk membuat salinan set data final dan resmi, tetapi dapat meminimalkan waktu henti dengan menyalin snapshot terlebih dahulu, menghentikan semua penulisan dan melakukan penambahan zfs send -i | zfs receivesebagai langkah terakhir.

the-wabbit
sumber
Sama sekali tidak jelas bagi saya bahwa zfs receivememperbarui metadata sistem file. Sepertinya saya akan jauh lebih cepat jika hanya mengambil metadata apa adanya. Namun, melakukannya mungkin tidak mungkin karena blok checksum, daripada sifat file, level. Dalam hal itu zfs send | zfs receiveakan membentuk basis yang dapat diterima untuk solusi.
84104
1
zfs kirim | zfs recv akan secara efektif mengubah semua metadata (pilihan kompresi, pilihan checksum, pilihan dedup). zfs send adalah membuat objek yang kemudian Anda konsumsi menggunakan zfs recv, yang menuliskannya hampir seolah-olah itu semua data baru. Namun - saya pikir Anda mungkin berada di bawah kesalahpahaman tentang zfs mengirim | recv dalam hal deduplikasi. zfs send -D berupaya melakukan dedupe data / di dalam stream itu sendiri /, tidak mempertahankan deduplikasi data yang ada dari dataset sumber. Inilah sebabnya mengapa tidak ada persyaratan bahwa sisi recv juga telah mengaktifkan dedup pada dataset tujuan.
Nex7
Untuk menjelaskan lebih lanjut - saat ini tidak ada cara untuk mengirim data recup deduplicated sedemikian rupa sehingga semua yang melintasi kawat adalah salinan tunggal dari data deduplicated dan entri tabel dedupe terkait. Bahkan jika sumber dan tujuan sinkron dan Anda mengirim tidak lebih dari snapshot tambahan. ZFS masih menggelembungkan pengiriman data hingga ukuran penuh jika data di dalamnya terjadi un-deduplicatable / dalam lingkup aliran itu sendiri /. Anda mungkin memiliki data yang mudah dideduksi dalam POOL DDT, tetapi sebagai objek pengiriman kecil, sepenuhnya tidak dapat diduplikasi.
Nex7