
"송신기"와 "수신기"라는 두 개의 기계가 있습니다.
발신자는 매일 밤 다음 명령을 실행합니다.
zfs send -i bpool/backups@2018-09-04 bpool/backups@2018-09-05 | ssh receiver /sbin/zfs receive bpool/backups
발신자에서 수신자로 최신 bpool/백업을 보냅니다. (날짜는 매일 밤 자동으로 생성됩니다.)
누군가(수신자 측)가 다음을 수행하는 경우:
cd /bpool/backups
ls
다음 오류로 인해 야간 백업 작업이 중단됩니다.
root@sender:~# zfs send -i bpool/backups@2018-09-04 bpool/backups@2018-09-05 | ssh recevier /sbin/zfs receive bpool/backups
cannot receive incremental stream: destination bpool/backups has been modified
since most recent snapshot
warning: cannot send 'bpool/backups@2018-09-04': Broken pipe
(atime이 업데이트되었기 때문인 것 같아요.)
이런 일이 발생하지 않도록 하려면 어떻게 해야 합니까? (receiver:/bpool/backups를 읽기 전용으로 설정하면 수신 작업은 어떻게 되나요?)
답변1
너물론대상 데이터 세트를 읽기 전용으로 만듭니다( readonly=on
대상 데이터 세트 또는 상위 데이터 세트 중 하나에 직접 zfs 등록 정보를 설정하여). 이는 업데이트된 스냅샷 수신을 방해하지 않습니다. 이는 readonly
데이터 세트에 포함된 파일(디렉터리, 속성)을 변경할 수 없다는 의미일 뿐입니다.
readonly=on
이는 풀을 가져올 때의 설정과 다릅니다. 풀을 사용한다는 것은 readonly
IO가 풀의 백엔드에 아무 것도 쓸 수 없다는 것을 의미합니다.
나는 원칙적으로 어느 누구도 어쨌든 허용되는 데이터 세트를 변경해서는 안 되기 때문에 허용된 답변에 별로 만족하지 않습니다.
제가 전환을 반대하는 또 다른 이유는 증분 스냅샷 데이터( ) -F
를 수신하면 전환이 이루어지기 때문입니다.zfs send -i data@older-snap data@newer-snap
-F
반품원본 데이터 세트에 존재하지 않는 스냅샷이 백업 데이터 세트에서 삭제됩니다(최신 데이터일지라도). 예상치 못한 상황이 발생하면(단순히 오류를 무시하는 것보다) 서비스가 실패하고 오류를 보고하도록 서비스를 설계하는 것이 항상 좋습니다.
atime=off
백업 풀/데이터 세트의 경우 목적에 어긋나므로 이를 설정할 수도 있습니다 .
편집: 아, 다음을 사용하여 수신 데이터 세트에서만 이러한 속성을 설정할 수 있다는 점을 추가해야 합니다(이러한 속성은 소스 데이터 세트에서 직접 설정하면 재정의됩니다).zfs receive -o atime=off -o readonly=on
답변2
zfs recv -F
수신 데이터 세트를 이전에 수신된 스냅샷으로 강제로 롤백합니다. atime을 끄면 백업 파일을 확인하는 사람들의 문제만 해결되지만 다른 변경 사항이 있는 경우 -F 플래그를 사용해야 합니다.
답변3
액세스 시간 업데이트를 끄는 것만으로도 충분합니다.
zfs set atime=off bpool/backup
답변4
개인적으로 저는 스냅샷을 읽기 전용으로 직접 마운트하는 것을 선호하므로 구성을 통해 스냅샷을 수정하지도 않습니다.
암호화된 데이터 세트를 사용하는 경우 먼저 다음 명령을 실행하여 키를 로드합니다.
$ sudo zfs load-key -a
그런 다음 예를 들어 다음과 같이 마운트합니다( -o ro
옵션이 필요하지 않음).
$ mkdir /tmp/zp
$ sudo mount -t zfs zpool_my_passport/backup/2020_Dell_laptop@2021_01_05_-_test_update /tmp/zp/
하지만 수정이 발생하면 정말 실용적입니다 zfs recv -F
. (저는 데이터 손실이 조금 걱정되기 -F
때문에 이 방법을 선호합니다.)