스냅샷이 포함된 btrfs 하위 볼륨을 (올바르게/효과적으로) 이동하는 방법은 무엇입니까?

스냅샷이 포함된 btrfs 하위 볼륨을 (올바르게/효과적으로) 이동하는 방법은 무엇입니까?

저는 루트를 구성하고 백업에 스내퍼를 사용하도록 시스템을 구성하기 위한 파일 시스템으로 btrfs를 사용하고 있습니다.

하위 볼륨 /@arch-root/@.snapshots/에는 여러 개의 하위 디렉터리가 포함되어 있고 각 하위 디렉터리에는 여러 개의 하위 볼륨이 포함되어 있으며 이러한 하위 디렉터리는 모두 내 스냅샷입니다.체계루트( /@arch-root/, 자체 하위 볼륨). 이제 @.snapshots실제 상황으로 넘어가고 싶습니다파일 시스템/전체 롤백 프로세스를 원활하게 하려면 루트를 사용하세요 . 어떻게 움직일 수 있나요?

(분명히 내가 옮기는 중이야~에동일한 파일 시스템/파티션. )

특히 mv하위 볼륨(내부 하위 볼륨 포함)을 이동하는 것이 가능할 것으로 보이지만 이 경우 효과는 확실하지 않습니다(특히 디스크 소비/CoW/파일 블록 간의 내부 링크 관련). 파일이 작으면 간단히 이것을 사용하지만 제 시나리오에서는 스냅샷이 많고 크기도 큽니다.

자세한 내용이 도움이 될 경우를 대비해 전체 상황에 대한 설명은 다음과 같습니다(없을 경우를 대비해).


전체 사례 설명

처음에는 다음과 같이 이상적이지 않은 파일 시스템 레이아웃을 사용했습니다(여기서 로 시작하는 모든 항목은 @하위 볼륨을 의미함).

/
  @arch-root/
    @.snapshots/
      1234/
        @snapshot/
    var/
      @log/

여기서는 /내 Archlinux(부팅 중에 설치됨)의 시스템 루트인 파일 시스템의 루트를 나타내고 @arch-rootsnapper가 생성한 시스템 루트의 스냅샷을 저장하는 곳입니다./@.snapshots

Snapper에 의해 관리 되므로 @.snapshots내부 하위 디렉터리가 포함되어 있으며 각 디렉터리에는 설명자 파일과 @arch-root내 시스템 루트 디렉터리의 스냅샷( )이 포함되어 있습니다.

지금 돌이켜보면 이것이 이상적이지 않았다는 것을 깨달았습니다. 이전 버전으로 롤백해야 하는 경우 쉽게 할 수 없습니다. 유사한 디렉터리는 var/log스냅샷에 올바르게 마운트되지 않습니다. docker가 관리하는 다른 일부 디렉터리에도 비슷한 문제가 있습니다.

따라서 가장 좋은 방법은 모든 중요한 디렉토리를 아래로 이동 /하고 fstab부팅 중에 올바른 위치에 마운트되도록 구성하는 것입니다. 새로운 파일 시스템 레이아웃은 다음과 같습니다:

/
  @arch-root/
  @.snapshots/
    1234/
      @snapshot/
  @var-log/

그리고 fstab파일 시스템은 다음과 같이 마운트됩니다(실제 파일 시스템에서는 a == b마운트됨을 의미함).ba

/    == /@arch-root/
  .snapshots/    == /@.snapshots/
  var/
    log/    == /@var-log/

하지만 이렇게 하려면 이를 이동하는 올바른 방법을 찾아야 합니다. 여기에는 내부 하위 볼륨(스냅샷 포함)이 포함되어 있으므로 이동으로 인해 데이터의 중복 복사본이 생성되어서는 안 됩니다. 질문으로 이어집니다.

관련 정보