중앙 백업 서버(rsh/SSH를 통해)에 백업하려는 일부 Ubuntu(및 RHEL) 서버가 있습니다. 스냅샷과 증분 백업을 수행하고 싶습니다. 목표는 백업 서버 중 하나가 갑자기 중단되는 경우 부팅 이미지를 설치하고 백업에서 복원한 후 즉시 실행하는 것이 좋습니다.
이러한 서버에는 고유한 사용자 및 그룹이 있고 이름이 같은 일부 다른 gid 및 uid가 있습니다. rsync를 고려하고 있었지만(로컬 백업은 잘 작동하고 xattrs 및 ACL도 백업할 수 있도록 세밀하게 제어할 수 있음) 원격 서버에 대한 rsync가 예상대로 이러한 뉘앙스를 유지하지 못할 수도 있다는 것을 깨달았습니다.
그렇다면 이를 달성하는 더 좋은 방법은 무엇입니까? 이 목적으로 일반적으로 사용되는 패키지가 있습니까?
답변1
예, rsync
ACL, 확장 속성, ext2 속성, 하드 링크, 숫자 사용자 ID, 희소성 등을 보존하도록 선택할 수 있습니다.
btrfs
한때 파일 시스템을 백업 서버의 파일 시스템과 동기화하는 시스템이 있었는데 (백업 서버에서 스냅샷 수행) 안정성 문제로 인해 zfs-on-linux로 마이그레이션되었습니다(불행히도 아직 POSIX를 지원하지 않았습니다). ACL), 해결 방법이 있습니다).
rsync
관심을 가질 만한 옵션: --archive --one-file-system --xattrs --hard-links --delete --numeric-ids --sparse --acls
내부 동기화 옵션도 있습니다.
rsync가 수행하지 않는 한 가지는 이름 변경을 감지하는 것입니다(패치가 있지만 그것이 얼마나 신뢰할 수 있는지 잘 모르겠고 파일 이름 변경만 감지합니다).
zfs
zfs 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