웹사이트 검색

Rsync를 사용하여 로컬 및 원격 디렉토리를 동기화하는 방법


소개

원격 동기화를 나타내는 Rsync는 원격 및 로컬 파일 동기화 도구입니다. 변경된 파일 부분만 이동하여 복사되는 데이터의 양을 최소화하는 알고리즘을 사용합니다.

이 자습서에서는 Rsync를 정의하고, rsync를 사용할 때 구문을 검토하고, Rsync를 사용하여 원격 시스템과 동기화하는 방법 및 사용 가능한 기타 옵션을 설명합니다.

전제 조건

rsync를 사용하여 로컬 시스템과 원격 시스템 간에 파일을 동기화하는 연습을 하려면 각각 로컬 컴퓨터와 원격 시스템으로 작동할 두 대의 시스템이 필요합니다. 이 두 머신은 적절하게 구성된 경우 가상 사설 서버, 가상 머신, 컨테이너 또는 개인용 컴퓨터가 될 수 있습니다.

서버를 사용하여 이 가이드를 따를 계획이라면 관리 사용자로 서버를 설정하고 각 서버에 방화벽을 구성하는 것이 좋습니다. 이러한 서버를 설정하려면 초기 서버 설정 가이드를 따르십시오.

이 자습서를 수행하는 데 사용하는 머신 유형에 관계없이 두 머신 모두에 SSH 키를 생성해야 합니다. 그런 다음 해당 가이드의 2단계에 설명된 대로 각 서버의 공개 키를 다른 서버의 authorized_keys 파일에 복사합니다.

이 가이드는 Ubuntu 20.04를 실행하는 컴퓨터에서 검증되었지만 일반적으로 rsync가 설치된 Linux 기반 운영 체제를 실행하는 모든 컴퓨터에서 작동해야 합니다.

Rsync 정의

Rsync는 매우 유연한 네트워크 지원 동기화 도구입니다. Linux 및 Unix 계열 시스템의 편재성과 시스템 스크립트 도구로서의 인기로 인해 기본적으로 대부분의 Linux 배포판에 포함되어 있습니다.

Rsync 구문 이해

rsync의 구문은 ssh, scpcp와 같은 다른 도구와 유사하게 작동합니다.

먼저 다음 명령을 실행하여 홈 디렉터리로 변경합니다.

  1. cd ~

그런 다음 테스트 디렉터리를 만듭니다.

  1. mkdir dir1

다른 테스트 디렉터리를 만듭니다.

  1. mkdir dir2

이제 몇 가지 테스트 파일을 추가합니다.

  1. touch dir1/file{1..100}

이제 100개의 빈 파일이 있는 dir1이라는 디렉토리가 있습니다. 파일을 나열하여 확인합니다.

  1. ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

dir2라는 빈 디렉토리도 있습니다. 동일한 시스템에서 dir1의 내용을 dir2에 동기화하려면 rsync를 실행하고 -r "recursive\를 나타내는 플래그이며 디렉터리 동기화에 필요합니다.

  1. rsync -r dir1/ dir2

또 다른 옵션은 -a 플래그를 사용하는 것입니다. 이 플래그는 "아카이브\를 나타내는 조합 플래그입니다. 이 플래그는 재귀적으로 동기화되며 심볼릭 링크, 특수 파일 및 장치 파일, 수정 시간, 그룹, 소유자를 보존합니다. , 및 권한. -r보다 더 일반적으로 사용되며 사용을 권장하는 플래그입니다. 이번에는 -a 플래그를 사용하여 이전 예제와 동일한 명령을 실행합니다.

  1. rsync -a dir1/ dir2

앞의 두 명령 구문에서 첫 번째 인수 끝에 후행 슬래시(/)가 있으며 여기에서 강조 표시되어 있습니다.

  1. rsync -a dir1/ dir2

이 후행 슬래시는 dir1의 내용을 나타냅니다. 후행 슬래시가 없으면 dir1(디렉토리 포함)은 dir2 내에 배치됩니다. 결과는 다음과 같은 계층 구조를 생성합니다.

~/dir2/dir1/[files]

또 다른 팁은 rsync 명령을 실행하기 전에 인수를 다시 확인하는 것입니다. Rsync는 -n 또는 --dry-run 옵션을 전달하여 이를 수행하는 방법을 제공합니다. -v 플래그는 "verbose\를 의미하며 적절한 출력을 얻기 위해 필요합니다. a, n , 및 v 플래그는 다음 명령에서:

  1. rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

이제 다음과 같이 후행 슬래시를 제거할 때 받은 출력과 해당 출력을 비교합니다.

  1. rsync -anv dir1 dir2
Output
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .

이 출력은 이제 디렉토리 내의 파일만이 아니라 디렉토리 자체가 전송되었음을 보여줍니다.

Rsync를 사용하여 원격 시스템과 동기화

rsync를 사용하여 원격 시스템과 동기화하려면 로컬 시스템과 원격 시스템 간에 구성된 SSH 액세스와 두 시스템 모두에 rsync가 설치되어 있어야 합니다. 두 시스템 간에 SSH 액세스가 확인되면 다음 구문을 사용하여 이전 섹션의 dir1 폴더를 원격 시스템에 동기화할 수 있습니다. 이 경우 실제 디렉터리를 전송하려고 하므로 슬래시를 생략합니다.

  1. rsync -a ~/dir1 username@remote_host:destination_directory

이 프로세스는 로컬 시스템에서 원격 시스템으로 디렉토리를 "푸시\하기 때문에 푸시 작업이라고 합니다. 반대 작업은 이며 동기화에 사용됩니다. 로컬 시스템에 대한 원격 디렉토리 dir1 디렉토리가 로컬 시스템이 아닌 원격 시스템에 있는 경우 구문은 다음과 같습니다.

  1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

cp 및 유사한 도구와 마찬가지로 소스는 항상 첫 번째 인수이고 대상은 항상 두 번째 인수입니다.

다른 Rsync 옵션 사용

Rsync는 이전 섹션에서 배운 플래그 옵션과 같이 유틸리티의 기본 동작을 변경하기 위한 많은 옵션을 제공합니다.

텍스트 파일과 같이 아직 압축되지 않은 파일을 전송하는 경우 -z 옵션으로 압축을 추가하여 네트워크 전송을 줄일 수 있습니다.

  1. rsync -az source destination

-P 플래그도 유용합니다. --progress--partial 플래그를 결합합니다. 이 첫 번째 플래그는 전송에 대한 진행률 표시줄을 제공하고 두 번째 플래그를 사용하면 중단된 전송을 재개할 수 있습니다.

  1. rsync -azP source destination
Output
sending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .

명령을 다시 실행하면 변경 사항이 없으므로 짧은 출력이 표시됩니다. 이는 Rsync가 수정 시간을 사용하여 변경 사항이 있는지 확인하는 기능을 보여줍니다.

  1. rsync -azP source destination
Output
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00

다음과 같은 명령을 사용하여 일부 파일의 수정 시간을 업데이트한다고 가정해 보겠습니다.

  1. touch dir1/file{1..10}

그런 다음 -azP를 사용하여 rsync를 다시 실행하면 Rsync가 변경된 파일만 지능적으로 다시 복사하는 방법을 출력에서 알 수 있습니다.

  1. rsync -azP source destination
Output
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .

두 디렉토리를 동기화 상태로 유지하려면 파일이 소스에서 제거된 경우 대상 디렉토리에서 파일을 삭제해야 합니다. 기본적으로 rsync는 대상 디렉토리에서 아무 것도 삭제하지 않습니다.

--delete 옵션을 사용하여 이 동작을 변경할 수 있습니다. 이 옵션을 사용하기 전에 -n, --dry-run 옵션을 사용하여 원하지 않는 데이터 손실을 방지하기 위한 테스트를 수행할 수 있습니다.

  1. rsync -an --delete source destination

동기화 중인 디렉터리 내에 있는 특정 파일이나 디렉터리를 제외하려면 --exclude= 옵션 다음에 쉼표로 구분된 목록을 지정하면 됩니다.

  1. rsync -a --exclude=pattern_to_exclude source destination

제외할 특정 패턴이 있는 경우 --include= 옵션을 사용하여 다른 패턴과 일치하는 파일에 대해 해당 제외를 재정의할 수 있습니다.

  1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

마지막으로 Rsync의 --backup 옵션을 사용하여 중요한 파일의 백업을 저장할 수 있습니다. 백업 파일이 저장되어야 하는 디렉토리를 지정하는 --backup-dir 옵션과 함께 사용됩니다.

  1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

결론

Rsync는 네트워크 연결을 통한 파일 전송을 간소화하고 로컬 디렉터리 동기화에 견고성을 추가할 수 있습니다. Rsync의 유연성은 다양한 파일 수준 작업에 적합한 옵션입니다.

Rsync를 숙달하면 복잡한 백업 작업을 설계하고 전송 방법과 내용을 세밀하게 제어할 수 있습니다.