원격 서버의 정확한 스냅샷 및 증분 백업 수행

원격 서버의 정확한 스냅샷 및 증분 백업 수행

중앙 백업 서버(rsh/SSH를 통해)에 백업하려는 일부 Ubuntu(및 RHEL) 서버가 있습니다. 스냅샷과 증분 백업을 수행하고 싶습니다. 목표는 백업 서버 중 하나가 갑자기 중단되는 경우 부팅 이미지를 설치하고 백업에서 복원한 후 즉시 실행하는 것이 좋습니다.

이러한 서버에는 고유한 사용자 및 그룹이 있고 이름이 같은 일부 다른 gid 및 uid가 있습니다. rsync를 고려하고 있었지만(로컬 백업은 잘 작동하고 xattrs 및 ACL도 백업할 수 있도록 세밀하게 제어할 수 있음) 원격 서버에 대한 rsync가 예상대로 이러한 뉘앙스를 유지하지 못할 수도 있다는 것을 깨달았습니다.

그렇다면 이를 달성하는 더 좋은 방법은 무엇입니까? 이 목적으로 일반적으로 사용되는 패키지가 있습니까?

답변1

예, rsyncACL, 확장 속성, ext2 속성, 하드 링크, 숫자 사용자 ID, 희소성 등을 보존하도록 선택할 수 있습니다.

btrfs한때 파일 시스템을 백업 서버의 파일 시스템과 동기화하는 시스템이 있었는데 (백업 서버에서 스냅샷 수행) 안정성 문제로 인해 zfs-on-linux로 마이그레이션되었습니다(불행히도 아직 POSIX를 지원하지 않았습니다). ACL), 해결 방법이 있습니다).

rsync관심을 가질 만한 옵션: --archive --one-file-system --xattrs --hard-links --delete --numeric-ids --sparse --acls내부 동기화 옵션도 있습니다.

rsync가 수행하지 않는 한 가지는 이름 변경을 감지하는 것입니다(패치가 있지만 그것이 얼마나 신뢰할 수 있는지 잘 모르겠고 파일 이름 변경만 감지합니다).

zfszfs send지정된 스냅샷 이후 완료된 수정 사항만 전송 되어야 합니다 ( zpool을 다른 zfs로 사용 zfs receive). 제가 이해한 것이 맞다면 이 기능 btrfs도 최근에 추가된 것입니다. 따라서 최신 커널에서 한 파일 시스템을 다른 파일 시스템으로 백업하는 경우 btrfs이것이 옵션일 수 있습니다.btrfs

답변2

구경하다스냅 사진rsync, 이는 명령줄 유틸리티용 Perl 래퍼입니다. Rsnapshot은 rsync에 추가 구성 계층을 추가하여 증분 백업을 쉽게 만듭니다. (파일의 이전 버전은 변경되지 않은 경우 현재 버전에 하드 링크됩니다. 따라서 백업된 파일 시스템의 각 증분 버전은 전체 복사본처럼 보입니다.)

또 다른 비슷한 가능성은이중성를 기반으로 한 것입니다 librsync. 더 멋진 사용자 인터페이스가 있다는 것을 알고 있지만 아직 사용해 본 적이 없습니다. 또는rdiff 백업, 나는 이것이 같은 개발자의 것이라고 가정합니다. 아니면 적어도 예전에는 그랬습니다.

물론 수많은 백업 시스템이 있습니다. 이것은목록대부분은 FreeBSD에서 사용할 수 있고 대부분은 Linux에서 사용할 수 있습니다. 하지만 위에서 언급한 세 가지는 익숙하다면 고려해 보는 것이 당연하다고 생각합니다 rsync. (훌륭한 도구입니다.)

답변3

편집: 모두들 감사합니다!이제 일부 다른 패키지가 해당 작업을 수행할 수 있다는 것을 알고 rsync 내부에 대해 조금 더 이해하게 되었습니다. 이에 대해 궁금하신 분들을 위해 --numeric_ids 옵션을 사용하여 다른 시스템에 rsync하는 경우 UID/GID를 매핑하거나 생성하지 않고 있는 그대로 전달합니다. 백업 디렉터리에 있는 항목의 소유권은 이상하게 보일 수 있지만 복원할 때 1:1로 일치합니다(새 시스템으로 복원하는 경우 복원하는 항목의 일부가 원래 매핑 파일과 관련되어 있다고 가정).

이것은 현재 전체 시스템 백업(sudo를 통한 루트)에 사용하는 옵션의 전체 목록입니다.{{my_exclusions}}는 독자를 위한 연습이라는 점에 유의하세요(아직 작동하는 데 문제가 있습니다). 또한 --link-dest... 사용에 유의하세요. 디렉터리가 대상에 있는 경우 이전 백업에 이미 존재했던 파일(현재 백업에서 변경되지 않음)이 있는 위치에 하드 링크가 만들어집니다.

rsync \
  --recursive \
  --links \
  --hard-links \
  --perms \
  --acls \
  --xattrs \
  --owner \
  --group \
  --devices \
  --specials \
  --times \
  --one-file-system \
  --partial \
  --numeric-ids \
  --compress \
  --delete-during \
  --stats \
  --human-readable \
  --progress \
  --verbose \
  --super \
  --log-file=/tmp/my.log \
  --link-dest=/backup/latest_backup \
  --exclude={{my_exclusions}} \
  --link-dest=/backup/latest \
  / \
  {{remote_hostname_or_ip}}:/backup/new_backup

관련 정보