btrfs의 스냅샷

btrfs의 스냅샷

내 데비안 시스템에서는 백업을 위해 btrfs 형식의 하드 드라이브를 사용합니다. 데이터의 대부분은 내 음악과 사진 컬렉션이므로 상대적으로 안정적이고 계속 늘어나는 경향이 있습니다.

/media/backup에 btrfs 볼륨을 마운트한 다음 만들고 있던 다양한 백업 세트에 대한 디렉터리가 포함된 하위 디렉터리 백업을 만들었습니다. 매일 밤 백업을 마친 후 스냅샷을 찍습니다.

DATE=$(date+"%Y%m%d_%H%M") btrfs 하위 볼륨 스냅샷/미디어/백업 /미디어/백업/$DATE

첫날에는 예상대로 작동하지만 다음 날 스냅샷에는 첫날의 스냅샷도 포함되고 스냅샷에는 첫 번째 스냅샷과 두 번째 날의 스냅샷이 모두 포함되는 식입니다.

btrfs 스냅샷을 생성할 때 어떤 일이 발생하는지 올바르게 이해한다면 이는 의문의 여지가 있고 디스크 공간 사용량은 절대적으로 최소화되지만 약간 지저분해 보이기 때문에 피하고 싶습니다. 내 첫 번째 생각은 이를 피하기 위해 /media/backup/backup의 스냅샷을 만드는 것이었지만, 물론 볼륨 대신 디렉터리의 스냅샷을 만들려고 하면 작동하지 않습니다.

동일한 볼륨의 여러 스냅샷을 만들고 모든 이전 스냅샷을 가리키는 최신 스냅샷을 방지할 수 있는 방법이 있습니까?

답변1

먼저, 최신 스냅샷을 보면 이전 스냅샷의 디렉터리에 새 스냅샷의 실제 데이터가 포함되어 있지 않으므로 디스크 사용량이 아주 적다는 것이 아니라 추가 사용량이 전혀 없다는 것을 알 수 있습니다.

이제 이를 방지하기 위한 유일한 방법은 스냅샷 프로세스에서 다루지 않는 곳에 스냅샷을 저장하는 것입니다. 이를 수행하려면 기본적으로 두 가지 옵션이 있습니다.

  1. 스냅샷을 생성하려는 하위 볼륨 내에 스냅샷 전용 하위 볼륨을 생성합니다. 스냅샷은 하위 볼륨 경계에서 중지되므로(이것이 기존 스냅샷의 복사본을 저장하지 않는 이유입니다) 스냅샷에는 스냅샷이 없고 스냅샷 하위 볼륨의 빈 디렉터리만 있습니다. 이는 하위 볼륨을 생성하고 btrfs subvolume create스냅샷 생성 스크립트를 스냅샷이 저장된 위치로 지정하기 만 하면 되므로 현재 채택하기 가장 쉬운 옵션일 것입니다. 그만한 가치가 있는 만큼 .snapshots이 방법의 사실상 표준 이름인 것 같습니다. 며칠 동안 사용하고 나면 디렉터리 트리는 대략 다음과 같습니다.

    /media/backups
    /media/backups/.snapshots
    /media/backups/.snapshots/20180207_1342
    /media/backups/.snapshots/20180209_0415
    /media/backups/.snapshots/20180312_1754
    

    스냅샷이 아닌 모든 데이터는 에 있으며 /media/backups모든 개인 스냅샷은 에 저장됩니다 /media/backups/.snapshots. 각 스냅샷 .snapshots에는 빈 디렉토리가 있습니다 .

  2. BTRFS 볼륨의 루트 하위 볼륨을 사용하는 대신 모든 실제 데이터를 자체 하위 볼륨에 넣고 스냅샷을 외부에 배치하는 동안 스냅샷을 생성합니다. 이 접근 방식은 변환하기가 쉽지 않으며 스냅샷 명령보다 더 많은 것을 업데이트해야 할 수도 있지만 전체 스냅샷을 한 번에 롤백하는 것이 더 쉽습니다. 이 방법을 사용하여 일부 스냅샷을 찍은 후 디렉터리 트리는 다음과 같습니다.

    /media/backups/current
    /media/backups/20180207_1342
    /media/backups/20180209_0415
    /media/backups/20180312_1754
    

    모든 데이터는 /media/backups/current(첫 번째 방법처럼 BTRFS 하위 볼륨이어야 함 .snapshots)에 저장되고 스냅샷은 에 있습니다 . 하위 볼륨을 /media/backups삭제 하고 복원할 스냅샷이라는 이름의 쓰기 가능한 스냅샷을 생성하면 전체 스냅샷을 쉽게 복원할 수 있습니다. .currentcurrent

이제 귀하가 말씀하신 내용에 대해 두 가지 의견을 더 제시하고 싶지만 귀하의 질문에 직접적으로 속하지는 않습니다.

  1. 나열된 명령은 쓰기 가능한 스냅샷을 생성합니다. 귀하의 목적이 컬렉션의 보관된 사본을 유지하는 것이라면 이는 귀하가 원하는 것이 거의 확실하지 않으므로 -r스냅샷을 읽기 전용으로 만드는 옵션을 추가하는 것이 좋습니다. 파일을 수정해야 하는 경우(예: 컬렉션에서 파일을 완전히 제거해야 하는 경우)에도 이 btrfs property set명령을 사용하여 스냅샷의 읽기 전용 플래그를 전환할 수 있습니다.
  2. 기술적으로 중요한 문제는 아니지만 타임스탬프 형식이 약간 독특하므로 다른 도구를 사용하여 이러한 스냅샷을 처리하려고 하면 문제가 발생할 수 있고, 이 데이터를 공유해야 하는 경우 다른 사람에게 문제가 발생할 수 있습니다. 이러한 점을 고려하여 "%FT%T"를 사용하는 것이 좋습니다. 이는 모든 소프트웨어에서 구문 분석할 수 있고 대부분의 사람들이 즉시 식별할 수 있는 ISO 8601 타임스탬프를 제공하는 동시에 스냅샷의 합리적인 어휘 순서를 제공합니다.

관련 정보