BTRFS 하위 볼륨의 이름을 바꾸는 방법은 무엇입니까? 그런대로 잘됐다. 하위 볼륨의

하위 볼륨 세트가있는 BTRFS 파일 시스템이 있습니다. 여태까지는 그런대로 잘됐다. 하위 볼륨의 이름을 변경해야합니다. 불행히도 btrfs프로그램에서 하위 볼륨의 이름을 바꿀 수 없습니다. 구글 검색으로 몇 가지 결과가 나왔다. 하나는 내가 할 수 있다고 말했고, 다른 하나는 새로운 이름으로 이전 하위 볼륨을 삭제할 mv수 있다고 말했다 snapshot. 파티션을 크래시하고 백업에서 다시로드해야하기 전에 (꽤 큰) 내 질문은 다음과 같습니다.

  • 하위 볼륨의 이름을 바꾸는 가장 좋은 방법은 무엇입니까?
  • 그냥 괜찮 mv습니까, 아니면 일부 내부 구조를 무효화합니까?
  • 새로운 스냅 샷을 만들고 기존 하위 볼륨을 제거하는 방법이 있습니까? 아니면 몇 가지 단점이 있습니까?

나는 모든 것이 여전히 실험적이라는 것을 알고 있지만, 내 목적 상 꽤 잘 작동했습니다 (지금까지는 매일 증분 백업이 있습니다).



답변

그냥 mv그것. 이것이 우분투 커뮤니티 문서 에서 권장되는 방법입니다 .

그리고 이것이 왜 올바른 방법인지 더 명확하게 설명하기 위해 btrfs sysadmin 안내서의 인용문은 다음과 같습니다.

스냅 샷

스냅 샷은 단순히 btrfs의 COW 기능을 사용하여 데이터 및 메타 데이터를 다른 하위 볼륨과 공유하는 하위 볼륨입니다. [쓰기 가능] 스냅 샷이 만들어지면 원래 하위 볼륨과 새 스냅 샷 하위 볼륨의 상태에는 차이가 없습니다. 스냅 샷으로 롤백하려면 수정 된 원본 하위 볼륨을 마운트 해제하고 그 자리에 스냅 샷을 마운트하십시오. 이 시점에서 원 서브 볼륨은 삭제 될 수 있습니다. 스냅 샷은 하위 볼륨이므로 스냅 샷의 스냅 샷도 가능합니다.


답변

주의해야 할 몇 가지 중요한 사항이 있습니다. 명명 :

btrfs 서브 볼륨-독립 데이터 컨테이너 inside파일 시스템. 기존 FS의 디렉토리 로 표시됩니다 . 새로운 하위 볼륨을 만들면 파일 시스템 내에서 논리 데이터 블록을 사용할 수 있도록 비어 있습니다. 데이터를 논리적으로 분리해야하는 곳 (예 : 다른 VM 또는 다른 하위 볼륨의 다른 클라이언트)에서 사용하는 것이 매우 편리합니다. 이것은 단지 subvolume delete 명령 very fast으로 모든 논리 데이터 블록을 제거 할 수있게 합니다.

btrfs Snapshot- existingos 스냅 샷이 수행되는 순간 모든 데이터 가 포함 된 하위 볼륨 의 사본입니다 . 일부 유예 기간이 스냅 샷을 제거한 후 하위 볼륨 스냅 샷 생성, 변경 (VM 또는 데이터), 모든 것이 정상인지 테스트하는 등 설정 또는 변경 사항을 되돌리기위한 운영 백업으로 사용할 수 있습니다. 중요 사항 : 스냅 샷은 읽기 전용 ( -r스위치) 일 수 있으므로 FS 변경 증분 블록으로 사용될 수 있으며 절대적으로 다른 BTRFS로 전송할 수 있습니다!

현재 (2016-12-30) BTRFS 제한 :

하위 볼륨간에 데이터를 복사하거나 이동하는 경우, 예를 들어 mv dir1/dataset1 dir_subvolume1/데이터를 다른 하위 볼륨에 복사하고 이동하는 경우 원래 볼륨에서 제거하는 모든 실제 io가 생성됩니다. 그리고 매우 단지 참조를 만들기 때문에 BTRFS의 COW 기능을 사용하여 데이터 톤의 복사 효율 :

cp -a --reflink=always dir1/dataset1 dir_subvolume1/

그리고 필요한 경우 :

rm -rf dir1/dataset1

읽기 전용 하위 볼륨 스냅 샷은 mv기존 디렉토리 레벨에서 이름을 바꾸거나 (로 이동) 다른 서브 디렉토리 레벨로 이름을 바꾸거나 이동할 수는 없습니다. 예를 들어 mv /btrfs/subvol_snap1 /btrfs/.snaphots불가능하다 mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system. 설명이 잘되지 않은 오류가 발생한다 . 이러한 스냅 샷을 이동하려면 기존 읽기 전용 스냅 샷의 새로운 읽기 전용 스냅 샷을 새로운 기본 위치로 만든 다음 이전 위치를 제거해야합니다.

btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1

더 쉬운 라이브를 위해 :

btrfs sub list /btrfs

나는 이것이 모든 새로운 btrfs 팬들에게 많은 시간을 절약하기를 바랍니다 🙂


답변

루트 볼륨의 이름을 중첩 된 하위 볼륨으로 바꾸려면 스냅 샷을 만든 다음 find $ROOT_VOL -xdev -delete루트 볼륨의 이전 내용을 제거 해야합니다 . 하위 볼륨을 루트 볼륨으로 이름을 바꾸는 반대 조작은 불가능합니다.


답변