집에는 다음과 같은 백업 구성표가 있습니다. 모든 컴퓨터는 매일 서버의 $FULL_COPY 디렉터리에 rsync됩니다. 서버는 디렉터리의 매일(또는 매주/매월) 스냅샷을 찍고 최대 X개의 스냅샷을 보관합니다. 또한 rsync를 사용하여:
rsync -ar --link-dest=$LATEST_SNAPSHOT $FULL_COPY $NEW_SNAPSHOT
이것은 훌륭하게 작동합니다. 마지막 스냅샷 이후 변경되지 않은 파일은 하드 링크되어 있습니다. 문제는 대용량 파일(정확히 말하면 Thunderbird의 받은 편지함)에 있으며 작은 변경만으로도 파일의 전체 복사본을 의미합니다. 내 스냅샷은 쉽게 몇 GB이지만 변경된 부분은 몇 MB에 불과할 수도 있습니다.
이를 수행하는 더 현명한 방법이 있습니까? (내 $FULL_COPY도 원격 시스템에 복사되므로 이러한 중복성은 필요하지 않습니다.) 내 유일한 아이디어는 스냅샷을 지원하는 CoW 파일 시스템입니다. 그러나 그것은 내 신체에 큰 수술을 의미하는 일이었고 나는 그것을 좋아하지 않았습니다.
답변1
여기에 긴 글을 썼는데 정말 간단합니다. 패치를 사용하세요.
$FULL_COPY를 평소대로 실행하되, $NEW_SNAPSHOT의 경우매우 큰 파일 제외.
이제 이것이 파일이고 파일 경로가 /home/myuser/.mail/INBOX라고 가정하면 다음을 실행합니다.
rsync -ar --link-dest=$LATEST_SNAPSHOT $FULL_COPY $NEW_SNAPSHOT --exclude=/home/myuser/.mail/INBOX
이렇게 하면 스냅샷을 찍는 데 걸리는 시간이 크게 줄어듭니다.
다음으로 좀 더 명확하게 설명하기 위해 경로를 채워 보겠습니다. $FULL_COPY의 "루트" 디렉터리가 /mnt/full 아래에 있으므로 사용자 메일 디렉터리의 전체 백업이 /mnt/full/home/myuser/.mail/INBOX에 있다고 가정합니다. 마찬가지로 스냅샷도 /mnt/snap-mm-dd-yy 아래에 있습니다.
그런 다음 받은 편지함의 델타만 가져와서 의미 있는 위치의 올바른 날짜 스냅샷에 넣으려면 다음을 실행하세요.
diff -u /mnt/full/home/myuser/.mail/INBOX /home/myuser/.mail/INBOX > /mnt/snap-mm-dd-yy/home/myuser/.mail/INBOX.delta
여기에서 수행하는 작업은 diff를 사용하여 전체 백업 메일 파일에 대한 오늘의 메일함 파일의 패치 파일을 생성하고(diff의 -u 옵션이 이를 수행함) 패치 파일을 예측 가능한 위치(예: 사용자의 .mail 디렉토리)로 보내는 것입니다.
마지막으로, 원본 메일함을 잃어버렸기 때문에 스냅샷 당일의 모습으로 메일함을 복원해야 하는 경우 먼저 $FULL_COPY 및 $SNAP_SHOT을 사용하여 모든 것을 원래 경로로 복원하세요. 그런 다음 패치를 실행하여 INBOX 델타를 복원합니다.
patch < /mnt/snap-mm-dd-yy/home/myuser/.mail/INBOX.delta
그게 다야.
노트:
1) INBOX.delta를 보면 처음 두 줄은 기존 파일과 새 파일의 경로이므로 패치 시 원래 경로를 사용하고 싶지 않은 경우 편집하면 됩니다.
2) 델타가 매일 조금씩 커지고 있지만 전체에 비해 여전히 훨씬 작습니다. 다음 풀타임까지 증분을 늘리는 것이 패치를 여러 개 만드는 것보다 자원을 더 효율적으로 사용하는 방법이 될 것입니다.