단일 rsync
프로그램을 사용하여 파일 시스템을 백업합니다.
이를 통해 ps
4개의 스레드 또는 프로세스가 있음을 발견했습니다 rsync
. 2개는 R 상태(실행 중)이고 2개는 S 상태(일시 중단?)입니다.
$ ps aux | grep rsync
root 14144 0.0 0.0 6008 1868 pts/1 S+ 03:16 0:00 sudo rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root 14145 47.2 0.5 62424 46108 pts/1 R+ 03:16 226:44 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root 14146 0.6 0.2 80052 20584 pts/1 S+ 03:16 2:59 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root 14147 11.4 0.2 49324 20264 pts/1 S+ 03:16 55:02 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
ting 16986 0.0 0.0 4392 820 pts/4 S+ 11:16 0:00 grep --color=auto rsync
이를 통해 세 가지 프로세스 또는 스레드가 pstree
있음을 발견했습니다 .rsync
$ pstree | grep rsync
| |-bash---sudo---rsync---rsync---rsync
rsync
여러 개의 스레드나 프로세스가 있고 하나의 프로그램만 실행하는 이유는 무엇입니까 ?
stdout 출력에서 여러 파일을 병렬로 스트리밍하는 것 같지 않습니다(추가 노력처럼 보입니까?동시/동시 파일 전송으로 rsync 속도 향상)?
dir1
그러나 대상을 확인한 결과 전송된 파일의 전부가 아닌 일부만 포함된 일부 디렉터리(예: )가 있음을 발견했으며 rsync
stdout의 출력에서는 파일을 별도의 디렉터리(예: dir2
다음이 포함된 디렉터리) 로 전송하고 있다고 말했습니다. 동일한 상위 디렉토리 dir1
). 나중에 stdout으로 출력하여 dir1
전체 파일이 아닌 일부 파일이 전송된 디렉터리(예: )의 나머지 파일을 전송할 것임을 나타냅니다 .
답변1
rsync 프로그램은 다음을 포함하여 많은 작업을 수행해야 합니다.
- 원격 서버와 동기화되지 않은 파일 찾기
- 어느 부분을 옮겨야 할지 결정하세요
- "다른 쪽"이 업데이트될 수 있도록 델타를 전송합니다.
항상 그런 것은 아니지만 종종 전송 구성 요소가 대역폭을 제한하는 요소가 됩니다.
Rsync는 패치 데이터를 병렬로 전송하지 않습니다. 그러나 다른 데이터와 교환을 생성하여 전송해야 할 다른 델타에 대한 지식을 구축합니다. 이를 수행하기 위해 전송 중에 스레드를 사용하여 특정 증분의 전송이 완료되면 다음 증분을 전송할 준비가 됩니다.
더 간단한 접근 방식은 증분 전송이 완료될 때까지 기다린 후 필요한 전송에 대해 다음 파일을 비교하는 것입니다. 다음 다른 파일을 찾는 데 시간이 걸릴 수 있으므로 이 시간 동안에는 전송 대역폭이 활용되지 않습니다.