ZFS: 롤링 스냅샷을 사용하여 보내기/받기

ZFS: 롤링 스냅샷을 사용하여 보내기/받기

내 작은 홈 서버는 ZFS 배포판에서 실행됩니다. 이 시스템에서는 롤링 스냅샷 구성표를 구현했습니다.

  • 매시간 스냅샷 생성
  • 하루에 한 번 체인이 얇아져서 시간별/일별/주별/월별 스냅샷 세트가 생성됩니다.

일부 파일 시스템의 오프사이트 백업을 사무실의 USB 드라이브에 저장하고 싶습니다. 계획은 격주로 드라이브를 업데이트하는 것입니다. 하지만 롤링 스냅샷 방식으로 인해 증분 스냅샷을 구현하는 데 문제가 있습니다.

예를 들자면, 이것이 제가 원하는 프로그램입니다:

  1. 초기 스냅샷:zfs snap tank/fs@snap0
  2. 초기 스냅샷을 전송합니다.zfs send tank/fs@snap0 | zfs recv -Fduv backup_tank
  3. backup_tank오프사이트 보관
  4. 스냅샷을 찍어보세요 zfs snap tank/fs@snap1: zfs snap tank/fs@snap2
  5. 체인 다듬기: zfs destroy tank/fs@snap0
  6. 돌아가서 backup_tank파일 시스템을 증분 업데이트합니다.
  7. 분명히 zfs send -I snap0 tank/fs@snap2 | zfs recv -Fduv backup_tank더 이상 존재하지 않아 실패했습니다.snap0tank

간단히 말해서:

send스냅샷 체인의 개선과 증가 /결합을 결합할 수 있는 깔끔한 솔루션이 있습니까 recv? 드라이브를 연결하고 일부 명령을 실행할 때마다 그 시점에 파일 시스템의 복사본을 갖고 싶습니다. 이 예에서는 backup_tank스냅샷 fs@snap1fs@snap2.

답변1

당신이 원하는 것을 정확하게 할 수는 없습니다.

스트림을 생성할 때마다 zfs send스트림은 두 스냅샷 간의 델타로 생성됩니다. (이것이 현재 ZFS를 구현하는 유일한 방법입니다.) 스트림을 다른 데이터 세트에 적용하려면 대상 데이터 세트에 스트림의 시작 스냅샷이 포함되어야 합니다. 그렇지 않은 경우 둘에는 공통 참조 지점이 없습니다. . 소스 데이터세트에서 @snap0 스냅샷을 삭제하면 ZFS가 조정할 수 없는 상황이 발생합니다.

요청한 작업을 수행하는 방법은 항상 두 데이터 세트 사이에 공통 스냅샷을 유지하고 해당 공통 스냅샷을 다음 전송 스트림의 시작점으로 사용하는 것입니다.

따라서 1단계에서 @backup0 스냅샷을 만든 다음 6단계 근처에서 @backup1 스냅샷을 만들어 사용하여 오프사이트 백업을 업데이트할 수 있습니다. 그런 다음 @backup0과 @backup1(모든 중간 스냅샷 포함) 간에 델타 스트림을 전송합니다.그 다음에@backup0 삭제하지만 계속@backup1(새로운 공통 분모가 됨) 다음에 백업을 새로 고칠 때 @backup1 대신 @backup2를 만들고 @backup0과 @backup1 대신 @backup1과 @backup2 사이에 델타를 전송한 다음 @backup0 대신 @backup1을 삭제할 수 있습니다. 빠르게.

답변2

스냅샷에는 임의의 이름이 있습니다. 그리고 zfs send -i [snapshot1] [snapshot2]두 스냅샷의 차이가 전송될 수 있습니다. 이를 활용하여 보존 정책이 서로 다른 두 개 이상의 스냅샷 세트를 가질 수 있습니다.

예를 들어, 다음과 같은 이름의 스냅샷 세트가 있습니다 @snap.$timestamp( $timestamp날짜/시간 형식이 귀하에게 적합합니다(time_t는 계산하기 가장 쉽지만 사람이 읽기는 쉽지 않습니다. @snap.%s.%Y%M%D%H%M%S둘 다 제공됨). 시간별/일별/매주별/ 월별 스냅샷 삭제 코드는 로 끝나지 않는 모든 항목을 무시해야 합니다 @snap.

두 번째 그룹은 으로 전화할 수 있습니다 @offsite.$timestamp. 작업에 적합한 스냅샷 보존/삭제 정책이 있어야 하며, 이를 관리하는 데 사용되는 코드는 로 끝나지 않는 모든 항목을 무시해야 합니다 @offsite.

그건 그렇고, 이것은 당연한 말일 수도 있지만 이것을 시간별, 일별, 주별, 월별 스냅샷에 사용할 수 있으므로 각 스냅샷은 서로 다른 보존 정책을 가질 수 있습니다. 예 @hourly.$timestamp를 들어 .@daily.$timestamp@snap.$timestamp

또한 데이터 세트에서 사용하는 블록은 해제될 때까지 해제되지 않기 때문에 더 많은 디스크 공간을 사용하게 될 것임이 분명합니다.아니요남겨진 스냅샷은 이를 참조합니다.

답변3

당신은 내 것을 사용할 수 있습니다zfs 자동 스냅샷이게 오리지널 포크에요zfs 자동 스냅샷send2remote 스크립트를 사용하여 업데이트

send2remote는 스냅샷의 소스와 대상 차이점을 검색하고 SSH를 통해 증분 스냅샷을 백업 zpool로 보냅니다(백업 zpool이 원격 호스트에 있는 경우).

백업 zpool - 로컬 호스트 또는 원격 호스트에 있을 수 있음

관련 정보