콘텐츠로 이동

ZFS 데이터세트

ZFS 페이지는 ZFS 데이터세트를 백업합니다. 대상은 데이터세트 하나와 그 아래의 모든 데이터세트를 묶은 것입니다. 백업할 때마다 BombVault는 트리 전체의 ZFS 스냅샷을 하나만 만들기 때문에 그 안의 모든 데이터세트가 같은 순간의 상태로 기록됩니다. 그런 다음 그 스냅샷에서 각 데이터세트의 파일을 읽어 폴더와 같은 방식으로 restic에 저장하고, 곧바로 스냅샷을 제거합니다. 백업은 중복 제거되며, 모든 백업을 탐색할 수 있고 개별 파일을 복원할 수 있습니다.

BombVault는 데이터세트에 zfs send를 쓰지 않으며, 데이터세트를 롤백하거나 삭제하지도 않습니다.

요구 사항

  • 이 서버로의 SSH 연결. ZFS 데이터세트는 VM 백업과 같은 키, 호스트, 사용자를 씁니다. VM 백업이 이미 동작한다면 이것도 동작합니다. 그렇지 않다면 GitHub의 SSH를 통한 VM 백업 가이드를 따르세요. 템플릿 필드 이름은 Host SSH: Address, Host SSH: Port, Host SSH: User입니다.
  • 그 호스트의 zfs 명령. Unraid 6.12 이상과 TrueNAS SCALE에 있습니다.
  • Host Data를 /mnt로, Access Mode Read/Write - Slave로 매핑. 템플릿의 기본값입니다. 데이터세트의 스냅샷은 BombVault가 시작된 뒤에야 데이터세트의 .zfs/snapshot 폴더에 나타나므로, 컨테이너가 호스트가 나중에 만드는 마운트를 받아야 합니다.
  • /mnt 아래에 마운트된 데이터세트. Unraid에서는 풀이 /mnt/<pool>에 있으므로 이미 그렇습니다.

설정, 일반에서 도메인을 켭니다(ZFS 데이터세트). 그러면 ZFS 페이지에 이 서버와의 연결 카드가 나타납니다. 이 카드는 SSH 연결을 테스트하고, 연결하는 사용자와 호스트를 보여 주며, 빠진 것이 있으면 무엇이 빠졌는지 알려 줍니다. 호스트 통합 점검(/spike)도 같은 결과를 보여 줍니다.

대상과 하위 데이터세트

ZFS 페이지에서 데이터세트 추가를 엽니다. 목록은 서버에서 가져옵니다. 백업하려는 것 중 가장 위에 있는 데이터세트, 예를 들어 cache/appdata를 고르면 대상은 그 데이터세트와 그 아래 모든 데이터세트를 포함합니다.

  • 새 하위 데이터세트는 자동으로 추가됩니다. 나중에 대상 아래에 만들어진 데이터세트는 다음 실행에서 백업되며, 그 실행이 새 데이터세트라고 알려 줍니다. 첫 백업에서는 한 번 전체를 읽고, 그 뒤로는 변경분만 읽습니다.
  • 개별 하위 데이터세트를 제외할 수 있습니다. 대상 설정에서 하나를 끄면 그 아래의 모든 것과 함께 제외됩니다. 제외한 하위 데이터세트가 서버에서 사라지면 그렇게 표시되며 목록에서 제거할 수 있습니다.
  • 읽을 수 없는 하위 데이터세트는 건너뛰지만, 조용히 건너뛰지는 않습니다. 실행은 그것들을 나열하고, 대상은 몇 개를 건너뛰었는지 보여 주며, 대시보드의 커버리지 카드는 각각을 보호되지 않은 것으로 셉니다. 그래도 실행은 나머지를 모두 백업하고, 건너뛴 하위 데이터세트 때문에 실패하지 않습니다. 이유는 이유 코드 표에 있습니다. 마운트되지 않은 데이터세트, canmount=off, legacy 마운트 지점 또는 마운트 지점 없음, 로드되지 않은 암호화 키, 꺼진 스냅샷 접근, BombVault가 볼 수 없는 마운트 지점입니다.
  • 건너뛴 데이터세트가 하위 데이터세트까지 끌고 가지는 않습니다. 다른 데이터세트만 담고 있는 canmount=off 데이터세트는 건너뛰고("구조만"으로 표시), 마운트된 하위 데이터세트는 백업됩니다. 키가 로드되지 않은 암호화 데이터세트는 같은 키를 쓰는 하위 데이터세트와 함께 건너뜁니다.
  • VM 디스크나 시스템 데이터인 하위 데이터세트는 추가 대화 상자에서 꺼진 상태로 시작하며, 이유가 스위치 옆에 표시됩니다. 풀 전체를 추가하면 무엇이 들어 있는지 나열한 확인 창이 나타납니다.

볼륨

볼륨(zvol)은 파일 대신 가상 디스크를 담고 있으며, ZFS 페이지는 볼륨을 백업하지 않습니다.

  • VM이 쓰는 볼륨은 가상 머신 페이지에서 그 VM과 함께 백업됩니다.
  • 어떤 VM도 쓰지 않는 볼륨(iSCSI extent, 분리한 디스크)은 BombVault가 백업하지 않습니다. 추가 대화 상자와 ZFS 페이지는 이런 볼륨을 세어 그렇다고 알려 줍니다. 이후 버전에서 백업할 예정입니다.

대상 트리 안의 볼륨은 실행할 때마다 건너뛰고 이름을 밝힙니다.

Docker 저장소

Docker의 ZFS 저장소 드라이버에서는 이미지의 각 레이어가 legacy 마운트 지점을 가진 데이터세트입니다. 추가 대화 상자는 이를 부모마다 한 줄로 모읍니다. 이런 데이터세트가 20개보다 많은 트리는 대상이 될 수 없습니다. 그 스냅샷이 있는 동안 Docker가 이미지 레이어를 지울 수 없기 때문입니다. 대신 그 아래 데이터세트, 예를 들어 appdata를 추가하세요.

대상은 겹치지 않습니다

데이터세트는 하나의 대상에만 속할 수 있습니다. BombVault는 기존 대상 안에 있거나 기존 대상을 포함하게 될 새 대상을 거부합니다. 여러 하위 대상을 하나의 상위 대상으로 합치려면, 먼저 백업을 유지하도록 선택해 하위 대상을 삭제한 뒤 상위 대상을 추가하세요. 각 데이터세트는 자기 이름으로 기록을 유지하므로, 다음 백업은 이전 대상이 멈춘 곳에서 이어지고 모든 것을 다시 읽지 않습니다.

스냅샷 전후의 컨테이너 중지와 명령

실행 중인 데이터베이스의 스냅샷은 갑작스러운 정전과 비슷합니다. 데이터베이스는 대개 복구되지만, 복구 과정을 거쳐야 합니다. 각 대상은 이에 대해 두 가지를 할 수 있으며, 둘 다 백업 전체가 아니라 스냅샷 순간에만 적용됩니다.

  • 스냅샷 동안 이 컨테이너를 멈추기. BombVault는 목록의 컨테이너를 멈추고 스냅샷을 만든 뒤 바로 다시 시작합니다. 같은 의존성 단계의 컨테이너는 병렬로 멈추며 의존하는 쪽이 먼저 멈추므로, 전체 시간은 보통 몇 초입니다. 실행에 그 시간이 표시됩니다. 그 뒤 백업은 앱이 이미 다시 돌아가는 동안 고정된 스냅샷을 읽습니다. 실행 중이던 컨테이너만 멈춥니다.
  • 스냅샷 전후에 실행하는 명령. 선택한 컨테이너 안에서 실행됩니다. 예를 들어 아무것도 멈추지 않고 스냅샷 직전에 데이터베이스를 데이터세트로 덤프할 때 씁니다. 스냅샷 전 명령이 실패하면 백업이 실패하고 스냅샷은 만들어지지 않습니다. 스냅샷 후 명령이 실패하면 실행에 표시되지만 백업은 실패하지 않습니다.

문제가 생겼을 때의 동작:

  • 컨테이너를 멈출 수 없으면 BombVault는 이미 멈춘 컨테이너를 시작하고, 백업은 그 컨테이너 이름과 함께 실패합니다. 실행 중인 앱의 스냅샷으로 대신하지 않습니다.
  • 중지는 진행 중인 컨테이너 백업이 끝날 때까지 기다립니다(수동 실행은 최대 30분, 예약 실행은 백업 제한 시간까지). 그래서 둘이 같은 컨테이너를 동시에 멈추거나 시작하는 일은 없습니다.
  • 첫 컨테이너를 멈추기 전에 BombVault는 어떤 컨테이너를 멈추는지 기록합니다. 그 사이에 BombVault가 강제 종료되면 다음 시작 때 그 컨테이너들을 다시 시작하고, 알림을 보내며, 시작하지 못한 컨테이너마다 대상에 빨간 메모를 표시합니다.

데이터베이스 자동 덤프(기능 참고)는 ZFS 대상이 아니라 컨테이너 페이지에서 컨테이너 자체의 백업과 함께 실행됩니다. 컨테이너가 데이터세트를 통해서만 백업되는 데이터베이스는 덤프를 받지 못하므로, 여기서 명령을 지정하세요.

컨테이너는 이 목록과 컨테이너 페이지에 동시에 있을 수 있습니다. 그러면 데이터가 두 저장소에 두 번 저장되고, 전체 백업은 그 컨테이너를 두 번 멈춥니다. 대상이 이를 알려 줍니다.

복원

대상에서 백업을 열고 백업을 고른 다음 데이터세트를 고릅니다. 기본값은 대상의 최상위 데이터세트입니다.

  • 데이터세트 안으로 복원. 백업의 파일이 데이터세트의 마운트 지점에 쓰입니다. 같은 이름의 파일은 덮어쓰고, 다른 파일은 그대로 둡니다. 데이터세트를 롤백하거나 교체하지 않습니다. BombVault는 데이터세트가 마운트되어 있고, 보이고, 쓰기 가능한지 시작 전에 한 번, 쓰기 직전에 다시 한 번 확인합니다. 안에 하위 데이터세트가 마운트된 곳에는 아무것도 쓰지 않습니다. 하위 데이터세트는 자기 파일, 소유자, 권한을 유지하고 자기 백업에서 복원됩니다.
  • 폴더로 복원. /mnt 아래 폴더를 고릅니다. BombVault는 폴더가 마운트된 풀이나 공유에 있는지, 여유 공간이 충분한지 확인합니다. SSH 연결 없이도, 더 이상 없는 데이터세트에도 쓸 수 있습니다.
  • 새 데이터세트로. 아직 없는 데이터세트 이름을 지정합니다. BombVault가 백업에 저장된 ZFS 속성으로 만들고 그 안으로 복원합니다. 새 데이터세트로 복원을 참고하세요.
  • 파일 고르기(고급): 고른 파일과 폴더만 데이터세트에 다시 씁니다.
  • 이 백업의 모든 데이터세트(고급): 트리의 각 데이터세트를 고른 폴더의 각자 하위 폴더로 복원합니다. 그 백업에서 건너뛴 데이터세트는 이름이 표시됩니다.
  • 다른 서버에서: 복구 페이지는 다른 BombVault의 저장소에서 항상 폴더로 복원합니다. 한 백업의 모든 데이터세트를 각자 하위 폴더로, 또는 트리의 한 데이터세트를 통째로 또는 고른 파일만 복원합니다.

대상의 중지할 컨테이너 목록은 데이터세트 안으로 복원할 때도 제공됩니다. 그 컨테이너들은 복원하는 동안 계속 멈춰 있고, 그동안 컨테이너 백업은 기다립니다.

안전 스냅샷

데이터세트에 쓰기 전에 BombVault는 그 데이터세트 하나만의 ZFS 스냅샷을 bombvault-prerestore-<시각>이라는 이름으로 만듭니다. 기본으로 켜져 있으며, 끄려면 두 번째 확인이 필요합니다. 스냅샷을 만들 수 없으면 아무것도 복원하지 않습니다.

BombVault는 안전 스냅샷을 스스로 지우지 않습니다. 대상은 이를 경과 기간과 크기와 함께 나열하고, 각각에 삭제 동작이 있으며, 가장 오래된 것이 30일을 넘으면 경고합니다. 삭제되거나 바뀐 데이터를 풀에 계속 붙잡아 두기 때문입니다.

복원 뒤 되돌리려면 데이터세트 안의 .zfs/snapshot/bombvault-prerestore-<시각>에서 개별 파일을 복사하세요. zfs rollback <dataset>@bombvault-prerestore-<시각>은 그것이 해당 데이터세트의 가장 최근 스냅샷인 동안에만 됩니다. zfs rollback -r은 자동 스냅샷을 포함해 더 최근의 모든 스냅샷을 지웁니다.

새 데이터세트로 복원

BombVault는 백업할 때마다 각 데이터세트에 로컬로 설정된 ZFS 속성을 저장합니다. compression, recordsize, quota, reservation, atime, xattr, acltype, casesensitivity와 직접 정한 사용자 속성입니다. 상속된 값과 읽기 전용 값은 알아서 돌아오므로 저장하지 않습니다. BombVault가 저장하기 전의 백업에는 없습니다.

  • 새 데이터세트로는 저장된 모든 속성을 붙여 zfs create를 실행합니다. casesensitivity, normalization, utf8only는 이 방법으로만 설정할 수 있습니다. 쿼터와 예약은 파일을 쓴 뒤에 설정하므로 파일 쓰기를 거부할 수 없습니다. 사본이 원본과 겹치지 않도록 마운트 지점은 빼고, 복원이 쓸 수 있도록 canmount, readonly와 암호화 설정도 뺍니다. 암호화된 데이터세트 아래에 만든 새 데이터세트는 그 암호화를 이어받습니다. 상위 데이터세트가 있어야 합니다. 만든 뒤에 무언가 실패해도 BombVault는 데이터세트를 없애지 않으므로 새 데이터세트는 서버에 남습니다.
  • 데이터세트 안으로 복원는 저장된 속성을 복원 옆에 보여 줍니다. 이 속성도 설정는 기존 데이터세트가 아직 받는 속성을 파일을 쓰기 전에 설정합니다. 쿼터와 예약은 파일을 쓴 뒤에 설정하므로 파일 쓰기를 거부할 수 없습니다. 이 스위치를 켜지 않으면 데이터세트 설정은 그대로입니다.

백업에 담기는 것

백업에 담기는 것: 백업한 각 데이터세트의 파일과 폴더. 소유자, 모드, 타임스탬프, 확장 속성은 restic이 저장하는 그대로 담깁니다, 그리고 각 데이터세트에 로컬로 설정된 ZFS 속성.

백업에 담기지 않는 것:

  • 각 데이터세트 최상위 폴더 자체의 소유자와 모드(그 아래는 모두 포함). 데이터세트 안으로 복원하면 기존 최상위 폴더는 그대로 두고, 폴더로 복원하면 모드 0755로 만듭니다
  • 기존 ZFS 스냅샷
  • 건너뛰었거나 제외한 하위 데이터세트
  • 볼륨

새 풀로 복원하려면 풀을 만들고 각 데이터세트를 새 데이터세트로 복원하세요. TrueNAS가 SMB 데이터세트에 쓰는 NFSv4 ACL이 기대한 대로 돌아오는지는 아직 확인되지 않았으니, 믿고 쓰기 전에 자기 데이터로 복원을 시험해 보세요.

암호화된 데이터세트

암호화된 데이터세트는 키가 로드되어 있는 동안에만 백업됩니다. 그렇지 않으면 경고와 함께 건너뜁니다. zfs load-key로 키를 로드하고 데이터세트를 마운트하세요. BombVault는 데이터를 복호화된 상태로 읽어 암호화된 restic 저장소에 저장합니다. BombVault에서 암호화를 껐다면 그 저장소는 암호화되지 않습니다.

남은 스냅샷

백업 스냅샷의 이름은 <dataset>@bombvault-<14자리>이며, 예를 들어 cache/appdata@bombvault-20260924021500(UTC)입니다. BombVault는 백업 직후 이를 제거합니다. 데이터세트가 사용 중이었거나 BombVault가 중지되는 등의 이유로 실패하면, BombVault는 다음 때에 제거합니다.

  • 그 대상의 다음 백업 전
  • BombVault가 시작될 때, 모든 대상에 대해, 도메인이 꺼져 있어도
  • 대상을 삭제할 때
  • 대상에서 지금 지우기를 누를 때. 남은 개수도 그곳에 표시됩니다

bombvault- 뒤에 숫자 14자리가 붙은 이름과 정확히 일치하는 것만 제거합니다. 안전 스냅샷, 직접 만든 스냅샷, 자동 스냅샷은 절대 건드리지 않습니다. 직접 제거하려면:

zfs destroy -r cache/appdata@bombvault-20260924021500

이상 징후

비워진 하위 데이터세트는 큰 트리의 합계를 거의 바꾸지 않으므로, 이상 징후 감지는 대상의 각 데이터세트를 따로 지켜봅니다. 크기, 파일 수, 새 데이터, restic 소요 시간은 각자 기록을 가집니다. 그 기록은 데이터세트 이름에 속하므로, 나중에 다른 대상이 트리를 백업해도 남습니다.

이전 실행이 백업했지만 이번 실행이 읽지 못한 데이터세트는, 대상의 선택이 바뀌지 않았다면 비워진 것으로 봅니다. 로드되지 않은 키, 마운트되지 않은 데이터세트, 트리에서 사라진 데이터세트가 여기에 해당합니다. 직접 제외한 하위 데이터세트는 선택을 바꾸므로 그 기록은 처음부터 다시 시작합니다. 데이터 손실에 관한 발견이 열려 있는 동안, 보존 정책은 그 데이터세트의 이전 백업만 남기고 트리의 나머지는 평소대로 정리합니다.

이상 징후 페이지에서는 각 데이터세트가 대상 패널에 따로 한 줄을 가집니다. 이 패널은 대상 카드의 모니터링으로 열거나, 대상에 열린 것이 없으면 열린 항목 없음 카드의 해당 줄에서 엽니다. 이 페이지의 대상 트리는 각 데이터세트 옆에 열린 발견을 보여 줍니다. 발견의 링크는 그 데이터세트의 마지막 정상 백업을 고른 상태로 대상의 복원 패널을 엽니다. 실행이 끝까지 되는지는 대상 전체를 기준으로 판단합니다. 실행은 전체로서 성공하거나 실패하기 때문입니다.

점검 자체는 기능에서 설명합니다. MCP 서버로 연결한 어시스턴트는 ZFS 대상의 복원 지점을 나열하고, 백업을 시작하고, 발견을 읽을 수 있지만, 발견을 확인 처리하는 것은 이상 징후 페이지에서 합니다.

이유 코드

페이지, 실행 기록, 알림은 문제를 다음 코드 중 하나로 알려 줍니다. 대부분은 페이지에서도 해결 방법이 옆에 표시됩니다.

코드 의미 할 일
ssh-missing 이 컨테이너에 SSH 연결이 설정되어 있지 않습니다. VM 백업과 같은 방법으로 SSH 연결을 설정합니다.
host-placeholder Host SSH: Address가 아직 예시 값이고, host.docker.internal도 응답하지 않았습니다. Host SSH: Address를 이 서버의 LAN IP로 설정합니다.
host-fallback Host SSH: Address가 아직 예시 값이지만, host.docker.internal은 동작합니다. 아무것도 하지 않거나, LAN IP를 설정합니다.
ssh-unreachable SSH로 서버에 연결할 수 없습니다. 주소와 포트, SSH가 켜져 있는지 확인합니다.
ssh-auth 서버가 BombVault의 키를 거부했습니다. 연결 카드에 표시된 명령을 서버에서 한 번 실행합니다.
zfs-not-found SSH 호스트에 zfs 명령이 없습니다. Host SSH: Address를 풀을 가진 머신으로 지정합니다.
zfs-permission SSH 사용자가 이 zfs 명령을 실행할 수 없습니다. root를 쓰거나 TrueNAS SCALE을 참고합니다.
uri-mismatch LIBVIRT_URI가 SSH 필드와 다른 호스트나 사용자를 가리킵니다. 둘을 맞추거나, SSH 필드를 비워 둘 다 URI에서 가져오게 합니다.
zfs-error zfs가 다른 오류를 보고했습니다. 세부 정보에 그 메시지가 표시됩니다.
propagation-missing 호스트의 새 마운트가 컨테이너에 전달되지 않습니다. Host Data의 Access Mode를 Read/Write - Slave로 바꾸고 BombVault를 다시 시작합니다.
invalid-name BombVault가 받아들이지 않는 데이터세트 이름입니다. 데이터세트 이름을 바꿉니다.
name-too-long 트리의 데이터세트가 스냅샷 이름으로 쓰기에 너무 깁니다. 이름을 바꾸거나, 그 아래 데이터세트를 대상으로 추가합니다.
invalid-exclude 제외 패턴이나 제외한 하위 데이터세트가 대상과 맞지 않습니다. 메시지가 가리키는 항목을 고칩니다. 하위 데이터세트 전체를 제외하려면 패턴을 쓰는 대신 끕니다.
not-found 서버에 데이터세트가 없습니다. 대상을 제거하거나 데이터세트를 다시 만듭니다. 백업은 계속 복원할 수 있습니다.
not-filesystem 파일 시스템이 아니라 볼륨입니다. 볼륨을 참고합니다.
overlaps-item 데이터세트가 기존 대상과 겹칩니다. 대상은 겹치지 않습니다를 참고합니다.
docker-storage 트리에 Docker 이미지 저장소가 들어 있습니다. Docker 저장소를 참고합니다.
nothing-readable 지금은 대상의 어떤 데이터세트도 읽을 수 없습니다. 건너뛴 데이터세트의 코드를 확인합니다.
snapshot-failed 스냅샷을 만들 수 없었습니다. 세부 정보에 zfs의 메시지가 표시됩니다.
containers-busy 컨테이너를 멈춰야 할 때 컨테이너 백업이 아직 실행 중이었습니다. 나중에 다시 시작합니다. 예약 실행은 스스로 기다립니다.
consistency-stop-failed 컨테이너를 멈출 수 없어 스냅샷을 만들지 않았습니다. 컨테이너를 확인하거나 목록에서 뺍니다.
pre-snapshot-failed 스냅샷 전 명령이 실패했습니다. 실행 세부 정보에 그 출력이 표시됩니다.
container-unknown 목록의 컨테이너가 존재하지 않습니다. 목록에서 뺍니다.
container-is-self BombVault는 자기 컨테이너를 멈출 수 없습니다. 목록에서 뺍니다.
leftover-snapshots BombVault가 제거하지 못한 스냅샷이 서버에 남아 있습니다. 지금 지우기를 누릅니다. 남은 스냅샷을 참고합니다.
zvol 트리 안의 볼륨이며, 건너뛰었습니다. 볼륨을 참고합니다.
canmount-off 마운트되지 않도록 설정됨(canmount=off), 건너뛰었습니다. 데이터가 있다면 마운트하거나 데이터를 하위 데이터세트로 옮깁니다.
legacy-mount legacy 마운트 지점이며, 건너뛰었습니다. /mnt 아래에 마운트 지점을 지정합니다.
no-mountpoint 마운트 지점이 없어 건너뛰었습니다. /mnt 아래에 마운트 지점을 지정합니다.
not-mounted 서버에 마운트되지 않아 건너뛰었습니다. zfs mount로 마운트하거나 canmount=on으로 설정합니다.
key-not-loaded 암호화되어 있고 키가 로드되지 않아 건너뛰었습니다. zfs load-key 후 마운트합니다.
snapdir-disabled 스냅샷 접근이 꺼져 있어 건너뛰었습니다. zfs set snapdir=hidden <dataset>. .zfs 폴더는 숨겨진 채로 남습니다.
not-visible BombVault가 데이터세트의 마운트 지점을 볼 수 없습니다. 마운트 지점을 Host Data 경로 아래로 옮기거나, Read/Write - Slave로 같은 경로에 컨테이너로 매핑합니다.
shfs-only 데이터세트가 스냅샷을 숨기는 /mnt/user를 통해서만 보입니다. Host Data로 /mnt/user가 아니라 /mnt를 매핑합니다.
snapshot-not-visible 스냅샷은 만들어졌지만 BombVault 안에 나타나지 않았습니다. 스냅샷 접근 확인을 실행합니다. 아래를 참고하세요.
snapshot-loop Host Data가 새 마운트를 전달하지 않아 스냅샷이 BombVault에 닿지 않았습니다. Host Data의 Access Mode를 Read/Write - Slave로 바꾸고 BombVault를 다시 시작합니다.
backup-failed 이 데이터세트에서 restic이 실패했습니다. 실행 세부 정보에 이유가 표시됩니다.
not-reached 이 데이터세트 전에 실행이 끝났습니다. 백업을 다시 실행합니다.
gone 데이터세트가 더 이상 서버에 없습니다. 아무것도 하지 않습니다. 백업은 계속 복원할 수 있습니다.
read-only-mount BombVault가 데이터세트를 읽을 수만 있어서 안으로 복원할 수 없습니다. 매핑을 Read/Write - Slave로 바꾸거나 폴더로 복원합니다.
destination-not-mounted 폴더가 마운트된 풀이나 공유에 있지 않습니다. 풀이나 공유에 있는 폴더를 고릅니다.
not-enough-space 대상 위치에 여유 공간이 부족합니다. 공간을 확보하거나 다른 폴더를 고릅니다.
safety-snapshot-failed 안전 스냅샷을 만들 수 없어 아무것도 복원하지 않았습니다. 세부 정보에 zfs의 메시지가 표시됩니다.
safety-name-too-long 데이터세트 이름이 안전 스냅샷에 쓰기에 너무 깁니다. 안전 스냅샷을 끄거나 폴더로 복원합니다.
dataset-exists 이 이름의 데이터세트가 이미 있습니다. 새 이름을 고르거나 데이터세트 자체로 복원하세요.
create-failed 새 데이터세트를 만들지 못했습니다. 세부 정보에 zfs 메시지가 나옵니다. 상위 데이터세트가 있는지 확인하세요.
new-dataset-not-visible 새 데이터세트는 만들었지만 BombVault에서 보이지 않아 아무것도 복원하지 않았습니다. 데이터세트는 서버에 남아 있습니다. Host Data 경로 아래에 마운트한 뒤 그 안으로 복원하세요.
set-properties-failed 저장된 속성을 설정하지 못해 아무것도 복원하지 않았습니다. 세부 정보에 zfs의 메시지가 표시됩니다.
set-limits-failed 파일은 복원했지만 저장된 쿼터나 예약을 설정하지 못했습니다. 세부 정보에 zfs 메시지가 나옵니다. 쿼터나 예약은 zfs set으로 직접 설정하세요.

컨테이너가 보는 것 확인하기

대상의 스냅샷 접근 확인은 트리의 실제 스냅샷을 만들고, 각 데이터세트에 대해 BombVault 안에서 그것을 찾은 뒤 다시 제거합니다. 첫 예약 실행 전에 전체 경로를 확인하는 가장 빠른 방법입니다.

직접 확인하려면 서버에서 다음을 실행하세요.

docker exec BombVault grep zfs /proc/self/mountinfo

각 줄은 컨테이너 안의 마운트 하나입니다. 데이터세트의 줄은 컨테이너 안의 경로(/host/user 아래)와 데이터세트 이름을 보여 줍니다. 그 줄에 master:N 필드가 있으면 그 마운트가 호스트가 나중에 만드는 마운트를 받는다는 뜻이며, 스냅샷 접근에는 이것이 필요합니다. 없다면 Host Data의 Access Mode를 Read/Write - Slave로 바꾸고 BombVault를 다시 시작하세요.

TrueNAS SCALE

  • LIBVIRT_URI가 설정되어 있으면(TrueNAS의 VM 백업처럼), BombVault는 zfs 명령에 쓸 SSH 호스트, 사용자, 포트 중 따로 설정되지 않은 것을 URI에서 가져옵니다. VM 백업을 쓰지 않는다면 대신 LIBVIRT_HOST, LIBVIRT_SSH_USER, LIBVIRT_SSH_PORT를 설정하세요. 변수는 Additional Environment Variables에 추가합니다.
  • root가 아닌 사용자는 대상의 최상위 데이터세트에 대한 권한이 필요하며, 이 권한이 그 아래 모든 데이터세트에 적용됩니다.
zfs allow <user> snapshot,destroy,mount <dataset>

새 데이터세트로 복원하려면 상위 데이터세트에 create 권한도 필요하고, 저장된 속성을 설정하려면 해당 속성에 대한 권한이 필요합니다.

TrueNAS에서 root가 아닌 SSH 세션은 경로에 /usr/sbin이 없습니다. 이때 BombVault는 /usr/sbin/zfs를 직접 호출합니다. - 앱의 Host Data는 ixVolume이 아니라 데이터세트보다 위에 있는 호스트 경로(예: /mnt/tank)여야 합니다. 호스트 경로를 쓰면 앱이 호스트의 새 마운트를 BombVault에 전달하며(rslave), 스냅샷 접근에는 이것이 필요합니다.