Bagaimana cara memverifikasi salinan file reflink / CoW?

8

Saya bermain dengan btrfs, yang memungkinkan cp --reflinkuntuk copy-on-write. Program lain, seperti lxc-clone, dapat menggunakan fitur ini juga. Pertanyaan saya adalah, bagaimana cara mengetahui apakah suatu file adalah Kontrak Karya orang lain? Seperti untuk hardlink, saya bisa tahu dari nomor inode.

Wu Yongzheng
sumber

Jawaban:

5

Pertanyaan bagus. Sepertinya saat ini tidak ada cara tingkat tinggi yang mudah untuk diceritakan.

Satu masalah adalah bahwa file hanya dapat membagikan sebagian data melalui Copy-on-Write. Ini disebut batas fisik, dan beberapa atau semua luasan fisik dapat dibagi antara file Kontrak Karya.

Tidak ada yang analog dengan inodeyang, jika dibandingkan antara file, akan memberi tahu Anda bahwa file memiliki luasan fisik yang sama. (Edit: lihat jawaban saya yang lain ).

Jawaban level rendah adalah bahwa Anda dapat menanyakan kernel mana ekstensi fisik yang digunakan untuk file yang menggunakan , yang didokumentasikan . Pada prinsipnya, jika semua luasan fisik adalah sama, maka file tersebut harus berbagi penyimpanan dasar yang sama.FS_IOC_FIEMAP ioctlDocumentation/filesystems/fiemap.txt

Beberapa hal menerapkan cara untuk melihat informasi ini di tingkat yang lebih tinggi. Saya menemukan beberapa kode go di sini . Rupanya filefragutilitas seharusnya menunjukkan luasan dengan -v. Selain itu, btrfs-debug-treetunjukkan informasi ini.

Saya akan berhati-hati, karena hal-hal ini mungkin memiliki sedikit kegunaan di alam liar untuk tujuan ini, Anda dapat menemukan bug memberikan jawaban yang salah, jadi berhati-hatilah mengandalkan data ini untuk memutuskan operasi yang dapat menyebabkan korupsi data.

Beberapa pertanyaan terkait:

pwaller
sumber
Jawaban bagus! Bagaimana Anda akan menggunakan btrfs-debug-treedaftar luasan pada nama file yang diberikan?
Tom Hale
4

Lebih jauh ke jawaban saya sebelumnya , saya baru saja merilis fienodeyang menghitung hash SHA1 dari luasan fisik file dan dapat digunakan untuk menemukan beberapa salinan reflink (identik). Waspadalah, ada peringatan (lihat dokumentasi ). BTRFS memutuskan untuk mengubah sebagian, tetapi tidak semua, dari luasan fisik salinan refink yang saya buat tanpa provokasi atau peringatan, menyebabkan nilai berubah.

pwaller
sumber