하드 드라이브에 중요한 특정 폴더(예: 데이터베이스 폴더)에서는 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"