통합하려는 두 개의 별도 btrfs 파일 시스템이 있습니다. 하위 볼륨 구조는 다음과 같습니다.
/ filesystemA
|- subvolume1
|- subvolume2
|- ...
|- subvolumeN
/ filesystemB
|- subvolume1
|- subvolume2
|- ...
|- subvolumeM
filesystemB
목표입니다. 일일 스냅샷 하위 볼륨이기 때문에 하위 볼륨 1을 N에서 filesystemB
.over 1000 으로 이동하고 싶습니다. N
또한 둘 사이의 차이가 작습니다. 즉, 공유 데이터가 많습니다. filesystemA
1TB이지만 du
경로의 총 파일 수가 300TB를 초과합니다(드라이브의 실제 공간 사용량은 500GB 미만입니다).
따라서 btrfs 하위 볼륨이나 데이터의 공유 특성을 인식하지 못하기 때문에 직접 mv
또는 cp
to filesystemA
to가 실현 가능하다고 생각하지 않습니다 .filesystemB
btrfs send
문서를 몇 번 읽었 btrfs receive
는데 이것이 작동할 것 같습니다. 기본적으로 filesystemB
전체 하위 볼륨 구조를 점진적으로 다시 빌드합니다. 그러나 더 쉬운 방법이 있기를 바랍니다. 왜냐하면 스크립트를 작성해야 하고(하위 볼륨의 수가 많기 때문에) 오류가 발생하기 쉬울 수 있다고 생각하기 때문입니다.
(또한 보내기/받기에는 하위 볼륨이 읽기 전용이어야 하며 Ubuntu 14.04의 btrfs-tools 버전에는 btrfs property
기존 하위 볼륨을 읽기 전용으로 설정할 수 있는 명령이 없는 것 같습니다. 이후 버전에서는 이 컴퓨터에서 그렇게 하기 위해 "프로덕션" 컴퓨터에서 구성 관리를 수행하는 것은 이 작업을 원하지 않습니다.
답변1
나는 당신이 btrfs-send/btrfs-receive를 우회하지 않을 것이라고 확신합니다. 또 다른 옵션은 하위 볼륨을 복사한 다음 대상에서 중복을 제거하는 것이지만 시간이 오래 걸립니다.
읽기 전용 질문: 일일 스냅샷이므로 대부분의 볼륨이 읽기 전용이 아닌가요?
내가 하나 만들게
$btrfs subvolume create /subvolumeA/source
$for i in /filesystemA/subvolume*; do btrfs subvolume snapshot -r $i /filesystemA/source/$i; done
이제 /filesystemA/source/readonly 아래에 모든 하위 볼륨이 있습니다.
이제 상위 문과 함께 btrfs-send를 사용하여 루프의 대상으로 점진적으로 보낼 수 있습니다.
일부 스냅샷을 다시 쓸 수 있어야 하는 경우 해당 스냅샷의 내용을 쓰기 가능한 새 하위 볼륨에 복사 를 사용할 수 있습니다 cp --reflink
.
답변2
귀하의 목록을 찾았기를 바랍니다. property
해당 버전의 명령이 문서화되지 않았 습니까 ?이 답변btrfs property set -ts /path/to/snapshot ro true
비슷한 명령을 사용하여 문제를 해결하는 것이 좋습니다 .
향후 독자를 위해: 새 스냅샷을 읽기 전용으로 설정하고 -r
스냅샷을 생성할 때 매개변수를 사용하십시오. 내 스크립트에서는 다음과 같은 것을 사용합니다.
comm -23 \
<(btrfs subvolume list -ors --sort=path /fsA/ | perl -ne 'print if s/.+?\spath\s+(.+)/\1/') \
<(btrfs subvolume list -ors --sort=path /fsB/ | perl -ne 'print if s/.+?\spath\s+(.+)/\1/')
파일 시스템의 읽기 전용 스냅샷 볼륨 목록을 제공해야 합니다.ㅏ어느 것아니요파일 시스템에서두번째. 동기화할 각 목록에 대해 보내기/받기를 수행하여 목록을 반복할 수 있습니다.