왜 rsync가 포크합니까? 그리고 왜 그런 갈래 프로세스가 거의 유휴 상태입니까 (iotop에서 볼 수 있듯이)?


11

이것은 여기에 언급 된 문제를 언급 하고 있으며 동일한 문제가 발생합니다.

내 서버 중 하나에서 rsync를 실행하여 거대한 디렉토리 (300Gb보다 큰 크기)를 동일한 컴퓨터에 마운트 된 다른 디스크에 백업했습니다. 재 동기화되는 디렉토리에는 수천 개의 디렉토리와 파일이 있습니다. 'nohup'과 함께 단일 rsync 명령을 실행 한 다음 '&'명령을 사용하여 백그라운드에서 푸시했습니다. 퍼티를 사용하여 원격 bash 쉘에 제공된 전체 명령은 다음과 같습니다.

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

그런 다음 데이터가 복사되는 속도를 확인하기 위해 'iotop'명령을 사용했으며 동일한 매개 변수로 3 개의 rsync가 실행되고 있음을 알았습니다. 검색시 위의 링크가 정상임을 알 수 있습니다.

그러나 시스템에서만 실행되는 rsync 프로세스와 해당 프로세스 만 모니터링하기 위해 iotop을 수행하면 하나의 프로세스가 파일을 읽고 있지만 하나는 파일을 쓰고 있지만 하나는 유휴 상태입니다. 한 프로세스가 한 번에 하나의 작업 만 수행하는 것처럼 동작은 좋아 보이지만 세 번째 프로세스는 무엇입니까 (아래 이미지에서 중간 프로세스로 표시됨)?

내가 사용한 iotop 명령은 다음과 같습니다.

iotop -p22250 -p22251 -p22252

다음은 iotop 명령 출력의 스크린 샷입니다.

3 rsync 프로세스를 보여주는 iotop 명령 출력

나는 rsync를 많이 사용하는이 원인을 묻고 있으며 장기적인 이익을 위해 그 행동을 이해하고 싶습니다. 나는 심지어 매뉴얼을 읽었지만 포크는 아무 것도 말하지 않았다.

답변:


9

rsync는 클라이언트 및 서버용으로 설계된 프로그램입니다. 서버가 읽고 클라이언트가 씁니다. 단일 컴퓨터 대신 네트워크를 통해 컴퓨터를 가지고 있다고 상상해보십시오. 그렇게 생각하면 훨씬 분명합니다.

그런 다음 컨트롤러가 있습니다. IO 작업에 어느 정도의 위험이 따르는 경향이 있으므로 IO 문제로 인해 전체 차단이나 충돌이 발생하지 않아야합니다. 따라서 각 연결마다 포크를 만들고 백그라운드에 앉아 있습니다.


지식 주셔서 감사합니다. 나는 네트워크상의 별도의 컴퓨터 관점에서 그것을 이해하고 각 컴퓨터는 동기화 작업의 일부를 수행합니다. 그러나 rsync 및 개념에 대해 더 많은 내용을 읽을 수있는 동작 문서를 참조 할 수 있습니까? 또한 읽기 프로세스가 읽기 프로세스에서 쓰기중인 프로세스로 데이터를 어떻게 전달하는지 알고 싶습니다. IPC의 개념이 사용되고 있습니까?
Gautam Somani 2012

3
@GautamSomani 공식 rsync 페이지가 그러한 소스를위한 최고의 소스가 될 것입니다. rsync.samba.org 또한 작동 방식을 확인할 수 있습니다. rsync.samba.org/how-rsync-works.html 더 자세한 내용을 원한다면 소스를 파헤쳐 야 할 것입니다.
Grumpy

원래 작성자는 로컬에서 rsync를 시작합니다. 그는 rsyncd에 연결하지 않으므로 데몬이 자식을 포크하는 방법이 없습니다. 그리고 네트워크 연결이 없습니다. 따라서 rsync가 로컬에서 실행될 때 왜 포크가 발생하는지에 대한 의문이 남아 있습니다. 대답은 오도하고 잘못되었습니다.
drookie

@drookie 로컬인지 네트워크인지 여부는 중요하지 않습니다. 같은 방식으로 작동합니다. 또한 주석 바로 위에 링크 된 공식 문서에서이 동작에 대해 설명합니다. "로컬 전송, 원격 쉘 또는 네트워크 소켓을 통해"라고 말합니다.
Grumpy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.