btrfs는 스냅 샷을 효율적으로 비교할 수있는 방법이 있습니까? 경우 속도가

다른 마운트 된 스냅 샷은 작동하지만 대부분의 경우 속도가 느려질 수 있습니다.

Diffing Snapshot에 대한 btrfs 관련 기능이 있습니까? (문서에서 찾을 수 없습니다)



답변

btrfs send / receive를 찾고 있는 것 같습니다 .Linux 3.6에 나타납니다. 이 send명령은 두 스냅 샷 간의 차이점에 대한 로그 파일을 작성하고 파일의 receive변경 사항을 적용합니다. 보내기 / 받기는 사용자 정의 파일 형식을 사용하므로 diff 또는 tar와 같이 파일이 정확하게 표시되지 않습니다.


답변

나는 가지고 있지 않은 데비안 안정을 실행 btrfs send중이므로를 사용하는 솔루션을 찾았습니다 btrfs subvolume find-new.

snapshot1과 snapshot2가 있고 나중의 Snapshot 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

알겠습니다. 하지만 새 파일을 만들어 봅시다

date >live/lala
btrfs-diff snap2/ live/
bar2
foo3

뭐라고! 라라 어 where 어? . 다른 파일을 추가하면가 lala나타납니다. 따라서이 동작은 약간 이상합니다. 아마도 위키가 말하는 이유는 다음과 같습니다.

새로 찾기 접근 방식에는 몇 가지 심각한 제한이 있으므로 보내기 / 받기와 같은 작업에는 실제로 사용할 수 없습니다.

그러나 (읽기 전용) 스냅 샷을 비교할 때가 아니라 라이브 하위 볼륨을 이전 상태와 비교할 때 문제가 발생합니다. 따라서 삭제 된 파일을 식별하지 않는 한 여전히 유용 할 수 있습니다.


답변

이것은 스냅 샷 편의 도구에 의해 지원됩니다 snapper.

sudo snapper -c config diff 445..446

물론이를 위해서는 snapper스냅 샷에 사용해야합니다 .

이 스냅 샷 ID는을 사용하여 찾을 수 있습니다 snapper list -a. 불행히도 snapper 작성 당시에는 단일 구성에 대한 목록 스냅 샷을 지원하지 않았지만이 숫자는 하위 볼륨 이름에서 찾을 수 있습니다.