내가 물었다 비슷한 질문을 2 년 전.
그러나 필자의 경우 단일 장치를 raid0에 복사하려고했습니다.
나는 결국 해결책을 찾았다 . 당시에는 raid0에서 raid10으로 변환 할 수 없었지만 커널 3.3 이후로는 가능합니다. 따라서 솔루션이 결국에는 효과가있을 수 있습니다.
이 방법의 문제점은 fsuid를 복사한다는 것입니다. 즉, 동일한 시스템에 FS와 사본을 모두 마운트 할 수 없습니다. 당시에는 fsuid
FS 를 변경하는 도구가 없었지만 지금은 변경되었을 수 있습니다.
아이디어는 원래 장치 위에 기록 중 복사 레이어를 추가하여 기록 할 수 있지만 나중에 수정할 수있는 다른 곳에서 수정하는 것입니다. 즉, 추가 저장 공간이 필요합니다 (예 : 외장 드라이브).
그런 다음 원본 대신 해당 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에서와 같이 약간의 송수신을 구현합니다. 그것은 당신을위한 옵션 일 수 있습니다.