두 Linux 컴퓨터 간에 휴대용 암호화 ZFS 형식 드라이브 공유 문제

두 Linux 컴퓨터 간에 휴대용 암호화 ZFS 형식 드라이브 공유 문제

두 개의 Linux(NixOS) 시스템이 있고 암호화된 ZFS 형식의 휴대용 USB 하드 드라이브를 공유하고 싶습니다. 한 컴퓨터에서는 제대로 작동했지만 두 번째 컴퓨터에 설치하려고 하면 드라이브의 ZFS 파일 시스템이 손상되었을 수 있습니다.

USB 드라이브를 한 시스템에서 다른 시스템으로 이동하기 전에 zpool을 내보내 마운트 해제했습니다. 두 번째 시스템의 드라이브에서 zpool을 가져올 수 있기를 원하지만 zpool의 ZFS 개념을 오해하고 있는 것일 수 있습니다. , 등 의 다양한 조합을 통해 두 번째 시스템에서 ZFS 드라이브를 볼 수 없습니다 zpool list. 드라이브가 확실히 나타났지만 이 두 번째 시스템에 대한 ZFS의 자동 감지는 알 수 없는 이유로 드라이브를 무시했습니다.zpool import -azpool import -D/dev/sdb

sudo zpool create z /dev/sdb나는 zpool이 이 시스템에서 미러링해야 하는 완전히 가상적인 것이라고 생각하여 간단한 작업을 수행하게 되었지만 이 명령은 경고 없이 해당 드라이브의 원래 ZFS 파일 시스템을 덮어쓴 것 같습니다. 이제 드라이브는 암호화되지 않은 비어 있는 파일 시스템이 되었으며 여기에서 데이터를 복구할 수 있는지 확실하지 않습니다. 다행히 백업이 있어서 완전 손실은 아니었습니다.

두 가지 질문:

  1. 기존 vdev에 새 zpool을 생성하면 해당 장치의 이전 ZFS 파일 시스템이 영구적으로 삭제됩니까?

  2. 기존의 암호화된 ZFS 드라이브 zpool을 한 시스템에서 다른 시스템으로 가져오고 원래 zpool 구성 옵션(예: 압축, 암호화, 데이터 세트 등)을 모두 가져오려면 어떻게 해야 합니까? 그렇지 않다면 zpool import무엇입니까?

답변1

실험을 통해 첫 번째 질문에 답했다고 생각합니다. 예, zpool create영향을 받은 vdev의 기존 풀을 모두 삭제합니다.

이 풀을 공유할 시스템 간의 호환성을 보장하려는 경우 zpool 구조의 메커니즘이 정확하고 테스트 성공을 방해할 수 있는 잠재적인 차단이 없다고 확신할 때까지 암호화를 중단하는 것이 좋습니다. .

ZFS 풀을 시스템 간에 이식할 수 있는 데 필요한 조건 중 하나는 풀을 구성하는 블록 장치(및 풀 메타데이터에 인코딩된 블록 장치)가 풀이 있는 모든 시스템에서 명시적이어야 한다는 것입니다. 수입. 이로 인해 /dev/sdb. 더 나은 접근 방식은 사용하려는 각 드라이브에 파티션을 만들고 사용된 각 파티션에 고유한 레이블을 할당하는 것입니다. 드라이브의 일련 번호는 풀 메타데이터에서 전자적으로 볼 수 있을 뿐만 아니라 출력에서도 볼 수 있고 blkid물리적 드라이브 섀시를 검사할 때 사람이 볼 수 있기 때문에 사용하기 편리한 문자열인 경우가 많습니다.

따라서 하드 드라이브의 일련 번호가 이면 6SL0CTD해당 드라이브에 파티션을 생성하고 레이블을 지정해야 합니다 zfs-data-6SL0CTD. 그런 다음 잠재적으로 변경 가능한 물리적 장치가 아닌 해당 논리 장치를 참조하는 풀을 만듭니다.

# zpool create tank /dev/disk/by-partlabel/zfs-data-6SL0CTCD

또한 매뉴얼 페이지를 읽고 zpool import무엇을 가져올지(또는 가져오지 말아야 할 이유) 확실하지 않을 때 사용할 수 있는 비파괴 도구가 많이 있다는 점에 유의하세요.

매개변수가 없는 경우:

# zpool import

가져올 수 있는 풀을 표시합니다. 테스트 케이스는 없지만 풀도 보여줄 것이라고 믿습니다.할 수 없다일반적으로 장비의 누락 또는 오작동으로 인해 수입됩니다. 장치가 "누락"되는 이유 중 하나는 풀 메타데이터에 /dev/sdb가 사용됨이 표시되어 있지만 호스트에 이미 /dev/sdb가 있고 장치에 풀과 일치하는 메타데이터가 없기 때문일 수 있습니다. 다시 말하지만, 파티션 레이블을 할당하고 파티션 레이블만을 기반으로 풀을 생성하는 것이 중요한 이유입니다. 해당 파티션 레이블이 있으면 풀을 찾을 수 있으며 무엇이든 가능합니다.물리적파티션이 나타나는 장치입니다.

# zpool import -N tank

풀을 가져오되 tank풀에서 파일 시스템을 마운트하지 마십시오. 이는 풀에 대한 보조 검사로 사용될 수 있습니다. 아무것도 설치되어 있지 않아도 풀의 통계를 확인할 수 있고, 풀에 scrub침대를 깔 수 있는 등의 작업이 가능합니다.

명확한 장치 이름을 사용하도록 풀을 올바르게 생성했다면 나중에 이것이 왜 중요한지 이해하게 될 것입니다.

zpool status -P풀에 있는 모든 장치에 대한 전체 논리 경로가 표시됩니다.

# zpool status -P
  pool: tank
 state: ONLINE
  scan: scrub repaired 0B in 21h34m with 0 errors on Sun Oct 10 21:58:23 2021
config:

    NAME                                            STATE     READ WRITE CKSUM
    tank                                          ONLINE       0     0     0
      /dev/disk/by-partlabel/zfs-data-6SL0CTCD    ONLINE       0     0     0

errors: No known data errors

그렇지 않으면 zpool status -L표시됩니다.물리적풀에 있는 모든 장치의 장치 이름:

# zpool status -L
  pool: tank
 state: ONLINE
  scan: scrub repaired 0B in 21h34m with 0 errors on Sun Oct 10 21:58:23 2021
config:

    NAME                                            STATE     READ WRITE CKSUM
    tank                       ONLINE       0     0     0
      sdb1                     ONLINE       0     0     0

errors: No known data errors

물리적 장치 노드 대신 파티션 레이블을 사용하는 최종 결과는 zpool status -P풀로 가져온 모든 시스템에서 출력이 동일하지만 출력이 zpool status -L매우 다를 수 있다는 것입니다. 이것이 zpool create풀로 가져와야 할 수 있는 모든 시스템에서 이러한 장치가 명시적임을 보장하기 위해 비변형 논리 장치 측면에서 명령을 작성해야 하는 이유입니다 .

명시적인 장치 이름을 기반으로 풀을 구축한 후에는 풀을 가져올 수 있어야 하는 호스트에 상당히 유사한 ZFS 스택이 있다고 가정하면 zpool 암호화가 간단해집니다.

관련 정보