나는 rsync와 ssh를 사용하여 내 내용을 서버에 백업해야 하는 간단한 백업 스크립트를 설정하려고 합니다.
서버 드라이브의 공간을 절약하기 위해 최신 백업에 --link-dest 옵션을 사용하여 중복 파일이 이전 파일에 하드 링크되도록 하므로 실제 rsync 명령은 다음과 같습니다.
rsync -av -e ssh --link-dest=user@server:/home/user/backups/previous /home/user/tobackup/ user@server:/home/user/backups/current
스크립트는 백업할 파일과 "현재" 및 "이전" 디렉터리로 수행할 작업을 담당하므로 이는 단지 "설명"일 뿐입니다.
내 질문은 주어진 파일을 서버에서 지원되는 파일과 비교하기 때문에 rsync가 먼저 실제로 파일을 보낸 다음 비교한 다음 저장하거나(새롭거나 변경된 경우) 삭제해야 한다고 생각합니다. 변경되지 않은 경우 하드 링크를 저장하시겠습니까? 아니면 파일을 보내지 않고 어떻게든 비교가 이루어지나요?
제가 질문하는 이유는 백업이 큰 경우 변경되지 않은 큰 파일을 보낼 필요 없이 파일이 변경되지 않았다는 사실만 확인하고 싶기 때문입니다. rsync가 이 작업을 수행하는 방법을 모르고 해당 문서에서 찾을 수 없습니다. 따라서 이 작업을 수행하는지, 각 백업의 모든 파일이 네트워크를 통해 전송될 것으로 예상할 수 있는지, 아니면 rsync만 사용할 수 있는지 아는 것이 좋을 것입니다. 변경되지 않은 내용을 보냅니다.
분명히, 어떤 이유로 인해 처음부터 내 원래 아이디어에 결함이 있었다면 대안을 환영합니다.
답변1
제목 질문에 대한 대답은 "예"입니다. rsync는 네트워크를 통해, 드라이브에서 드라이브로, 폴더에서 폴더로 기존 파일을 확인하고 변경된 파일만 업데이트합니다.
에서 man rsync
:
Rsync는 크기나 마지막 수정 시간이 변경된 파일을 찾는 "빠른 확인" 알고리즘(기본값)을 사용하여 전송해야 하는 파일을 찾습니다. 빠른 검사 결과 파일의 데이터를 업데이트할 필요가 없음이 나타나면, 유지된 다른 속성(옵션에서 요청한 대로)에 대한 모든 변경 사항이 대상 파일에 직접 적용됩니다.
rsync는 파일 내의 차이점을 감지하고 해당 차이점을 업데이트할 수 있으므로 설명된 것보다 훨씬 더 강력합니다. 이에 대한 예는 테스트를 위해 매일 .iso 빌드를 rsync할 수 있는 Ubuntu 테스트 페이지를 참조하세요.
가벼운 독서 자료:
Linux에서 Rsync를 사용하여 새 파일 또는 변경/수정된 파일을 동기화하는 방법.
rsync 작동 방식
rsync 매뉴얼.
이 페이지 중 하나를 읽으면 마지막 페이지가 아마도 가장 중요할 것입니다. 이 앱이 실제로 얼마나 다재다능한지 정확하게 보여줍니다.
답변2
아니면 파일을 보내지 않고 어떻게든 비교가 이루어지나요?
rsync
~ 할 것이다아니요일단 비교를 위해 파일을 보냈습니다. 기본 알고리즘은 크기나 마지막 수정 시간이 변경되었는지 확인하여 파일을 전송해야 하는지 여부를 결정합니다.
-c
그러나 (선택할 수 있는 많은 알고리즘)을 사용하여 체크섬 검사를 수행하는 등 더 엄격 하게 하거나 --size-only
. 이는 옵션 중 두 가지일 뿐입니다. 전체 목록을 보려면 매뉴얼 페이지를 확인하세요.