두 개의 미러링된 디스크로 구성된 ZFS 풀을 사용합니다. 오프사이트 백업을 위해 디스크를 두 개 더 구입했습니다.
원래 계획은 세 번째 디스크를 미러에 연결하여 오프사이트 백업을 만들고 ZFS가 다시 동기화될 때까지 기다린 다음 드라이브를 분리하여 오프사이트로 가져가는 것이었습니다. 이것은 잘 작동하지만 놀랍게도 수행되는 것 같습니다.가득한재동기화는 디스크가 연결될 때마다 발생합니다. 모든 연결로 인해 증분 또는 델타 재동기화가 발생한다는 내용을 읽었지만 오해했을 수도 있습니다. 이로 인해 백업이 허용 가능한 것보다 오래 걸릴 수 있습니다.
내 요구 사항은 매일 회전할 수 있도록 내 zpool과 모든 스냅샷의 오프사이트 복사본을 갖는 것입니다. 이는 재동기화에 최대 24시간이 소요될 수 있음을 의미합니다. 현재는 이에 가깝지만 풀 확장 계획에 따르면 그 시간을 초과할 예정입니다.
전체 재동기화 작업이 필요하지 않은 오프사이트 백업을 어떻게 보존합니까? 백업 드라이브에서 다른 파일 시스템을 사용해야 합니까(예: 이미지를 ZFS 풀의 일부로 만드는 대신 이미지 내보내기)? 백업을 별도의 풀에 넣고 새 스냅샷이 생성되면 해당 풀로 보내야 합니까?
답변1
zfs가 원격 ZFS 시스템에 스냅샷을 보내지 않는 이유는 무엇입니까? 이를 위해 간단한 bash 스크립트를 사용합니다.
#!/usr/local/bin/bash
# ZFS Snapshot BASH script by Shawn Westerhoff
# Updated 1/14/2014
### DATE VARIABLES
# D = Today's date
# D1 = Yesterday's date
# D# = Today less # days date
Y=$(date -v-1d '+%m-%d-%Y')
D=$(date +%m-%d-%Y)
D1=$(date -v-1d '+%m-%d-%Y')
D10=$(date -v-10d '+%m-%d-%Y')
D20=$(date -v-20d '+%m-%d-%Y')
# Step 1: Make the snapshots
for i in $( zfs list -H -o name ); do
if [ $i == tier1 ]
then echo "$i found, skipping"
else
zfs snapshot $i@$D
fi
done
# Step 2: Send the snapshots to backup ZFS sever
for i in $( zfs list -H -o name ); do
zfs send -i $i@$D1 $i@$D | ssh -c arcfour [email protected] zfs recv $i
done
# Step 3: Destroy snapshots that are 20 days old
for i in $( zfs list -H -o name ); do
if [ $i == tier1 ]
then echo "$i found, skipping"
else
zfs destroy $i@$D20
fi
done
답변2
많은 고민과 실험 끝에 비록 상당한 절충안이 있었지만 해결책을 찾았습니다.
첫째, 제외해야 했던 옵션은 다음과 같습니다.
비용상의 이유로 미러 풀이 있는 두 번째 오프사이트 ZFS 서버를 갖는 것은 옵션이 아닙니다. 가능하다면 이는 ZFS 보내기/받기를 사용하여 원격 풀에 스냅샷을 보내는 가장 좋은 방법입니다.
디스크를 제거하고 집으로 가져갈 수 있는 두 번째 현장 ZFS 미러 풀을 확보하십시오. 이는 첫 번째 옵션보다 더 실현 가능하지만 항상 현장에 두 개의 디스크를 두려면 두 번째 풀이 필요합니다(또는 단일 온사이트 디스크에 있는 두 개의 데이터 복사본을 사용). 현재 디스크가 4개 있는데 서버에 다섯 번째 디스크를 넣을 공간이 부족합니다. 이는 공정한 접근 방식이지만 여전히 이상적이지는 않습니다.
ZFS 연결 및 분리를 사용하여 미러 풀 안팎으로 백업 디스크를 회전합니다. 이 접근 방식은 효과적이지만 디스크를 추가할 때마다 전체 재동기화를 수행해야 합니다. 이 작업은 시간이 너무 오래 걸리므로 신뢰할 수 없습니다.
attach
내 솔루션은 and를 사용하는 것과 비슷 detach
하지만 online
and를 사용합니다 offline
. 이는 전체 재동기화에 비해 증분 재동기화를 수행한다는 장점이 있지만 풀이 항상 상태를 보고한다는 단점이 있습니다 DEGRADED
(풀에는 항상 두 개의 디스크가 있습니다. 회전하는 오프사이트 디스크는 offline
원격 저장소에 있을 때 표시되어 재동기화되고 그런 다음 온라인으로 가져옴).
내 설정에 대한 간단한 검토 및 개요는 다음과 같습니다.
ZFS 서버와 4개의 동일한 디스크가 있습니다. ZFS는 미러 풀을 사용하도록 설정됩니다. 4개의 디스크 중 2개는 풀의 영구 구성원입니다. 다른 두 개의 디스크는 회전합니다. 하나는 항상 오프사이트 저장소에 있고 다른 하나는 풀의 일부로 항상 사용 가능한 백업 역할을 합니다.
백업을 순환해야 하는 경우:
zfs scrub
백업 디스크에 오류가 없는지 합리적으로 확인하기 위해 완료될 때 까지 기다립니다.zfs offline
원격으로 획득할 디스크 입니다 . 일단 오프라인이 되면hdparm -Y /dev/id
꺼두었어요 . 1분 후 디스크 베이스를 부분적으로 제거하고(전원이 꺼졌는지 확인할 수 있을 만큼만) 1분 더 기다렸다가 드라이브를 완전히 당겨서 회전이 멈췄는지 확인했습니다. 디스크는 고정 백에 넣은 다음 보호 케이스에 넣고 외부로 옮깁니다.다른 오프사이트 디스크를 가져왔습니다. 핫스왑 가능한 트레이에 장착되어 회전합니다. 저는
zfs online
디스크를 풀에 복원하고 부분 재동기화를 시작하여 동시에 수행했습니다.
시스템은 언제든지 ONLINE
미러 디스크 2개와 OFFLINE
원격 디스크 1개(스크러빙됨)를 갖도록 보장합니다. 네 번째 디스크는 다시 동기화되거나 온라인 상태가 됩니다. 이는 실행 중인 드라이브에 오류가 발생하더라도 풀이 두 개의 온라인 디스크와 여전히 일치할 수 있다는 이점이 있습니다.
지난 몇 주 동안 훌륭하게 작동했지만 여전히 해킹이라고 생각합니다. 중대한 문제가 있으면 후속 조치를 취하겠습니다.
고쳐 쓰다:몇 달 동안 실행한 후 실제 사용 시 분리/연결 및 오프라인/온라인 모두에서 재동기화에 동일한 시간이 소요된다는 사실을 발견했습니다. 내 테스트에서는 스크럽을 실행하지 않은 것 같습니다. 스크러빙으로 인해 드라이브가 오프라인 상태인 경우 전체 재동기화가 필요할 것으로 예상됩니다.
답변3
내가 만들었다zfs 자동 백업이 작업과 그 이상을 투명한 방식으로 수행하십시오. (두 개의 zfs 시스템 사이에서만 작동하며 외부 시스템에 대한 백업은 작동하지 않습니다.)
ZFS-autobackup은 모든 기능을 갖추고 있으면서도 가장 안정적이고 사용하기 쉬운 도구가 되기 위해 노력하고 있습니다.
백업 도구, 복제 도구 또는 스냅샷 도구로 사용할 수 있습니다.
사용자 정의 ZFS 속성을 설정하여 백업할 항목을 선택할 수 있습니다. 이를 통해 특정 데이터 세트를 쉽게 추가/제거하거나 전체 풀을 백업할 수 있습니다.
다른 설정은 명령줄에서만 지정하면 됩니다. zfs-autobackup 명령을 설정 및 테스트하고 발생할 수 있는 문제를 해결하기만 하면 됩니다. 완료되면 명령을 cron이나 스크립트에 복사/붙여넣기만 하면 됩니다.
ZFS 명령을 사용하기 때문에 --debug를 지정하면 실제로 수행되는 작업을 확인할 수 있습니다. 이상한 문제나 오류가 발생하는 경우에도 많은 도움이 될 것입니다. 실패한 명령을 복사하여 붙여넣고 명령줄에서 사용할 수 있습니다. (다른 도구에서 놓친 것)
다른 도구에는 없는 중요한 기능 중 하나는 신뢰할 수 있는 --test 옵션입니다. 이를 통해 zfs-autobackup이 수행할 작업을 확인하고 매개변수를 조정할 수 있습니다. 시스템 변경을 제외한 모든 작업을 수행합니다.
설치 지침 및 다운로드는 다음을 참조하세요.https://github.com/psy0rz/zfs_autobackup