다음 시나리오를 가정해 보겠습니다. 두 대의 Linux 컴퓨터 A와 B가 항상 사용할 수 있는 것은 아닌 특수 하드웨어 라디오 링크를 통해 연결되어 있습니다. 이는 두 개의 Raspberry Pi에서 발생할 수 있습니다. 어떤 컴퓨터도 인터넷에 접속할 수 없습니다.
Linux A에는 1GB 크기의 libabc.so라는 라이브러리가 있고, Linux B에는 이 라이브러리의 소스 코드가 있습니다. Linux B의 사용자가 소스 코드에서 단일 상수를 변경하고 라이브러리를 다시 컴파일한다고 가정합니다.
1GB의 재컴파일된 파일 전체를 보내지 않고 Linux B에서 Linux A로 업데이트를 보낼 수 있는 방법이나 도구가 있습니까?
어떻게든 사용 하려고 생각 중이었지만 git
텍스트가 아닌 파일에 대한 증분 변경 사항을 저장하지 않습니다. 내가 아는 바로는 rsync
전체 파일도 동기화됩니다. 두 경우 모두 라디오 링크를 통해 다른 컴퓨터의 파일 시스템에 쉽게 액세스할 수 없습니다. 따라서 두 경우 모두 1GB의 데이터가 전송됩니다. 또 다른 해결책은 Linux A에서 소스 코드를 복제하고 업데이트하는 것입니다. 하지만 컴파일하는 데 시간이 걸리고 Linux B의 성능이 훨씬 더 좋습니다.
최종 해결책은 이와 같은 가벼운 도구를 직접 작성하는 것이었습니다. 하지만 이미 뭔가 이용 가능한 것이 있을 것 같아요.
답변1
내가 아는 바로는
rsync
전체 파일도 동기화됩니다.
파일을 동기화합니다. 그러나 네트워크 전송의 기본 동작은 파일이 이미 존재하는 경우 전체 데이터를 보내는 것이 아니라 롤링 블록 체크섬을 계산하고 비교하는 것입니다. 이렇게 하면 공통점이 있을 경우 전송해야 하는 데이터의 양이 줄어듭니다.
파일을 건너뛰지 않으면 수신자 측의 기존 버전이 전송을 위한 "기본 파일"이 되고 데이터 소스로 사용됩니다. 이는 발신자가 보내야 하는 일치하는 데이터를 제거하는 데 도움이 됩니다. 데이터의 원격 일치를 활성화하기 위해 기본 파일에 대한 블록 체크섬이 생성되고 파일 인덱스 번호 바로 뒤에 전송자에게 전송됩니다.
...
블록 체크섬 일치가 발견되면 일치하는 블록으로 간주되며 누적된 일치하지 않는 데이터가 수신자에게 전송됩니다. 이어서 일치하는 블록의 수신자 파일에 있는 오프셋과 길이, 블록 체크섬 및 생성기가 전송됩니다. 일치하는 블록 뒤의 다음 바이트로 진행됩니다.