콘텐츠로 이동

복원

모든 복원은 복원 페이지에서 시작합니다. 섹션을 고르고, 되돌리고 싶은 것을 검색한 다음, 백업을 고르세요. 창 하나로 모든 종류의 항목을 복원하며, 단계별로 물어봅니다. 기본값에서는 원본이 전혀 바뀌지 않습니다. 백업이 원본 옆에 따로 복원되기 때문입니다.

섹션 타일, 검색, 스택 카드가 있는 복원 페이지. 섹션 타일, 검색, 스택 카드가 있는 복원 페이지.

복원 페이지

  • 섹션은 섹션을 타일로 보여 주며, 각 타일에 스냅샷이 있는 항목이 몇 개인지 표시됩니다.
  • 무엇을 되돌릴까요?는 고른 섹션의 항목을 검색합니다. 각 줄에는 가장 최근 스냅샷이 표시되고, 항목 열기를 누르면 그 항목의 페이지로 이동합니다.
  • 스택은 백업된 컨테이너가 두 개 이상인 Compose 프로젝트를 나열합니다. 예를 들어 데이터베이스와 Redis가 딸린 immich가 그렇습니다. 검색에서는 스택 이름으로도, 그 안의 컨테이너 이름으로도 스택을 찾을 수 있습니다.
  • 실행 중은 진행 중인 복원을 보여 주며, 복원 창을 닫은 뒤에도 표시됩니다.
  • 긴급은 서버가 사라졌거나 다시 설치된 경우를 위한 긴급 마법사를 시작합니다. 긴급 마법사를 참고하세요.
  • 다른 출처에는 다른 BombVault의 백업을 위한 이전 백업 폴더에서와 Appdata.Backup 플러그인에서 가져오기가 있습니다.

휴대폰에서 본 복원 페이지. 휴대폰에서 본 복원 페이지.

복원 창

항목을 누르면 그 이름이 붙은 복원 창이 열립니다. 단계별로 물어보며, 시작하기 전에 각 단계를 바꿀 수 있습니다.

  1. 백업: 권장 스냅샷이 미리 선택되어 있습니다. 가장 최근 것이거나, 열린 이상 징후가 있다면 그 직전의 마지막 것입니다. 이전 복원 전에 만든 백업에는 그 복원이 교체한 상태가 들어 있으므로, 다른 것이 없을 때가 아니면 건너뜁니다. 더 오래된 것은 목록에 있으며, 비교를 누르면 둘 사이에서 무엇이 다른지 볼 수 있습니다.
  2. 소스: 스냅샷이 여러 곳에 있을 때 파일을 어디에서 가져올지 정합니다. 로컬이 가장 빠릅니다.
  3. 무엇: 전체, 또는 원하는 파일과 폴더에 체크하는 개별 파일입니다.
  4. 어디로: 복원 대상입니다. 선택지는 항목의 종류에 따라 달라집니다.

    대상 동작
    원본 옆에 기본값입니다. 컨테이너는 자체 포트를 가진 <name>-restored라는 두 번째 컨테이너로 돌아오고, VM의 디스크와 NVRAM은 <folder>-restored 폴더에 놓이며, 폴더 세트는 <path>-restored로 돌아옵니다. 원본은 바뀌지 않습니다.
    원본 교체 지금 있는 것을 덮어씁니다. 기본으로 켜져 있는 먼저 현재 상태 백업을 쓰면 BombVault가 먼저 오늘의 상태를 백업하므로 되돌아갈 수 있습니다. 그 백업이 실패하면 복원은 시작되지 않습니다. 서버에서 사라진 컨테이너나 VM에도 쓸 수 있습니다. 복원이 덮어쓰는 폴더가 따로 백업됩니다.
    폴더로 파일만 꺼냅니다. 훑어볼 때 좋습니다.
    ZIP으로 다운로드 새 USB 스틱용 플래시 드라이브입니다. BombVault는 실행 중인 플래시 드라이브에 절대 쓰지 않습니다.
    새 데이터세트로와 데이터세트 안으로 복원 ZFS 데이터세트입니다. ZFS 데이터세트를 참고하세요.
  5. 진행 내용은 복원이 무엇을 할지 글로 알려 주고, 고른 대상을 그림으로 보여 줍니다.

복원 버튼이 열리기 전에 창은 저장소가 응답하는지, 키로 저장소를 열 수 있는지, 스냅샷이 있는지, 대상에 공간이 있는지 확인합니다. 확인에 실패하는 동안에는 버튼이 잠겨 있고, 버튼 안의 (i)가 어느 확인에서 걸렸는지 알려 줍니다.

창은 복원이 지금 있는 것과 비교해 무엇을 바꾸는지도 보여 줍니다. 새 파일, 교체되는 파일, 그대로인 파일을 보여 주고 원하면 목록도 볼 수 있으며, 대상에 있지만 백업에는 없어서 그대로 남는 파일도 알려 줍니다. restic은 파일을 읽지 않고 크기와 수정 시각만으로 이것을 드라이 런으로 계산하며, 아주 큰 트리는 30초 뒤에 멈추고 그렇다고 알려 줍니다. 컨테이너와 VM의 경우에는 복원이 다시 만드는 설정과 실행 중인 설정을 비교합니다. 이미지와 태그, 포트, 변수 이름, 볼륨, 또는 메모리, vCPU, 디스크, 네트워크입니다.

몇 가지는 아무것도 바꾸기 전에 복원을 막을 수 있습니다. 컨테이너의 고정 IP와 게시된 포트는 비어 있어야 하고, 네트워크가 존재해야 합니다. Unraid에서는 모든 제자리 복원이 마운트된 풀이나 공유에 있지 않은 폴더를 거부합니다. 파일이 메모리에 놓여 재부팅하면 사라지기 때문입니다. 제자리 복원은 복원이 쓰는 폴더 안으로 바인드 마운트가 들어와 있는 다른 모든 컨테이너를 알려 줍니다. 예를 들면 "이 경로는 nextcloud-db에서도 사용합니다"인데, 이것은 경고일 뿐입니다.

몇몇 옵션은 해당될 때만 나타납니다. 컨테이너나 VM을 다시 실행하기 전에 살펴볼 수 있도록 하는 끝난 뒤 중지 상태로 두기, 그리고 백업을 만들 때 쓴 GPU나 런타임이 없는 호스트에서 쓰는 GPU와 런타임 없이 복원입니다.

복원은 백그라운드에서 실행됩니다. 창을 닫아도 되며, 진행 상황은 실행 중에도 표시됩니다. 오래 걸리는 복원은 백분율을 보여 주고 취소할 수 있으며, 취소한 복원은 실패가 아니라 취소로 기록됩니다. 컨테이너가 멈추는 중에 취소한 복원이나 컨테이너를 제거하지 못한 복원은 아직 아무것도 복원하지 않았으므로 컨테이너가 다시 시작됩니다. --volumes-from으로 다른 컨테이너의 볼륨을 받는 컨테이너는 그 볼륨을 유지하며, 그 다른 컨테이너가 없는 동안에는 복원이 시작되지 않습니다.

개별 파일에 체크한 무엇 단계의 복원 창. 개별 파일에 체크한 무엇 단계의 복원 창.

폴더로 복원하면 어디에 놓이는가

설정, 복원의 복원 폴더에서 기본 복원 폴더를 정하며, 원하면 섹션별 하위 폴더를 켜고 섹션 하나에 예외를 둘 수 있습니다. 고른 파일은 대상 폴더에 바로 놓입니다. 파일 하나는 그 파일만, 폴더는 내용이 든 폴더로 돌아오고, 서로 다른 폴더에서 고른 파일은 공통 폴더 아래의 경로만 유지합니다. BombVault는 마운트된 저장소에 있지 않은 대상을 거부합니다. Unraid에서는 그런 폴더가 메모리에 있어 재부팅하면 사라지기 때문입니다. 또한 자신의 데이터 폴더로는 절대 복원하지 않습니다.

예시: 파일 하나 되찾기

누군가 어젯밤에 Nextcloud의 config.php를 고쳤는데 Nextcloud가 더 이상 시작되지 않습니다. 새벽 3시 야간 백업에는 정상 파일이 남아 있습니다. 컨테이너 전체가 아니라 그 파일 하나만 필요합니다.

  1. 복원을 열고 컨테이너 타일을 고른 다음 무엇을 되돌릴까요?에 nextcloud를 입력하세요.
  2. nextcloud를 누르세요. 권장 백업인 03:00 백업이 미리 선택된 채로 창이 열립니다.
  3. 소스는 로컬로 두세요.
  4. 무엇에서 개별 파일을 고르세요. 폴더를 config까지 열고 config.php에 체크하세요.
  5. 어디로에서 폴더로를 고르고 폴더를 지정하세요. 예를 들면 user/restore이고, 호스트에서는 /mnt/user/restore입니다.
  6. 진행 내용을 읽어 보세요. 파일은 대상 폴더에 놓이고 컨테이너는 바뀌지 않습니다. 복원을 누르세요.

창은 완료: 파일이 /mnt/user/restore에 있습니다로 끝납니다. 파일은 위쪽 폴더 없이 /mnt/user/restore/config.php로 있습니다. 망가진 파일과 비교해 보고, appdata 폴더로 복사해 넣은 뒤 Nextcloud를 다시 시작하세요.

파일을 바로 제자리에 돌려놓고 싶다면 5단계에서 원본 교체를 고르세요. 먼저 현재 상태 백업을 켜 두면 BombVault가 쓰기 전에 망가진 상태를 먼저 백업합니다. 확인을 위해 nextcloud를 입력하고 복원을 누르세요. 선택한 파일이 제자리에 다시 쓰이는 동안 Nextcloud는 멈춰 있다가 그 뒤 다시 시작되며, 체크한 파일만 쓰입니다. 도중에 실패한 복원은 Nextcloud를 멈춘 채로 둡니다. Nextcloud가 읽는 파일이 반쯤 쓰였을 수 있기 때문이며, 실행 기록에 그렇게 알립니다.

원본 교체를 고른 진행 내용 단계의 복원 창. 원본 교체를 고른 진행 내용 단계의 복원 창.

종류별로 무엇이 돌아오는가

컨테이너는 저장된 정의로부터 Docker API를 통해 다시 만들어지며, 엔트리포인트, 호스트 이름, 중지 설정, 볼륨과 마운트, 리소스 제한, 로그 드라이버, DNS 설정, 레거시 링크도 함께 돌아옵니다. 컨테이너는 백업을 만들 때 실행하던 이미지로 돌아오며, 나중에 받은 더 새로운 이미지가 아닙니다. 이미지가 없으면 먼저 받아 오는데, 이때 설정, 복원의 컨테이너 레지스트리에 있는 로그인 정보를 씁니다. GPU나 런타임(--gpus, --runtime=nvidia)도 함께 돌아옵니다. 그 드라이버나 런타임이 없는 호스트에서는 복원이 그렇다고 알려 주고 GPU와 런타임 없이 복원을 제안합니다. 없는 컨테이너에 대한 링크, 또는 복원된 컨테이너가 시작될 때 멈춰 있는 컨테이너에 대한 링크는 빠지며, 실행 기록에 그렇게 적힙니다. 컨테이너를 삭제한 뒤에 실패한 복원은 컨테이너를 멈춘 상태로 되돌려 놓습니다.

백업에는 컨테이너에서 더 이상 선택하지 않은 폴더가 들어 있을 수 있습니다. 예를 들어 어떤 폴더가 사라지기 전에 만든 오래된 백업입니다. 사라졌거나 빈 폴더는 돌아옵니다. 지금 파일이 들어 있는 폴더는 일부러 체크를 해제했을 수 있으므로 그대로 두며, 복원 전 검사와 실행 기록이 그 이름을 알려 줍니다. 되돌리려면 개별 파일이나 폴더로를 쓰세요.

VM은 SSH를 통해 XML이 다시 정의되고 디스크와 UEFI NVRAM이 다시 연결되며, VM을 삭제한 뒤에도 마찬가지입니다. Unraid 스냅샷이 있는 VM과 zvol 위의 디스크는 VM 백업을 참고하세요.

폴더 세트는 restic이 저장한 대로 소유권, 권한, 타임스탬프와 함께 돌아옵니다. /mnt/user처럼 대상이 소유권만 거부하는 경우, 실행은 그렇게 알리는 메모와 함께 끝납니다. 그러면 BombVault가 파일을 백업과 비교하며, 도착하지 않은 파일이 있으면 복원은 실패합니다.

플래시 드라이브는 실행 중인 /boot에 절대 손대지 않습니다. 복원은 flash-<id>.zip이라는 다운로드이며, Unraid USB Creator에 바로 넣을 수 있습니다. ZIP에는 APP_KEY가 들어 있으므로, 내려받으려면 로그인 비밀번호와 인스턴스에서의 로그인이 필요합니다. 창은 각 플래시 백업에 든 플러그인도 버전과 크기와 함께 나열하며, 하나만 실행 중인 플래시에 되돌려 놓을 수도 있습니다. 그 플러그인의 .plg 파일, config/plugins 아래의 폴더, 백업에 든 패키지 파일입니다. Unraid는 다음 부팅 때, 또는 Plugins, Install Plugin에서 바로 설치합니다.

ZFS 데이터세트에는 전용 대상이 있고 ZFS 속성을 유지합니다. 복원을 참고하세요.

셀프 백업은 긴급 마법사로만 복원됩니다. 마법사가 BombVault를 다시 시작하므로, 열려 있는 핸들 아래에서 실제 데이터베이스를 덮어쓰는 일이 없습니다.

데이터베이스 덤프는 혼자서는 절대 다시 불러오지 않습니다. 데이터베이스 덤프의 한 줄을 내려받거나, 폴더에 저장하거나, 새로 시작한 데이터베이스로 가져올 수 있습니다. 데이터베이스 덤프를 참고하세요.

여러 항목 한꺼번에 복원

복원 페이지에서 백업 목록에서 줄을 고를 때처럼 항목을 고르세요. Ctrl+클릭, Shift+클릭, Ctrl+A, 길게 누르기, 또는 선택입니다. 그런 다음 복원을 누르면 전부를 위한 창이 하나 열립니다.

  • 어느 백업: 권장은 각 항목에 대해 그 항목의 창이 권장했을 백업을 고릅니다. 모두 같은 시점은 각 항목에 대해 고른 시점 또는 그 이전의 가장 최근 백업을 고릅니다. 예를 들어 문제가 생기기 전날 저녁입니다.
  • 어디로: 원본 옆에 또는 원본 교체이며, 먼저 현재 상태 백업을 함께 쓸 수 있습니다.

각 항목은 단일 복원과 같은 방식으로 확인한 뒤 차례로 실행됩니다. 각 줄에 그 항목이 어떻게 진행됐는지 대기 중, 실행 중, 복원됨, 실패, 제외됨으로 표시됩니다. 이 항목 다음에 중지는 실행 중인 복원은 끝내고 더 이상 시작하지 않습니다. 플래시 드라이브는 내려받는 ZIP으로 제공되고, ZFS 데이터세트와 셀프 백업은 하나씩 복원됩니다.

여러 항목 복원: 항목마다 한 줄씩 진행률이 표시됩니다. 여러 항목 복원: 항목마다 한 줄씩 진행률이 표시됩니다.

스택 복원

스택 카드에서 스택을 누르면 스택 복원이 열립니다. 모든 구성원을 각각의 최신 백업에서 동시에 복원하며, 복원 후 의존성 순서대로 시작을 켜면 depends_on 순서대로 시작합니다. 데이터베이스와 캐시가 먼저고 앱이 그다음입니다. 구성원의 프로젝트 폴더가 고른 위치에 없으면 창이 대신 로컬의 상태를 쓰자고 제안합니다.

BombVault는 먼저 구성원과 프로젝트 폴더를 확인하며, 될 수 없는 복원은 아무것도 바꾸지 않습니다. 문제가 없으면 실행 중인 구성원을 앱부터, 데이터베이스는 나중에 멈추고, 프로젝트 폴더를 쓴 다음 구성원을 복원합니다. 프로젝트 폴더가 돌아오지 않으면 구성원은 그래도 복원되지만 멈춘 채로 남습니다. 폴더가 반쯤 쓰였을 수 있고, 구성원의 바인드 마운트가 보통 그곳에 있기 때문입니다. 각 구성원의 실행 기록에 그렇게 알립니다.

데이터베이스 덤프만 있고 파일 백업은 없으며 컨테이너와 이름 있는 볼륨도 사라진 데이터베이스는 데이터 없이 돌아옵니다. 복원 전에 검사가 그렇게 알려 줍니다. 그 데이터베이스는 멈춘 채로 남고, 그것에 의존하는 컨테이너도 마찬가지이므로 어떤 앱도 빈 데이터베이스에서 초기 설정을 실행하지 않습니다. 데이터베이스를 시작하고 덤프를 가져온 뒤 나머지를 시작하세요. 데이터베이스 덤프를 참고하세요.

다른 출처

  • 이전 백업 폴더에서는 더 이상 실행되지 않는 다른 BombVault의 저장소를 디스크나 오프사이트 대상에서 열며, 그 복구 키트나 직접 입력한 APP_KEY를 씁니다. 세션은 읽기 전용이고 메모리에만 있습니다. 이전 백업 폴더에서를 참고하세요.
  • Appdata.Backup 플러그인에서 가져오기는 플러그인의 백업 폴더를 읽습니다. 컨테이너 아카이브 하나하나가 그 컨테이너의 복원 지점이 되며, 날짜는 플러그인이 만든 때로 표시됩니다. 이미 가져온 아카이브는 건너뛰고, 아카이브 자체는 읽기만 합니다. 복원에 정의가 필요하므로 컨테이너는 먼저 BombVault에서 한 번 백업되어 있어야 합니다. 보존 정책은 가져온 복원 지점을 건드리지 않으므로, 더 필요 없어지면 직접 삭제하세요.

복원한 뒤

원본 옆에 복원한 사본은 백업에 제외된 것으로 표시되므로 열린 작업으로 세지 않습니다. 계속 두고 싶다면 일정에 추가하세요. 백업할 때 실행 중이던 컨테이너나 VM은 실행 중인 채로 돌아오고, 멈춰 있던 것은 멈춘 채로 있습니다. Unraid에서는 복원된 컨테이너가 Docker 탭에 평범하고 편집 가능한 앱으로 다시 나타나고, VM은 디스크와 NVRAM이 연결된 채로 VM Manager에 나타납니다.