두 개의 BTRFS 하위 볼륨을 비교하여 파일 속성 변경 사항을 검색하는 방법은 무엇입니까?

두 개의 BTRFS 하위 볼륨을 비교하여 파일 속성 변경 사항을 검색하는 방법은 무엇입니까?

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

관련 정보