머신간에 거대한 스파 스 파일 (VM 디스크 이미지)을 어떻게 동기화합니까?


22

한 리눅스 서버에서 다른 리눅스 서버로 거대한 파일을 동기화 할 수있는 rsync와 같은 명령이 있습니까?

대상 파일이 스파 스 상태로 유지되는 것이 매우 중요합니다. 드라이브가 포함 된 드라이브보다 길지만 클 수는 없습니다. 변경된 블록 만 와이어를 통해 전송해야합니다.

나는 rsync를 시도했지만 기쁨을 얻지 못했습니다. https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

이 작업을 수행하는 프로그램을 작성하면 휠을 재발 명합니까? http://www.finalcog.com/synchronise-block-devices

감사,

크리스


rsync는 대용량 파일에서 비효율적입니다. --inplace를 사용하더라도 먼저 대상 호스트에서 전체 파일을 읽은 다음 로컬 호스트에서 파일을 읽고 시작하여 차이점을 전송합니다 (rsync를 실행하고 관찰하는 동안 dstat 또는 이와 유사한 것을 실행)
ndemou

답변:


21
rsync --ignore-existing --sparse ...

스파 스 모드에서 새 파일을 만들려면

뒤에

rsync --inplace ...

기존의 모든 파일 (이전에 작성된 스파 스 파일 포함)을 업데이트합니다.


3
이 그것을 반대 rsync --existing --inplace하고 rsync --ignore-existing --sparse동기화 속도 향상하도록
마이크

2
누구든지 Mikes가 설명하고 이것이 어떻게 동기화 속도를 높여야하는지 설명 할 수 있습니까?
Preexo April

Mike는 첫 번째 인플레 이스 변경을 의미하고 새로운 추가를 의미하므로 첫 번째 호출과 두 번째 호출의 시간 차이로 인해 새로운 변경 사항을 다시 적용 할 필요가 없습니다. 데이터 스토어에서 직접 rsync를 수행하고 VM이 실행중인 경우에만 해당됩니다. 다른 의미가 없다면?
Yuan

위안에 동의합니다. Steves의 두 번째 명령은 새 파일을 다시 동기화합니다. Mikes 명령 시퀀스를 사용하면 안전합니다.
falstaff

rsync는 대용량 파일에서 비효율적입니다. 질문에 대한 내 의견을 참조하십시오.
ndemou

5

Rsync는 각 파일에 변경 사항 만 전송하며 --inplace를 사용하면 파일을 다시 만들지 않고 변경된 블록 만 다시 작성해야합니다. 자신의에서 기능 페이지 .

rsync는 Unix 시스템을위한 파일 전송 프로그램입니다. rsync는 "rsync 알고리즘"을 사용하여 원격 파일을 동기화하는 매우 빠른 방법을 제공합니다. 이 작업은 링크의 파일 중 하나만 미리 링크의 한쪽 끝에 있어야 할 필요없이 링크를 통해 파일의 차이점 만 전송하여 수행합니다.

--inplace를 사용하면 효과가 있습니다. 그러면 진행률, 전송 압축 (기본 압축 수준), 로컬 스토리지 디렉토리의 내용을 재귀 적으로 전송 (첫 번째 슬래시가 중요 함), 파일을 변경 한 후 전송에 ssh를 사용하게됩니다.

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
user@remote.machine:/path/to/remote/storage/ 

나는 종종 몇 가지 더 많은 일을하는 -a 플래그를 사용합니다. -rlptgoD와 같습니다. 맨 페이지에서 조회 할 수있는 정확한 동작을 그대로 두겠습니다.


1
'-S'는 '긴 줄을 자르지 않고'스파 스 파일 용입니다. 매뉴얼 페이지에서 : -S, --sparse는 스파 스 파일을 효율적으로 처리합니다. 시도해 보겠습니다. 감사합니다.
fadedbee

고마워 나는 고쳤다-나는 당신이 준 링크에서 말한 것에서 벗어났다.
reconbot

아니요, 불행히도 이것은 문제를 해결하지 못합니다. 그것은 않는 파일 동기화하지만 비 스파 스 파일로 맨 끝에 스파 스 파일을집니다. Ubuntu 9.04와 함께 제공되는 ssh / rsync를 사용하고 있습니다.
fadedbee

위의 의견이 잘못되었습니다. 문제는 rsync가 첫 번째 사본에 스파 스가 아닌 파일을 작성한다는 것입니다. 대상 파일이 이미 있고 원본 파일만큼 길지 않은 경우 --inplace rsync가 올바르게 작동합니다. 이제 해결책이 있지만 각 파일이 대상 서버에 이미 존재하는지 확인해야합니다. 그렇다면 --inplace를 수행하고 그렇지 않으면 --sparse를 사용합니다. 이것은 이상적이지는 않지만 작동합니다.
fadedbee

rsync는 대용량 파일에서 비효율적입니다. 질문에 대한 내 의견을 참조하십시오
ndemou

4

나는 이것을하기 위해 소프트웨어를 작성했다.

http://www.virtsync.com

실제 서버 당 $ 49의 상용 소프트웨어입니다.

이제 주거용 광대역에서 3 분 이내에 50GB 스파 스 파일 (3GB의 콘텐츠 포함)을 복제 할 수 있습니다.

chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/
syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB)
[........>.........................................]
done - 53687091200 bytes compared, 4096 bytes transferred.

real    2m47.201s
user    0m48.821s
sys     0m43.915s 

4
TBH (동기화 할 수있는 상태)는 변경되는 데이터의 양에 따라 다르기 때문에 의미가 없습니다. 더 정확한 것은 어떤 블록이 변경되었는지 파악하는 데 소프트웨어가 3 분이 걸리고 심지어 그 속도조차도 디스크 i / o 및 사용 가능한 CPU주기에 따라 달라질 수 있다는 것입니다.
Reality Extractor

6
네트워크 기능에 $ 98 이상의 비용이 드는 상용 소프트웨어임을 공개해야합니다.
리드

사람들이 지금 필요로하는 것을 고려하여 사용하거나 사용하지 않을 수있는 잘 작동하는 소프트웨어를 알려 주셔서 감사합니다. 새롭지 않은 기여에 대해 다른 두 사람에게 감사하지 않습니다.
Florian Heigl

3

도구 를 통해 바이너리 "rsync"를 사용하여 "스냅 샷"백업을 구현하는 Zumastor Linux 스토리지 프로젝트를 살펴보십시오 ddsnap.

맨 페이지에서 :

ddsnap은 여러 동시 스냅 샷을 효율적으로 보유 할 수있는 블록 레벨 스냅 샷 기능을 제공하여 블록 장치 복제를 제공합니다. ddsnap은 두 스냅 샷간에 다른 스냅 샷 청크 목록을 생성 한 다음 해당 차이를 유선으로 전송할 수 있습니다. 다운 스트림 서버에서 업데이트 된 데이터를 스냅 샷 된 블록 장치에 씁니다.


2

lvmsync가이를 수행합니다.

사용 내역은 다음과 같습니다 . 소스에서 LVM 스냅 샷을 작성하고 논리 파티션을 전송합니다. 스냅 샷 생성 이후 변경 사항에 대한 증분 업데이트를 원하는 횟수만큼 전송할 수 있습니다.


나는 그것을 시도했지만 작동하지 않으며 저자는 기꺼이 지원하지 않습니다
user1007727

1
@ user1007727 무료 지원 또는 기꺼이 지원하지 않습니까?
fadedbee

과거에는 lvmsync를 사용했지만 효과가 있었지만 "prod grade"소프트웨어 imo는 아닙니다. :-)
Florian Heigl

1

전체 파일 시스템을 복제하는 것이 해결책 일 수 있습니까? DRBD? http://www.drbd.org/


drbd가 좋은 해결책이라고 생각하지 않지만 rsyncing이라는 아이디어는 디스크 이미지 파일 대신 전체 fs를 배치하는 것이 흥미 롭습니다. 나는 rsync가 이것을 허용하는지 확실하지 않다-나는 그것을 시도하고 다시보고 할 것이다 ...
fadedbee

1

어쩌면 여기서 조금 이상 할 수도 있지만 최근에 NFS 가이 문제를 처리한다는 것을 알았습니다.

따라서 한 컴퓨터에서 디렉토리를 내 보낸 다음 다른 컴퓨터에 디렉토리를 마운트하고 cp. (이전 / 고대 유틸리티 중 일부는 스파 스 파일에 문제가있을 수 있습니다.)

rsync스파 스 파일을 전송하는 데 특히 비효율적이라는 것을 알았습니다 .


1

중간 정도의 차이로 큰 파일 또는 블록 장치를 동기화하려면 일반 복사를 수행하거나 bdsync를 사용할 수 있습니다 . rsync는이 특정 경우에 절대 맞지 않습니다 *.

bdsync나를 위해 일하고, 충분히 성숙해 보였으며, 버그의 역사는 고무적입니다 (작은 문제, 신속한 해결). 내 테스트에서 속도는 이론상 최대치에 가깝습니다 ** (즉, 파일을 읽는 데 필요한 시간에 동기화 할 수 있음). 마지막으로 오픈 소스이며 비용이 들지 않습니다.

bdsync호스트에서 파일을 읽고 체크섬을 교환하여 비교하고 차이를 감지합니다. 이것들 모두 동시에 . 마지막으로 소스 호스트에 압축 패치 파일을 작성합니다. 그런 다음 해당 파일을 대상 호스트로 이동하고 bdsync를 다시 실행하여 대상 파일을 패치하십시오.

다소 빠른 링크 (예 : 100Mbit 이더넷)를 통해 사용하고 차이가 작은 파일 (예 : VM 디스크의 경우)이 파일을 읽는 데 필요한 시간과 동기화하는 시간이 줄어 듭니다. 당신이 (당신이 사용하는 시간을 절약 할 수 있습니다 보인다 다른 하나의 호스트에서 압축 된 변경 내용을 복사해야하기 때문에 느린 링크를 통해 당신은 좀 더 시간이 필요 멋진 트릭을 하지만 테스트하지 않았습니다).


* : rsync는 대용량 파일에서 비효율적입니다. --inplace를 사용하더라도 대상 호스트에서 전체 파일을 먼저 읽은 후에 AFTERWARDS는 소스 호스트에서 파일을 읽고 마지막으로 차이점을 전송합니다 (rsync를 실행하고 관찰하는 동안 dstat 또는 이와 유사한 것을 실행하십시오). 결과적으로 약간의 차이가있는 파일의 경우에도 파일을 동기화하기 위해 파일을 읽는 데 걸리는 시간이 약 두 배가 걸립니다.

** : 파일의 어떤 부분이 변경되었는지 알 수있는 다른 방법이 없다고 가정합니다. LVM 스냅 샷은 비트 맵을 사용하여 변경된 블록을 기록하므로 매우 빠릅니다 ( lvmsync 추가 정보에 자세한 정보가 있음).


0

나는 그러한 유틸리티를 알지 못하고 그것을 처리 할 수있는 시스템 호출 만 알기 때문에 그러한 유틸리티를 작성하면 오히려 도움이 될 수 있습니다.

실제로 할 수있는 일은 qemu-img convert를 사용하여 파일을 복사하는 것이지만 대상 FS가 스파 스 파일을 지원하는 경우에만 작동합니다

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