대략적인 설명
그래서 저는 현재 복잡한 ZFS 설정을 가지고 있으며 이를 재구성하고 일부 기존 하드웨어를 재사용하고 싶습니다.
이와 같은 작업을 수행하는 데 권장되는 방법은 모든 데이터를 백업하고, 이전 풀을 삭제하고, 새 풀을 만들고, 데이터를 복원하는 것입니다. 문제는 다음과 같습니다.어떻게이를 수행하는 가장 좋은 방법
설정 및 세부정보
현재 설정은 3×1TB 및 3×4TB 드라이브로 구성되어 있으며 다음과 같이 설정되어 있습니다. 두 개의 4TB 드라이브는 각각 하나의 1TB 및 하나의 3TB 파티션으로 포맷되었습니다.
media_pool
5×1TB 디스크/파티션으로 구성된 raidz1 풀입니다(-> 4TB 사용 가능, 3.26TB 사용).three_t_pool
3TB 파티션 2개로 구성된 미러인가요? (-> 3TB 사용가능, 1.93TB 사용)non_redundant
4TB 드라이브가 하나만 포함된 풀입니다(1.07TB 사용).
이러한 각 풀에는 전체 풀에 걸쳐 암호화된 데이터 세트가 하나만 있습니다.
media_pool/media_encrypted
, three_t_pool/backups
, 그리고 non_redundant/nr_encrypted
.
향후 설정에서는 다음과 같이 1TB 드라이브를 제거하고 12TB 드라이브를 추가할 것입니다.
media_and_backups
3개의 4TB 드라이브와 12TB 드라이브의 4TB 파티션으로 구성된 raidz1 풀((4-1)×4TB = 12TB 사용 가능)non_redundant_foo
8TB가 남아 있는 대용량 드라이브입니다.
및 암호화된 데이터 세트
media_and_backups/media_encrypted
, media_and_backups/backups
및 non_redundant_foo/nr_encrypted
.
(미디어와 백업 데이터 세트를 분리할 필요는 없지만 이로 인해 상황이 복잡해질 수 있습니다)
이제 마이그레이션 프로세스는 다음과 같습니다(7개 드라이브가 모두 동일한 컴퓨터에 연결됨).
- 원하는 4TB 및 8TB 파티션에서 12TB 드라이브 포맷
- 기존 풀/데이터 세트 데이터를 8TB 파티션에 백업
- 이전 풀 3개를 삭제하고
media_and_backups
풀 및 해당 데이터 세트(media_and_backups/media_encrypted
,media_and_backups/backups
)를 생성하고 백업에서 복원합니다. nr_encrypted
[ 데이터를 으로 이동하고media_and_backups
, 8TB 파티션의 파일 시스템을 삭제하고, 거기에 새 풀을 생성하고,nr_encrypted
거기에 데이터 세트를 복원하는 옵션도 있습니다 .]
그런데 위에서도 말씀드렸듯이 잘 모르겠는 부분이 백업과 복원 진행상황이에요
- 제가 생각할 수 있는 간단한 방법 중 하나는 rsync를 사용하고, 각 데이터세트에 대한 폴더를 만들고, 모든 데이터를 동기화하고, 원하는 풀과 데이터세트를 만든 다음 해당 데이터세트를 다시 rsync하는 것입니다.
- 한 가지 분명한 단점은 백업 시 데이터가 해독되고 복원 시 다시 암호화된다는 점입니다.
- 그냥 느낌잘못된예를 들어 전송 중 데이터 손상을 어떻게 식별합니까?
zfs send
zfs receive
가야 할 길인 것 같습니다 . 그런데... 실제로 어떻게 해야 합니까?- 나는 대답을 읽었다ZFS 전체 스냅샷 보내기/받기그러나 내 설정과 다른 설정 사이에는 몇 가지 주요 차이점이 있습니다.
- 새 서버에 직접 새 풀을 생성합니다. 먼저 백업을 저장한 다음 동일한 서버에 복원하고 싶습니다.
- 동일한 풀에 저장하고 싶은 3개의 서로 다른 풀의 3개 데이터 세트가 있습니다.
- 사용 가능한 스토리지에 대한 질문도 있습니다. 8TB(= 7.28TiB)는 3.26+1.93+1.07=6.26TiB의 사용된 데이터를 보관하기에 충분하지만, 물론 8TB 풀은 4+3+ 4TB 상당의 데이터 세트를 호스팅할 수 없습니다.
- 나는 대답을 읽었다ZFS 전체 스냅샷 보내기/받기그러나 내 설정과 다른 설정 사이에는 몇 가지 주요 차이점이 있습니다.
- 따라서 현재 데이터 세트를 8TB 풀의 하나의 큰 파일에 개별적으로 저장해야 한다고 생각합니다
zfs send
(또는 어떻게든 청크로 분할). 그런 다음 완료되면 이전 풀을 파괴하고zfs recv
파일을 풀에 복사하여 새 풀을 생성해야 합니다.
이것이 가장 좋은 방법입니까, 아니면 더 나은/권장 방법이 있습니까? 또는 zfs send
/ 사용에 대한 모범 사례 zfs receive
. 이 작업을 수행하는 경우 알아야 할 사항이 있나요?
답변1
그래서 오류 수정이 수신 시 발생한다는 것을 알았으므로 중간 파일을 만드는 것은 좋은 생각이 아닙니다.
또한 내 데이터세트에 볼륨 크기가 설정되어 있지 않다는 사실을 발견했습니다( 를 사용하여 확인 zfs get volsize
). 따라서 풀 크기가 아닌 총 사용량 크기에만 주의하면 됩니다.
나도 거기 가봤어 전체 zfs 풀을 다른 zfs 풀로 단방향 미러링하는 방법내가 아는 한 -d
(discard) 옵션을 사용하여 zfs receive
파일 시스템 경로가 새 풀과 일치하도록 할 수 있습니다.
또한 데이터세트가 암호화되어 있기 때문에 --raw
해당 플래그를 켜야 합니다 zfs send
. 데이터세트를 해독하고 다시 암호화하는 것을 방지하고 싶기 때문입니다.
마지막으로, 서로 다른 풀의 여러 데이터 세트를 모두 동일한 대상 풀로 보내기 때문에 풀 스냅샷이 아닌 데이터 세트 스냅샷만 보내도록 주의해야 합니다. 그렇지 않으면 풀에서 충돌하는 스냅샷에 대한 오류가 발생합니다.
전반적으로 내 전송 명령은 다음과 같습니다.
zfs send -R --raw origin_pool/dataset@transfer_some_timestamp | pv -Wbraft | zfs receive -Fduv destination_pool
zfs send
-R
모든 속성, 스냅샷을 보존하기 위해 복사 스트림 패키지를 생성합니다...--raw
암호화된 데이터 세트의 경우 전송된 데이터는 디스크에 존재하는 데이터와 정확히 동일합니다. 재암호화 방지
pv -Wbraft
모니터 상태zfs receive
- -F` 대상 풀 확장
-d
origin_pool
파일 시스템 이름의 일부를 버리고destination_pool
사용하십시오 .-u
설치하지 마세요-v
스트림에 대한 자세한 정보와 수신 작업을 수행하는 데 필요한 시간을 인쇄합니다. (돌아보면 아마도pv
및-v
옵션이 모두 필요하지 않았을 것입니다. 하지만 아 뭐)
위의 내용은 일반적인 요점이지만 완전성을 위해 다음 단계를 수행했습니다.
tmux
전제 조건: 실행 중인 프로세스를 중지하지 않고도 쉽게 연결을 끊을 수 있도록 열린 세션을 설정합니다.- 12T 드라이브를 4T 및 8T로 포맷합니다. 4T 파티션의 크기는 다른 4T 드라이브와 정확히 동일합니다(기존 파티션 테이블 중 하나를 보려면 다음을
fdisk -l /dev/sdX
사용 하세요). non_redundant_two
8T 파티션에 풀 생성- 첫 번째 소스 풀에서 재귀적 스냅샷 생성
zfs snap -r drei_t_pool@transfer_$(date '+%Y%m%d%H%M%S')
non_redundant
수영장 으로 이동 : (zfs send -R --raw drei_t_pool@transfer_20231210194637| pv -Wbraft | zfs receive -Fduv non_redundant_two
이상적이지는 않습니다. 아래를 참조하세요.)- 다음 소스 풀의 스냅샷 생성
zfs snap -r media_pool@transfer_$(date '+%Y%m%d%H%M%S')
- 전송을 시도했는데 오류가 발생하여 스냅샷(
zfs list -t snapshot
)을 확인한 결과 풀에는 아주 작은 스냅샷이 있고 데이터 세트에는 큰 스냅샷이 있는 것을 발견했습니다. 풀 스냅샷을 삭제합니다.zfs destroy non_redundant_two@transfer_20231210194637
- 또한 "보유자" 데이터 세트를 생성하고 전체 풀 스냅샷을 여기에 보내는 것을 고려하고 시도했습니다.
zfs create non_redundant_two/media_holder
zfs send -R --raw media_pool@transfer_20231210232518 | pv -Wbraft | zfs receive -Fduv non_redundant_two/media _holder
- 이 방법도 효과가 있는 것 같았지만 더 나은 아이디어가 있었기 때문에 시도를 취소하고 중단했습니다.
- 데이터 세트만 보내기:
zfs send -R --raw media_pool/media_encrypted@transfer_20231210232518 | pv -Wbraft | zfs receive -Fduv non_redundant_two
- 마지막 풀/데이터 세트에 대해 동일한 작업을 수행
zfs snap -r non_redundant@transfer_$(date '+%Y%m%d%H%M%S')
한 다음zfs send -R --raw non_redundant/nr_encrypted@transfer_20231211121954 | pv -Wbraft | zfs receive -Fduv non_redundant_two
- 백업된 데이터 세트를 열고 파일을 읽을 수 있는지 테스트합니다(모든 풀에 대해 이 작업을 수행).
zfs load-key non_redundant_two/backups
- 조사하다...
- 키를 제거하고 제거합니다
zfs unmount -a
.zfs unload-key non_redundant/nr_encrypted
- 풀을 삭제하기 전에 풀의 속성을 백업하세요.
pool get all drei_t_pool > zfs.get.drei_t_pool
- 원본 스냅샷, 데이터 세트, 풀을 삭제합니다. (재귀 플래그를 사용하여 이 작업을 수행할 수 있다는 것을 알고 있지만 수행 중인 작업을 확실히 확인하고 싶습니다.) (모든 소스 풀에 대해)
zfs destroy drei_t_pool@transfer_20231210194637
,zfs destroy drei_t_pool/backups@transfer_20231210194637
zfs destroy drei_t_pool/backups
zpool destroy drei_t_pool
- 마이그레이션하려는 새 풀 만들기
media_and_backups
- 그곳으로 데이터 세트를 전송합니다(데이터가 변경되지 않았으므로 스냅샷을 다시 생성할 필요가 없습니다).
zfs send -R --raw non_redundant_two/backups@transfer_20231210194637 | pv -Wbraft | zfs receive -Fduv media_and_backups
zfs send -R --raw non_redundant_two/media_encrypted@transfer_20231210232518 | pv -Wbraft | zfs receive -Fduv media_and_backups
- 암호 해독 및 설치가 예상대로 작동하는지 확인하고 데이터세트를 삭제합니다.
non_redundant_two
- 전송 스냅샷 폐기
또 다른 궁금증: NFS가 작동하지 않아서 zfs get sharenfs pool_name/dataset_name
내가 설정한 기본 설정이 어디에 표시되는지 확인했는데 SOURCE
탭이 표시되었습니다 remote
. 그래서 속성을 재설정한 후 탭이 SOURCE
나타나고 local
NFS가 다시 작동했습니다.