ZFS 스냅 샷을 회전하여 백업 파일로


14

로컬 FreeNAS 시스템이 있고 백업에 ZFS 스냅 샷을 사용하려고합니다.
FreeNAS에는 기본 제공 복제 작업이 있으며

zfs send snapshot_name

원격 시스템에 스냅 샷을 보냅니다. 그러나 이것은 다른 쪽 끝에 ZFS가있는 시스템이 필요합니다.

스냅 샷을 파일로 보내고이 압축 및 암호화 된 파일을 원격 컴퓨터로 보냅니다.

이것은 가능하다

zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl

매일 스토리지 풀의 스냅 샷을 만들고 30 일 동안 모든 스냅 샷을 유지합니다.
모든 스냅 샷을 촬영할 때마다이 스냅 샷을 파일로 파이프합니다.
-snapshot_file 1에는 모든 파일이 있습니다 (2GB라고 함)
.-snapshot_file 2는 snapshot_file 1 (5MB라고 함) 만 변경합니다.
-snapshot_file 3은 snapshot_file 2에 대한 변경 사항을 보유합니다. 등등.

31 일에 snapshot_file 1이 삭제됩니다 (지난 30 일 동안의 변경 사항 만 원하기 때문에)

따라서 snapshot_file 2는 모든 파일을 보유해야합니다 (2GB의 snapshot_file 1 + 5MB 변경)

그러나 매일이 방법을 사용하면 (31 일부터) 새로운 2GB 파일을 작성하여 원격 시스템으로 보내야합니다. 너무 많은 오버 헤드입니다.

X 일의 이력을 가진 백업 전략으로 파일에 파이프 된 스냅 샷을 사용하는 가장 좋은 방법은 무엇입니까?

추신 : 나는 사용할 수있는 백업 소프트웨어가 많이 있다는 것을 알고 있습니다 (예 : rdiff-backup). 그러나 이것이 어떻게 이루어질 수 있는지 궁금합니다.


zfs recv다른 쪽 끝 ( zfs set compression=gzip-9예를 들어 풀에서) 을 사용하지 않겠습니까? 스냅 샷 파일을 저장하면 매우 비효율적입니다.
Stéphane Chazelas

1
다른쪽에는 ZFS 파일 시스템이 없기 때문에 @StephaneChazelas. 내 원격 시스템은 ext4에있는 젠투 상자 (차라리하지 내가 zfsonlinux 설치할 수 알지만)이다
마틴 GROHMANN

답변:


12

파일 시스템과 달리 (예 :와 같이 zfs receive) 스냅 샷을 파일에 저장하면 이것이 불가능합니다.

수신 측의 ZFS

송신 및 수신 측에서 ZFS를 사용하는 경우 전체 스냅 샷을 전송하지 않아도되며 이전 스냅 샷과 비교하여 스냅 샷의 차이점 만 전송할 수 있습니다.

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' | \
  zfs receive

ZFS는 스냅 샷을 알고 상호 블록을 한 번만 저장합니다. 파일 시스템이 스냅 샷을 이해하게하면 문제없이 이전 스냅 샷을 삭제할 수 있습니다.

수신 측의 다른 파일 시스템

귀하의 경우 스냅 샷을 개별 파일에 저장하고 파일 시스템은 스냅 샷을 인식하지 못합니다. 이미 알고 있듯이 회전이 중단됩니다. 전체 스냅 샷을 전송해야하므로 대역폭과 스토리지 공간이 낭비되지만 개별 스냅 샷을 삭제할 수 있습니다. 그들은 서로에게 의존하지 않습니다. 다음과 같이 증분 스냅 샷을 수행 할 수 있습니다.

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' \
  > incremental-2014-02-04:05

증분 스냅 샷을 복원하려면 이전 스냅 샷도 필요합니다. 이는 이전 증분을 삭제할 수 없음을 의미합니다.

가능한 해결책

마지막 예제와 같이 증분을 수행하고 매월 새로운 비 증분을 수행 할 수 있습니다. 새로운 증분은이 비 증분에 의존하며 이전 스냅 샷을 자유롭게 삭제할 수 있습니다.

또는 다른 백업 솔루션을 살펴볼 수도 있습니다. rsnapshotrsync있으며 하드 링크 를 사용 합니다. 전체 백업이 한 번만 필요하기 때문에 회전시 매우 잘 작동하며 대역폭 효율성이 뛰어납니다.

그렇다면 베어 로스가 있습니다. 대역폭을 늘리고 공간을 절약하는 증분을 수행합니다. 매우 좋은 기능이 있습니다. 증분 세트에서 전체 백업을 계산할 수 있습니다. 이전 증분을 삭제할 수 있습니다. 그러나 그것은 다소 복잡한 시스템이며 더 큰 설정을 위해 고안되었습니다.

그러나 가장 좋은 해결책은 수신 측에서 ZFS를 사용하는 것입니다. 대역폭 효율성, 스토리지 효율성 및 기타 솔루션보다 훨씬 빠릅니다. 내가 생각할 수있는 유일한 단점은 해당 상자에 최소 8GiB ECC 메모리가 있어야한다는 것입니다 (서비스를 실행하지 않고 사용하는 경우 4GiB로 괜찮을 수 있습니다 zfs receive).


네, 알아요 그러나 dataset @ 2014-02-04 파일을 삭제하면 (30 일 동안의 기록 만 남기고 싶어) 어떻게해야합니까? 그런 다음 2 월 4 일 이후에 변경된 사항 만 있지만 모든 파일이 아닙니다.
Martin Grohmann

2
@MartinGrohmann 지금 무슨 말인지 알 겠어요. ZFS의 장점 인 ZFS의 오래된 스냅 샷을 문제없이 삭제할 수 있습니다. 다른 파일 시스템에서는 이전 파일 시스템을 유지해야합니다. 아마도 당신은 rsnapshot다음 과 같은 것을 사용하는 것이 좋습니다 . 또는 한 달 후에 새 비 증분을 시작한 다음 이전 증분을 삭제할 수 있습니다.
Marco

도와 주셔서 감사합니다. 방금 이중성을 발견했습니다. 아마도 암호화 기능을 사용하는 방법 일 것입니다.
Martin Grohmann

2
@MartinGrohmann Duplicity는 훌륭한 프로그램이지만 같은 문제로 어려움을 겪고 있습니다 . 증분 만 수행하면 공간이 계속 커집니다. 대역폭을 낭비하지 않고 새로운 전체 백업을 수행하지 않으면 공간을 확보 할 수 없습니다. ZFS를 양쪽으로 이동하거나 bareos를 살펴보면 증분에서 새 전체 백업을 계산할 수 있습니다. 모든 것을 다시 전송하지 않고도 오래된 증분을 삭제할 수 있습니다.
Marco

소스의 대역폭이 문제인 경우 잠재적 솔루션 (현재 홈 ZFS NAS에 구현하고 있음)은 항상 원격 저장소에 증분을 보내지 만 한 달에 한 번 원격 freeBSD VPS를 가동시키는 것입니다 (예 : 그런 다음 마지막 전체 스냅 샷을 열고 zfs에서 일부 # 증분을 가져 와서 결과를 새 스냅 샷으로 저장합니다. VPS는 새로운 기본 백업을 생성 할 수있을 정도로 오래 지속되어야합니다. Digital ocean에는 VPS를 쉽게 생성 / 파기 할 수있는 API가 있습니다. 로컬 시스템은 증분 백업 만 보내면됩니다.
stuckj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.