나는 btrfs raid 기능을 시험해 보기로 결정했습니다. btrfs를 설정했습니다
sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9
이제 기존 btrfs 파티션(linux-raid 위에)을 복제하고 싶습니다. cp -a
스냅샷 기반 백업이 40개가 넘고(보관하고 싶음) 여러 번 비울 수 있는 저장 공간을 모두 채우게 되므로 단순을 사용할 수 없습니다 .
지금까지 두 가지 옵션을 볼 수 있습니다.
partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b
아직은 필요한 것 같아btrfs balance start /dev/sda9
그리고
해야 할 일: cp -a
가능한 한 많은 콘텐츠를 스토리지에 증분 복사한 다음 사용합니다.bedup
파일 중복을 제거하고 반복합니다.
선호되는(예: 모범 사례) 접근 방식은 무엇입니까? 나는 첫 번째 것을 선호합니다. 시간이 덜 걸릴 것입니다. 아니면 그 과정에 사악한 "문제"가 숨어 있을 수도 있습니다(물론 btrfs가 실험적이라는 사실은 제외).
첫 번째 문제는 의심의 여지가 없습니다. 도구가 아무리 훌륭하더라도 partclone.btrfs
분명히 다중 장치 파일 시스템을 지원하지 않습니다. :-(
답변1
나는 물었다유제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 장치를 만듭니다.
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와 비슷하게 보내기/받기를 구현합니다. 이것은 당신을 위한 선택 사항일 수 있습니다.
답변2
Stephane의 아이디어는 btrfs 내장 도구를 사용하여 수행할 수 있습니다(이것이 바로 멋진 이유입니다). 오래된 btrfs를종자 장치으로 btrfstune -S 1 /dev/device
디바이스 추가, 시드 디바이스 삭제, 실행을 수행합니다 btrfs balance start
. 시드 장치는 읽기 전용 장치이며 읽기-쓰기 파일 시스템의 일부가 될 수 있습니다.
답변3
@ignis가 제안한 대로 시드를 사용해 보았지만 문제가 발생했습니다. 시드 장치를 제거하려고 할 때 시스템에서 오류가 발생하여 문제를 극복할 수 없었습니다. 그런 다음 (현재 - btrfs-progs v3.19-64-g19a806f, 이전에는 아닐 수도 있음) 명령이 있음을 발견했습니다.
btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>
이로 인해 기존 btrfs 파일 시스템(LVM 논리 볼륨에 있음)을 새 파티션에 매우 쉽게 복제할 수 있었습니다. 2015년 5월 현재 RAID5/6 프로필에서는 작동하지 않습니다. 전체 정보는 매뉴얼 페이지를 확인하세요.
답변4
여기에 0.02달러를 추가하면 됩니다. 나는 이것이 오래된 스레드라는 것을 알고 있습니다. BTRFS 파일 시스템을 사용하는 동안 복구할 수 없는 오류가 발생했기 때문에 어젯밤에 btrfs-clone을 시도했습니다. btrfs-clone은 btrfs 스냅샷 및 전송 기능을 사용합니다. 파일 시스템에 오류가 있으면 스냅샷이 작동하지 않습니다. 나는 또한 오류도 성공적으로 복제한다는 점에서 dd와 약간 비슷하게 작동하는 partclone.btrfs를 시도했습니다. 이것은 제가 작업 중인 가상 머신이기 때문에 새 볼륨에 부분적으로 복제를 시도하고 원래 볼륨에서 문제가 되는 파티션을 포맷한 다음 해당 파티션에 다시 복제를 시도했는데 오류가 다시 발생했습니다. 내가 아는 한, btrfs는 약간 취약하고 잘 복구되지 않습니다. 체크섬 오류가 발생하기 시작하면 스냅샷 작동이 중지되고 체크섬 오류를 복구할 수 없습니다. 또한 현재 하위 볼륨으로 연결된 별도 볼륨의 데이터 스냅샷을 찍을 수 없습니다. 지금 새로운 가상 머신을 구축 중입니다. 오염되지 않은 새 볼륨을 새 가상 머신에 연결할 수 있습니다.
다시 한번 말씀드리지만 제 0.02달러입니다. 건배