マウントされたスナップショットの差分は機能しますが、多くの場合恐ろしく遅くなるようです。
スナップショットを比較するためのbtrfs固有の機能はありますか?(ドキュメントで見つけることができませんでした)
マウントされたスナップショットの差分は機能しますが、多くの場合恐ろしく遅くなるようです。
スナップショットを比較するためのbtrfs固有の機能はありますか?(ドキュメントで見つけることができませんでした)
回答:
Linux 3.6に登場するbtrfs send / receiveを探しているようです。このsend
コマンドは、2つのスナップショットの違いのログファイルを作成receive
し、ファイルからの変更を適用します。送信/受信ではカスタムファイル形式が使用されるため、ファイルはdiffやtarなどとまったく同じようには見えません。
持っていないDebian安定版を実行しているbtrfs send
ので、を使用してソリューションを探しましたbtrfs subvolume find-new
。
snapshot1とsnapshot2があり、後のスナップショット2の変更点を知りたい場合、snapshot1が作成されたため、以下を提供するスクリプトを使用できます。
btrfs-diff oldsnapshot/ newsnapshot/
oldsnapshot /以降にnewsnapshot /で変更されたすべてのファイルがリストされます。
#!/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
説明するには、スナップショットの特定の「生成」後にbtrfs subvolume find-new
変更されたファイルを見つけます。また、現在の世代番号も報告します。
たとえば、サブボリュームケースの毎日のスナップショットを取得します。
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とsnap2の間で何が変わったのですか?
$ btrfs-diff snap1/ snap2/
bar1
foo2
新しいファイル、変更されたファイルを見ることができますが、削除は報告されません。これは、コマンドが現在存在しないファイルではなく、存在するファイルについて報告するためです。
snap2とライブサブボリュームの間で何が変わったのですか?
$ btrfs-diff snap2/ live/
foo3
名前を変更したファイルは報告されません。そのデータは変更されていません。
名前を変更したファイルにデータを追加したらどうなるでしょう
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK、理にかなっています。しかし、新しいファイルを作成しましょう
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
えっ!ララはどこ?。別のファイルを追加すると、lala
表示されます。したがって、この動作は少し奇妙です。おそらくwikiが言う理由は:
新規検索アプローチにはいくつかの重大な制限があり、したがって送信/受信などの用途には実際には使用できません。
ただし、ライブサブボリュームを以前の状態と比較すると、奇妙なことになります。(読み取り専用)スナップショットを比較するときではありません。そのため、削除されたファイルも特定したい場合を除き、これは依然として有用です。
A
を含むファイルがある場合、そのスナップショットa
に書き込みb
、後でそれをに戻しa
ます。ファイルは実際にはまったく変更されませんでした。