Meskipun snapshot yang dipasang di atas berfungsi, sepertinya itu bisa sangat lambat dalam banyak kasus.
Apakah ada fungsi spesifik btrfs untuk membedakan snapshot? (Saya tidak dapat menemukannya di dokumen)
Meskipun snapshot yang dipasang di atas berfungsi, sepertinya itu bisa sangat lambat dalam banyak kasus.
Apakah ada fungsi spesifik btrfs untuk membedakan snapshot? (Saya tidak dapat menemukannya di dokumen)
Jawaban:
Sepertinya Anda mencari mengirim / menerima btrf , yang akan muncul di Linux 3.6. The send
Perintah menciptakan sebuah file log dari perbedaan antara dua foto, dan receive
perintah berlaku perubahan dari sebuah file. Perhatikan bahwa kirim / terima menggunakan format file khusus, sehingga file tidak akan persis seperti, katakanlah, diff atau tar.
Saya menjalankan stabil Debian yang tidak ada btrfs send
, jadi saya mencari solusi menggunakan btrfs subvolume find-new
.
Jika Anda memiliki snapshot1 dan snapshot2 dan Anda ingin tahu apa yang berubah pada yang berikutnya, snapshot 2, karena snapshot1 dibuat, Anda dapat menggunakan skrip di bawah ini yang menyediakan
btrfs-diff oldsnapshot/ newsnapshot/
yang akan mencantumkan semua file yang diubah dalam newsnapshot / sejak oldsnapshot /.
#!/bin/bash
usage() { echo $@ >2; echo "Usage: $0 <older-snapshot> <newer-snapshot>" >2; exit 1; }
[ $# -eq 2 ] || usage "Incorrect invocation";
SNAPSHOT_OLD=$1;
SNAPSHOT_NEW=$2;
[ -d $SNAPSHOT_OLD ] || usage "$SNAPSHOT_OLD does not exist";
[ -d $SNAPSHOT_NEW ] || usage "$SNAPSHOT_NEW does not exist";
OLD_TRANSID=`btrfs subvolume find-new "$SNAPSHOT_OLD" 9999999`
OLD_TRANSID=${OLD_TRANSID#transid marker was }
[ -n "$OLD_TRANSID" -a "$OLD_TRANSID" -gt 0 ] || usage "Failed to find generation for $SNAPSHOT_NEW"
btrfs subvolume find-new "$SNAPSHOT_NEW" $OLD_TRANSID | sed '$d' | cut -f17- -d' ' | sort | uniq
Untuk menjelaskan: btrfs subvolume find-new
menemukan file berubah setelah 'generasi' snapshot tertentu. Ini juga melaporkan nomor generasi saat ini.
mis. mengambil snapshot harian dari sebuah kasus subvolume:
mkdir test && cd test
btrfs subvolume create live
date >live/foo1
date >live/bar1
btrfs subvolume snapshot live/ snap1
date >live/foo2 # new file
date >>live/bar1 # modify file
rm live/foo1 # delete file
btrfs subvolume snapshot live/ snap2
date >live/foo3 # new file
mv live/bar{1,2} # rename file
rm live/foo2 # delete file
Apa yang berubah antara snap1 dan snap2?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Jadi kita dapat melihat file baru, melihat file yang dimodifikasi, tetapi penghapusan tidak dilaporkan . Ini karena perintah melaporkan file yang ada, bukan yang sekarang tidak.
Apa yang berubah antara snap2 dan subvolume langsung?
$ btrfs-diff snap2/ live/
foo3
file yang diganti namanya tidak dilaporkan . Datanya tidak berubah.
Sekarang bagaimana jika kita menambahkan data ke file yang diganti namanya
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OKE, masuk akal. Tapi mari kita buat file baru
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
eh! dimana lala? . Jika Anda menambahkan file lain, lala
muncul. Jadi perilaku ini agak aneh. Mungkin itulah sebabnya wiki mengatakan:
Pendekatan find-new memiliki beberapa batasan serius dan karenanya tidak dapat digunakan untuk sesuatu seperti mengirim / menerima.
Namun, keanehannya muncul ketika Anda membandingkan subvolume langsung dengan keadaan sebelumnya, bukan ketika Anda membandingkan snapshot (hanya baca). Jadi ini masih bisa berguna kecuali Anda ingin juga mengidentifikasi file yang dihapus.
Ini didukung oleh alat kenyamanan snapshot snapper
.
sudo snapper -c config diff 445..446
Tentu saja ini mengharuskan Anda menggunakan snapper
snapshot Anda.
Id snapshot ini dapat ditemukan menggunakan snapper list -a
. Sayangnya pada saat penulisan snapper tidak mendukung snapshot daftar untuk satu konfigurasi, meskipun angka-angka ini dapat ditemukan dari nama subvolume.
A
berisia
, menulisb
dalam snapshot-nya dan kemudian mengubahnya kembalia
, file tidak benar-benar berubah sama sekali.