동일한 zpool에서 데이터 세트를 수신하는 zfs로 보낼 수 없습니다.

동일한 zpool에서 데이터 세트를 수신하는 zfs로 보낼 수 없습니다.

두 가지 환경을 준비하고 있습니다(분할불)그리고 개발(마을). 복사할 수 없습니다(스냅샷 포함) 데이터세트에서 zfs/staging.assets다른 데이터세트로zfs/choang.assets 이내에같은 zpool zfs.

참고: 소스 및 대상 데이터 세트를 언로드해야 한다고 가정합니다.

zfs unmount zfs/staging.assets
zfs unmount zfs/choang.assets

zfs send -R zfs/staging.assets | zfs receive -F zfs/choang.assets

위 명령을 실행하면 다음 오류가 발생합니다.

Error: Unsupported flag with filesystem or bookmark.
cannot receive: failed to read from stream

-R 옵션을 제거하고 명령을 실행하면 성공합니다.

zfs send zfs/staging.assets | zfs receive -F  zfs/choang.assets

zfs/choang.assets@--head--그러나 스냅샷은 수신되지 않으며 단일 스냅샷이 생성됩니다.

마지막으로 스냅샷을 보내 보았습니다. 한 번에 하나씩 보낼 수 있지 않을까 생각했습니다.

zfs send zfs/staging.assets@sha512_hash | zfs receive -Fduv zfs/choang.assets

이 방법도 작동하지 않으며 다음 오류가 발생합니다.

internal error: Invalid argument
cannot receive: failed to read from stream

모든 스냅샷을 복사하는 방법은 무엇입니까?

답변1

여기서 몇 가지 중요한 사항이 있습니다. 귀하의 오류는 다음의 조합으로 인해 발생합니다.

  • 일반적으로 전체 파일 시스템이 아닌 특정 스냅샷 또는 여러 스냅샷을 보냅니다. 즉, 데이터 세트를 제거하고 사용자를 방해할 필요가 없으며 send/recv나중에 점진적으로 수행할 수 있습니다.
  • 소스에서 스냅샷을 지정하지 않으면 @--head--전송 당시 소스의 상태인 자동으로 생성된 스냅샷을 받게 됩니다. (기존 스냅샷을 보낸 경우 이 스냅샷이 @--head--소스 측의 스냅샷을 대체합니다.) .
  • send -R | recv -F조합은 전체 복사(소스의 속성을 반복적으로 포함하고 대상의 이전 콘텐츠를 삭제함)를 의미하므로 파일 시스템 계층 구조를 확장하는 방법을 결정해야 합니다. 또는 수신 시 no 플래그(플래그 없음)를 사용할 수 있습니다 -e. -d소스 상위 데이터세트의 이름을 유지하지 않고 새 데이터세트 아래의 콘텐츠를 병합하는 것을 의미합니다.

    The -d and -e options cause the file system name of the target snapshot
    to be determined by appending a portion of the sent snapshot's name to
    the specified target filesystem.  If the -d option is specified, all
    but the first element of the sent snapshot's file system path (usually
    the pool name) is used and any required intermediate file systems
    within the specified one are created. If the -e option is specified,
    then only the last element of the sent snapshot's file system name
    (i.e. the name of the source file system itself) is used as the target
    file system name.
    
  • 마지막 아이디어(단일 전송, 전체 수신)는 작동해야 하지만(간단한 환경에서 테스트했는데 작동했습니다) 어쨌든 원하는 것은 아닙니다.

따라서 특정 상황에 요약하고 적용하려면 다음을 수행하십시오.

  1. 현재 스냅샷을 반복적으로 생성하거나 복사하려는 이전 콘텐츠가 모두 포함된 이전 스냅샷을 선택하여 시작하세요.

    zfs snapshot -r zfs/staging.assets@now
    
  2. 대상의 소스에서 이전 스냅샷을 모두 삭제합니다. 모든 스냅샷을 표시 zfs list -Hr -o name -t snap zfs/choang.assets하거나 오류 메시지에서 힌트를 얻습니다. 또는 대상 데이터세트에 중요한 내용이 포함되어 있지 않으면 대상 데이터세트를 삭제하고 다시 생성하세요.

  3. 재귀적으로 보내고 완전히 수신하여 두 번째 데이터세트의 이전 데이터세트를 모두 삭제하고 하위 데이터세트를 대상에 병합하여 소스를 미러링합니다.

    zfs send -R zfs/staging.assets@now | zfs recv -Fu zfs/choang.assets
    

답변2

서버에 최근 CPanel을 통해 커널이 업데이트되었지만 서버가 다시 시작되지 않았습니다. 로그 파일을 검토한 후 ZFS도 업데이트되었음을 ​​확인했습니다. 커널 모듈과 CLI 도구 간의 버전 충돌로 인해 이 질문의 명령이 제대로 작동하지 않는 것 같습니다.

다른 서버에서 다음을 성공적으로 실행한 후 이 결론에 도달했습니다.

# zfs send -R tank1@--refresh-- | zfs recv -Fu tank2

# zfs list -t snapshot
NAME                USED  AVAIL  REFER  MOUNTPOINT
tank1@turtle          9K      -    34K  -
tank1@tiger           9K      -  47.5K  -
tank1@squirrel       10K      -  58.5K  -
tank1@rabbit         10K      -    70K  -
tank1@owl            11K      -  80.5K  -
tank1@deer           11K      -  90.5K  -
tank1@bear             0      -   106K  -
tank1@--refresh--      0      -   106K  -
tank2@turtle          9K      -    34K  -
tank2@tiger           9K      -  47.5K  -
tank2@squirrel       10K      -  58.5K  -
tank2@rabbit         10K      -    70K  -
tank2@owl            11K      -  80.5K  -
tank2@deer           11K      -  90.5K  -
tank2@bear            1K      -   106K  -
tank2@--refresh--      0      -   106K  -

그런 다음 원래 서버로 돌아가 ZFS 모듈을 DKMS에서 커널의 kABI 모듈 시스템으로 전환하고 서버를 다시 시작했습니다. 명령이 올바르게 실행되었습니다. 바라보다https://github.com/zfsonlinux/zfs/wiki/RHEL-%26-CentOS

답변3

ZFS에서 보내기/받기를 사용하면 데이터 세트를 마운트 해제하지 않고 스냅샷에만 사용할 수 있습니다. 볼륨을 보내거나 받을 수 없습니다.

zfs send 명령은 표준 출력에 기록되는 스냅샷의 스트림 표현을 만듭니다. 기본적으로 전체 스트림이 생성됩니다. 출력을 파일이나 다른 시스템으로 리디렉션할 수 있습니다. zfs receive 명령은 표준 입력에 제공된 스트림에 내용이 지정된 스냅샷을 만듭니다. 전체 스트림이 수신되면 새 파일 시스템도 생성됩니다. 이러한 명령을 사용하여 ZFS 스냅샷 데이터를 보내고 ZFS 스냅샷 데이터 및 파일 시스템을 받을 수 있습니다.

올바른 명령은 다음과 같습니다:

zfs send tank/data@snap1 | zfs recv spool/ds01

zfs 스냅샷을 보내고 받는 더 좋은 방법은 다음을 사용하는 것입니다.완충기I/O 지연 위험을 최소화하고 네트워크 버퍼를 채웁니다.

보내는 기계에서:

zfs send pool/image@test | mbuffer -s 128k -m 1G -O 127.0.0.1:9090

수신기에서:

mbuffer -s 128k -m 1G -I 9090 | zfs receive -F pool/image1

동일한 컴퓨터에서 127.0.0.1을 사용하거나 원격 컴퓨터에서 xx.xx.xx.xx를 사용할 수 있기 때문입니다.

원천:https://docs.oracle.com/cd/E18752_01/html/819-5461/gbchx.html

관련 정보