안녕하세요~
1TB정도되는 대용량파일을 전송하려 합니다. 파일은 한개
지금 RSYNC를 이용하여 전송하고 있는데.
이게 전송시간이 너무 길군요…(파일이 커서 그런거지만)
혹시 효율적으로 대용량파일을 전송하려면 어떤 방법이 있을까요?
어떤 분은 파일 무결성 체크를 해서 변경된 부분만 전송(작은용량)이후 합친다 그런방법도 사용하신다고 하던데
파일전송을 하루에 한번씩 해야하는거라 부담이 커서요
혹시 좋은 방법이 있을까요?
그리고 RSYNC가 무결성 체크도 하는걸로 알고 있는데요
(변경된 부분이 없으면 동일파일로 인식하고 마무리를 하더라구요)
–delete명령을 주었을때 1TB의파일이 용량은 같고 파일 내부에 변경된부분이 있을때 지우고 다시 생성을 해주는게 맞나요?
두서없이 질문만 하는군요~
열심히 공부하겠습니다.
–checksum 옵션으로 알고 있습니다.
–delete는 말 그대로 삭제…
일반적으로 checksum 옵션 없이 사용하면 파일의 변경날짜와 용량을 비교해서 ‘통째로’ 엎어쓰는 방식으로 동작하고
–checksum옵션을 주면 작은 조각을 가진 청크(chunk)로 분할해서 해쉬맵을 구성하고 그걸 비교해서 파일의 변경된 부분만
싱크를 하게 됩니다.
그런데 이 경우, 앞부분의 청크가 변하면 뒷부분의 청크도 모두 값이 변하게 되기 때문에 결국 경우에 따라서는 파일 앞부분의 1kb 변경 때문에
1TB 파일을 모두 덮어쓰게 되는 문제가 있습니다.
때문에 rsync에서는 Rolling Hash라는 알고리즘을 적용해서 해당 문제를 보완했습니다.
차치하고, 일단 파일을 검사해서 변경점을 찾고 적용하는 옵션은 --checksum이 맞을겁니다.
단, --checksum은 작동 방식상 당연히 파일 변경날짜와 용량만 비교하는 기본 방식에 비해 더 느립니다.
답변감사드립니다.
무릎꿇고 기다리고있었어요 ㅎㅎ
rsync -PCav --checksum --delete root@192.168.0.2:/test/ /test
말씀하신 옵션을 사용해 봤는데여…
가상 이미지를 10GB정도 생성해두고 내부에 데이터를 조금씩 바꿔보았습니다.
약… 100KB 정도
몇번 테스트를 해봤는데 늘 처음부터 전부 받는거 같군요.
원본 전송
receiving incremental file list
test.img
10485760000 100% 149.68MB/s 0:01:06 (xfer#1, to-check=0/2)
100K정도 삭제후 전송
rsync -PCav --checksum --delete root@192.168.0.2:/test/ /test
receiving incremental file list
test.img
10485760000 100% 148.68MB/s 0:01:07 (xfer#1, to-check=0/2)
변경된 부분만 전송되는 것같지가 않아요
단일파일 전송에는 적용되지 않는건가요?
그럼 이 이상은 모르겠군요…
rsync는 기본적으로 옵션이 없어서 chunk를 만들어서 부분 업데이트를 하는게 기본이고
그 중에서 몇가지 옵션의 추가를 통해서 더 세밀하게 동기화를 하는 구조거든요.
-r : 지정한 디렉토리의 하위 디렉토리까지 재귀적으로 실행
-l : 소프트 링크 보존
-H : 하드 링크 보존
-p : 버전 속성 보존
-o : 소유 속성 보존(루트)
-g : 그룹 속성 보존
-t : 타임스탬프 보존
-D : 디바이스 파일 보존(루트)
-z : 데이터 압축 전송
-b : 낡은 파일은 ~가 붙음
-u : 추가된 파일만 전송 새 파일은 갱신하지 않음
–existing : 추가된 파일은 전송하지 않고 갱신된 파일만 전송
–delete : 서버에 없는 파일은 클라이언트에서도 삭제
-a : 아카이브 모드. rlptgoD를 자동 지정
-c --checksum : 서버와 클라이언트의 파일 크기를 세밀히 체크