ハードドライブにとって重要な特定のフォルダ(データベースフォルダなど)では、CoWが無効になっているため、その情報もバックアップする必要があります。ただし、v5.10以降、btrfs send/receive
このメッセージはまだ無視されます。各ファイルを再帰的にスキャンすることはlsattr -R
非常に非効率的です。
BTRFSを使用するバックアップシステムはこの問題をどのように処理しますか?特定のサブボリューム間の属性の変更を効率的に見つけることはできますか?
答え1
私が考えることができる1つの可能なアプローチは、次のことを繰り返すことです。
btrfs send --no-data | btrfs receive --dump
utimes
変更されたファイルのみを確認する: (参照属性の違いを見つける.sh)
changed_utime=$(btrfs send -q --no-data -p "$SNAPSHOT_OLD" "$SNAPSHOT_NEW" \
| sudo btrfs receive --dump \
| grep ^utimes \
| awk '{print $2}' \
| sort \
| uniq)
>&2 echo "INFO: Examining $(echo "$changed_utime" | wc | awk '{print $1}') files"
while read -r _f; do
file=$(echo $_f | cut -d'/' -f3-)
[[ -z $file ]] && continue
_old=$SNAPSHOT_OLD/$file
_new=$SNAPSHOT_NEW/$file
[ \( -d "$_old" -o -f "$_old" \) -a ! -L "$_old" ] || continue
[ \( -d "$_new" -o -f "$_new" \) -a ! -L "$_new" ] || continue
old_attr=$(lsattr -d $_old | awk '{print $1}')
new_attr=$(lsattr -d $_new | awk '{print $1}')
[[ "$old_attr" != "$new_attr" ]] && echo "$old_attr $new_attr $file"
done <<< "$changed_utime"