여러 개의 32Gb 펜 드라이브를 복제하고 dd를 사용하여 Linux 시스템을 설치했습니다. 나중에 파티션을 축소하고 ("마스터"에서) 몇 가지 변경 사항을 적용했습니다. dd를 사용한 느린 전체 재복제를 피하기 위해 변경된 블록만 전송하는 도구가 있습니까?
생각해봤는데 rsync
파일로만 작동하는 것 같더라고요.
답변1
일부 rsync 버전에는 이 기능이 있습니다(배포판에 따라 다름). Distro에는 일반적으로 rsync용 패치가 2개 있습니다. 하나는 블록 장치에서 읽기 위한 것이고(플래그 제공 --copy-devices
), 다른 하나는 블록 장치에 쓰기 위한 것입니다(플래그 제공 --write-devices
). 그러나 이러한 방식으로도 rsync를 사용하려면 몇 가지 추가 플래그와 주의 사항이 필요합니다.
명령을 살펴보고 분석해 보겠습니다.
rsync -I --copy-devices --write-devices --no-whole-file --inplace \
"$(readlink -f "/dev/vg_src/lv_src")" "$(readlink -f "/dev/vg_dst/lv_dst")"
이는 -I
rsync가 블록 장치 내용보다는 블록 장치 파일(장치를 나타내는 파일 시스템 항목)의 타임스탬프와 크기를 확인하여 동기화를 건너뛸 수 있기 때문입니다. 이 플래그는 rsync가 블록 장치의 내용을 평가하도록 강제합니다.
--copy-devices
파일이 아닌 소스 블록 장치의 내용에서 동기화하도록 rsync에 지시합니다 /dev
.
--write-devices
파일을 교체하는 대신 대상 블록 장치의 내용을 동기화하도록 rsync에 지시합니다 /dev
.
--no-whole-file
변경된 블록만 전송하도록 rsync에 지시합니다 . 필요한 경우 블록 크기를 제어할 수 있습니다 --block-size
.
--inplace
임시 파일을 생성하고 이름을 바꾸는 대신 대상 블록 장치를 업데이트하도록 rsync에 지시합니다 .
이러한 $(readlink ...)
호출은 rsync가 일반적으로 경로를 살펴보고 해당 경로가 심볼릭 링크인지 확인하고 이를 블록 장치로 인식하지 않기 때문에 이루어집니다. 따라서 readlink
심볼릭 링크는 역참조됩니다.
답변2
현재 다음 rsync
과 같은 복제 장치가 지원됩니다.
rsync --copy-devices --write-devices <FROM> <TO>
실제 장치 노드를 찾은 경우에만 장치에 씁니다. 따라서 /dev/mapper/<VG>-<LV>
심볼릭 링크를 소스 장치의 내용이 포함된 파일로만 대체(시도)하므로 대상 으로 사용하지 마십시오 .
[옵션 중 하나가 --*link*
이러한 심볼릭 링크를 따르도록 지시할 수 있지만 저는 그냥 /dev/dm-<NN>
. ]
답변3
설명에 따르면:BSCPSSH 연결을 통해 단일 파일 또는 블록 장치를 복사하고 변경된 부분만 전송합니다.
답변4
비슷한 대안은디스크 동기화블록 중복 제거(및 선택적 백업 압축)를 수행하는 go 코드인 가 ssh
전송으로 사용됩니다. 안정적인 소스 이미지(머클 트리 및 해시로 인해)가 필요하며 이는 일반적으로 스냅샷을 사용하여 보장됩니다.
기본적인 사용법은 아주 간단합니다
diskrsync --verbose --no-compress /dev/vg0/lv_snap ruser@otherhost:/dev/sdd7
diskrsync
별도의 설치 없이 바로 사용이 가능하며, 쌍방의 집에 놓아두기만 하면 사용이 가능합니다.
./diskrsync …
압축은 대상에 압축된 백업을 유지하거나스푸즈로컬 장치로 추출하십시오.