由于在某些对硬盘至关重要的文件夹(如数据库文件夹)上禁用 CoW,我还需要备份该信息。然而,从 v5.10 开始,btrfs send/receive
仍然忽略此信息。递归地检查每个文件lsattr -R
是非常低效的。
依赖BTRFS的备份系统如何处理这个问题?我们能否有效地发现给定子卷之间的属性变化?
答案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"