Farklı montajlı enstantaneler işe yarayabilirken, çoğu durumda korkunç derecede yavaş olabilir gibi geliyor.
Anlık fotoğraf çekimi için btrfs özel işlevi var mı? (Dokümanlarda herhangi bir şey bulamadım)
Farklı montajlı enstantaneler işe yarayabilirken, çoğu durumda korkunç derecede yavaş olabilir gibi geliyor.
Anlık fotoğraf çekimi için btrfs özel işlevi var mı? (Dokümanlarda herhangi bir şey bulamadım)
Yanıtlar:
Linux 3.6'da görünecek olan btrfs gönderme / alma'yı aradığınıza benziyor . send
Komut iki enstantane arasındaki farklılıkların bir günlük dosyası oluşturur ve receive
komut bir dosyadan değişiklikleri uygular. Gönderme / alma işleminin özel bir dosya biçimi kullandığına dikkat edin, bu nedenle dosya tam olarak, di, diff veya tar gibi görünmez.
Sahip olmayan bir Debian kararlı çalıştırıyorum btrfs send
, bu yüzden kullanarak bir çözüme baktım btrfs subvolume find-new
.
Anlık görüntü1 ve anlık görüntü2'niz varsa ve sonrakinde nelerin değiştiğini bilmek istiyorsanız, anlık görüntü 2 yapıldığı için, anlık görüntü 2 yapıldıktan sonra aşağıdaki komut dosyasını kullanabilirsiniz.
btrfs-diff oldsnapshot/ newsnapshot/
Bu, newsnapshot / since / oldsnapshot / den değiştirilen tüm dosyaları listeler.
#!/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
Açıklamak için: belirli bir “nesil” anlık görüntüsünden sonrabtrfs subvolume find-new
değişen dosyaları bulur . Ayrıca mevcut üretim numarasını da bildirir.
örneğin, bir alt hacimli vakanın günlük görüntüsünü alın:
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
Snap1 ve snap2 arasında neler değişti?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Böylece yeni dosyayı görebilir, değiştirilen dosyayı görebiliriz ancak silme bildirilmez . Bunun nedeni, komutun şu anda olmayan dosyaları değil varolan dosyaları bildirmesidir.
Snap2 ve canlı alt hacim arasında ne değişti?
$ btrfs-diff snap2/ live/
foo3
yeniden adlandırılan dosya bildirilmez . Verileri değişmedi.
Şimdi, yeniden adlandırılmış dosyaya veri eklersek ne olur?
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
Tamam, mantıklı. Ama yeni bir dosya yapalım
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
ha! lala nerede? . Başka bir dosya eklerseniz, lala
görünür. Yani bu davranış biraz garip. Wiki bu yüzden muhtemelen şöyle diyor:
Yeni bulma yaklaşımının bazı ciddi kısıtlamaları vardır ve bu nedenle gönderme / alma gibi bir şey için gerçekten kullanılamaz.
Ancak, gariplik, canlı bir alt sesi önceki bir durumla karşılaştırdığınızda (salt okunur) anlık görüntüleri karşılaştırırken değil. Bu nedenle, silinen dosyaları da tanımlamak istemediğiniz sürece bu hala yararlı olabilir.
Bu anlık görüntü kolaylık aracı tarafından desteklenir snapper
.
sudo snapper -c config diff 445..446
Elbette bu snapper
, enstantaneleriniz için kullanmanızı gerektirir .
Bu anlık görüntü kimliklerini kullanarak bulunabilir snapper list -a
. Ne yazık ki, snapper yazarken, tek bir yapılandırma için liste anlık görüntülerini desteklemiyordu;
A
içeren bir dosyanız varsa , anlık görüntüsüne yazın ve daha sonra tekrar değiştirin , dosya gerçekten hiç değişmedi.a
b
a