스냅 샷의 공유 데이터를 보존하는 다른 매체로 btrfs 파일 시스템을 복제하는 방법


9

btrfs raid 기능을 사용해보기로 결정했습니다. 나는 btrfs를 설정했다.

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

이제 기존 btrfs 파티션을 복제하려고합니다 (linux-raid 위에 위치). cp -a40 개가 넘는 스냅 샷 기반 백업 (보존하려는)이 있기 때문에 단순을 사용할 수 없으며 여러 번 할당 할 수있는 모든 스토리지를 과도하게 채울 것입니다.

지금까지 두 가지 옵션을 볼 수 있습니다.

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

그리고 나는 또한 필요한 것 같아요 btrfs balance start /dev/sda9

해야 할 일 : cp -a스토리지에 적합한만큼 증분 복사 한 다음 bedup파일을 중복 제거하고 반복하는 데 사용 합니다.

선호되는 (즉, 모범 사례) 방법은 무엇입니까? 나는 첫 번째 것을 훨씬 선호합니다. 훨씬 적은 시간이 걸립니다. 또는이 절차 중 하나에 숨어있는 악한 "gotcha"가있을 수 있습니다 (btrfs가 실험적이라는 사실 외에도)


첫 번째 질문은 간단합니다. 그러나 훌륭한 도구는 partclone.btrfs분명히 다중 장치 파일 시스템을 지원하지 않습니다. :-(

답변:


7

내가 물었다 비슷한 질문을 2 년 전.

그러나 필자의 경우 단일 장치를 raid0에 복사하려고했습니다.

나는 결국 해결책을 찾았다 . 당시에는 raid0에서 raid10으로 변환 할 수 없었지만 커널 3.3 이후로는 가능합니다. 따라서 솔루션이 결국에는 효과가있을 수 있습니다.

이 방법의 문제점은 fsuid를 복사한다는 것입니다. 즉, 동일한 시스템에 FS와 사본을 모두 마운트 할 수 없습니다. 당시에는 fsuidFS 를 변경하는 도구가 없었지만 지금은 변경되었을 수 있습니다.

아이디어는 원래 장치 위에 기록 중 복사 레이어를 추가하여 기록 할 수 있지만 나중에 수정할 수있는 다른 곳에서 수정하는 것입니다. 즉, 추가 저장 공간이 필요합니다 (예 : 외장 드라이브).

그런 다음 원본 대신 해당 COW FS를 마운트하고 FS 사본의 장치를 추가 한 후 COW의 장치를 제거하십시오.

기록 중 복사의 경우 장치 매퍼를 사용할 수 있습니다.

쓰기 영역의 일회용 복사를 위해 루프 장치를 사용합니다.

의 당신이 복제하고 싶은 말은하자 /dev/sda/dev/sd[bcde]:

COW 백 스토어를 작성하십시오.

truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store

이제 마운트 된 경우 오리진 FS를 마운트 해제하고 modprobe -r btrfs방해하지 않고 디바이스 스캔을 잊어 버리지 않도록하십시오.

그런 다음 COW'd 장치를 만드십시오.

echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed

지금 /dev/mapper/cowed처럼 /dev/sda그 기록이 아무것도에 끝날 것을 제외 /dev/loop0하고 /dev/sda훼손되지 않은 것입니다.

이제 마운트 할 수 있습니다 :

mount /dev/mapper/cowed /mnt

다른 장치를 추가하십시오.

btrfs dev add /dev/sd[bcde] /mnt

그리고 오래된 것을 제거하십시오 :

btrfs dev del /dev/mapper/cowed /mnt

그것이 끝나면 /dev/sda다른 것과 같은 fsuid를 가지고 있기 때문에 종료하고 플러그를 뽑거나 읽기 전용으로 만들고 싶을 btrfs수도 있습니다.

이제 btrfs-prog가 있다고 가정하면 올바르게 이해하면 다음을 수행 할 수 있습니다.

btrfs balance start -d convert=raid10 /mnt

raid10으로 변환합니다. 이론적으로 모든 데이터 청크가 최소 2 개의 디스크에 복사되도록해야합니다.

메모리에서 온 것이기 때문에 루프 장치에서 더미 btrfs에 대한 테스트를 먼저 수행하는 것이 좋으며 잘못되었을 수 있습니다 (예 : 편집 전 초기 답변 참조).

커널 3.6 이후로, btrfs는 zfs에서와 같이 약간의 송수신을 구현합니다. 그것은 당신을위한 옵션 일 수 있습니다.


좋은 답변, 감사합니다. 테스트하겠습니다. 이제 보내기 / 받기를 실험하고 있습니다.
Adam Ryczkowski

@ Stéphane Chazelas gmane 링크가 죽었을 것입니다. 답을 조정할 수 있습니까?
Jonas Stein

4

상기 된 btrfs를합니다 스테판의 생각은 (그것의 멋진 왜의 것을) 도구를 내장 btrfs를 통해 수행 할 수 있습니다 시드 장비 를 통해가 btrfstune -S 1 /dev/device, 장치를 추가 씨앗 장치를 제거 할 btrfs balance start. 시드 장치는 쓰기 가능 파일 시스템의 일부일 수있는 읽기 전용 장치입니다.


1

나는 파종을 사용하기 위해 @ignis의 제안을 따르려고했지만 문제가있었습니다. 시드 장치를 제거하려고 할 때 시스템에서 오류가 발생하여이를 극복 할 수 없었습니다. 그런 다음 (현재-btrfs-progs v3.19-64-g19a806f, 이전 버전은 아님) 명령이 있음을 발견했습니다.

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

내 기존 btrfs 파일 시스템 (LVM 논리 볼륨에 있음)을 새 파티션에 doddle 복제했습니다. 2015 년 5 월 현재 RAID5 / 6 프로파일에서는 작동하지 않습니다. 자세한 내용은 매뉴얼 페이지를 확인하십시오.


1
btrfs replace start백업 목적으로 절대 사용하지 마십시오 !! 장치 트리가 손상되어 드라이브를 마운트 해제 할 수 있습니다! 오류를 복구하는 것이 불가능했기 때문에 dd -tool을 사용하여 다른 블록 장치에서 이미지 사본을 복원했습니다 . btrfs replace최종 드라이브 마이그레이션 에만 사용하십시오 .
Karmus

0

옵션 1-데이터 복사 후 UUID 변경

소스 파티션이 마운트 해제되었고 자동 마운트되지 않는지 확인하십시오.

사용 중 dd(느린, 벙어리) 또는partclone.btrfs -b -s /dev/src -o /dev/target

btrfstune -u복사 후 및 마운트하기 전에 UUID를 변경하는 데 사용하십시오 .

데이터 손실 경고 : 음주 NOT 마운트 (자동)로 시도 원본 또는 복사 UUID가 변경 될 때까지


옵션 2- btrfs-clone

개인적으로 시도 btrfs-clone하지는 않았지만 기존의 BTRFS 파일 시스템을 새로운 서브 시스템으로 복제하여 각 하위 볼륨을 순서대로 복제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.