소개
Rsync는 원격 동기화를 나타내며 원격 및 로컬 파일 동기화 도구입니다. 이 도구는 변경된 파일의 일부만 이동하여 복사되는 데이터량을 최소화하기 위해 알고리즘을 사용합니다.
이 튜토리얼에서는 Rsync를 정의하고, rsync
를 사용할 때의 구문을 검토하고, 원격 시스템과 동기화하는 방법을 설명하며 사용 가능한 다른 옵션에 대해 설명하겠습니다.
DigitalOcean App Platform을 사용하여 GitHub에서 프런트엔드 애플리케이션을 배포하세요. DigitalOcean은 앱의 확장에 집중합니다.
전제 조건
rsync
를 사용하여 로컬 및 원격 시스템 간에 파일을 동기화하는 연습을 하려면 로컬 컴퓨터 및 원격 머신으로 동작할 두 대의 기계가 필요합니다. 이 두 대의 기계는 가상 개인 서버, 가상 머신, 컨테이너 또는 개인 컴퓨터일 수 있으며 적절하게 구성되어 있어야 합니다.
이 가이드를 따르려면 서버를 사용하여 계획을 세우는 것이 현명할 것입니다. 관리자 사용자로 서버를 설정하고 각각에 방화벽을 구성하는 것이 좋습니다. 이러한 서버를 설정하려면 초기 서버 설정 가이드를 따르세요.
이 자습서를 따르는 데 사용하는 기계 유형에 관계없이 양쪽 모두에 SSH 키를 만들어야 합니다. 그런 다음 authorized_keys
파일에 각 서버의 공개 키를 다른 서버로 복사하십시오. 해당 가이드의 단계 2에 설명된 대로입니다.
이 가이드는 Ubuntu 20.04를 실행하는 기기에서 유효성이 검증되었지만 일반적으로 rsync
가 설치된 Linux 기반 운영 체제를 사용하는 컴퓨터에서 작동해야 합니다.
Rsync 정의
Rsync는 매우 유연한 네트워크 기능을 가진 동기화 도구입니다. Linux 및 Unix류 시스템에서 널리 사용되며 시스템 스크립트 도구로 인기가 많기 때문에 대부분의 Linux 배포판에 기본으로 포함되어 있습니다.
Rsync 구문 이해
rsync
의 구문은 다른 도구인 ssh
, scp
, 그리고 cp
와 유사하게 작동합니다.
먼저 다음 명령을 실행하여 홈 디렉토리로 이동하십시오:
그런 다음 테스트 디렉토리를 만드십시오:
다른 테스트 디렉토리를 생성하십시오:
이제 몇 가지 테스트 파일을 추가하십시오:
이제 dir1
이라는 디렉토리에 100개의 빈 파일이 있습니다. 파일 목록을 나열하여 확인하십시오:
Outputfile1 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
플래그를 사용해야 합니다. 이 플래그는 “재귀적”을 나타내며 디렉토리 동기화에 필요합니다:
다른 옵션은 -a
플래그를 사용하는 것입니다. 이것은 조합 플래그이며 “아카이브”를 나타냅니다. 이 플래그는 재귀적으로 동기화하고 심볼릭 링크, 특수 및 장치 파일, 수정 시간, 그룹, 소유자 및 권한을 보존합니다. 이 플래그는 -r
보다 일반적으로 사용되며 권장되는 플래그입니다. 이전 예제와 동일한 명령을 실행하되 이번에는 -a
플래그를 사용하십시오:
이전 두 명령의 구문에서 첫 번째 인수 끝에 슬래시(/
)가 있음에 유의하십시오. 이것은 다음에서 강조됩니다:
이 슬래시는 dir1
의 내용을 나타냅니다. 슬래시가 없으면 dir1
과 함께 디렉토리가 dir2
내에 배치됩니다. 결과는 다음과 같은 계층 구조를 만듭니다:
~/dir2/dir1/[files]
또 다른 팁은 rsync
명령을 실행하기 전에 인수를 재확인하는 것입니다. Rsync는 -n
또는 --dry-run
옵션을 전달하여 이를 수행하는 방법을 제공합니다. “자세한”을 의미하는 -v
플래그도 적절한 출력을 얻기 위해 필요합니다. 다음 명령에서 a
, n
, 및 v
플래그를 결합할 것입니다:
Outputsending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
이제 해당 출력을 슬래시를 제거하여 받는 출력과 비교하십시오. 다음과 같이:
Outputsending 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
폴더를 원격 시스템으로 동기화하려면 다음 구문을 사용할 수 있습니다. 이 경우 실제 디렉터리를 전송하려는 것이므로 슬래시를 생략할 것입니다:
이 프로세스는 로컬 시스템에서 원격 시스템으로 디렉토리를 “밀어 넣는” 작업이라고합니다. 반대 작업은 “끌어 오기”라고하며 원격 디렉토리를 로컬 시스템으로 동기화하는 데 사용됩니다. 만약 dir1
디렉토리가 로컬 시스템 대신 원격 시스템에 있다면 구문은 다음과 같을 것입니다:
cp
및 유사한 도구와 마찬가지로 소스는 항상 첫 번째 인수이고 대상은 항상 두 번째입니다.
다른 Rsync 옵션 사용하기
Rsync는 유틸리티의 기본 동작을 변경하는 많은 옵션을 제공합니다. 이전 섹션에서 배운 플래그 옵션과 같은 옵션도 있습니다.
이미 압축되지 않은 파일을 전송하는 경우 텍스트 파일과 같은 파일의 네트워크 전송을 줄일 수 있도록 -z
옵션을 추가하여 압축을 추가 할 수 있습니다:
-P
플래그도 도움이 됩니다. 이는 플래그 --progress
및 --partial
을 결합합니다. 이 첫 번째 플래그는 전송에 대한 진행률 표시 줄을 제공하고 두 번째 플래그는 중단 된 전송을 다시 시작할 수 있도록합니다:
Outputsending 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의 능력을 보여줍니다:
Outputsending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
어떤 파일의 수정 시간을 다음과 같은 명령으로 업데이트한다고 가정 해보겠습니다:
그럼, rsync
를 다시 -azP
와 함께 실행하면 출력에서 어떻게 변경된 파일만 지능적으로 다시 복사하는지 알 수 있습니다.
Outputsending 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
옵션을 사용하여 테스트를 수행할 수 있습니다:
동기화하는 디렉토리 내부에 있는 특정 파일 또는 디렉토리를 제외하려면 --exclude=
옵션 뒤에 쉼표로 구분된 목록으로 지정할 수 있습니다:
제외할 특정 패턴이 있는 경우 해당 제외를 무시하고 다른 패턴과 일치하는 파일에 대해 --include=
옵션을 사용할 수 있습니다:
마지막으로, Rsync의 --backup
옵션은 중요한 파일의 백업을 저장하는 데 사용될 수 있습니다. 백업 파일이 저장될 디렉토리를 지정하는 --backup-dir
옵션과 함께 사용됩니다:
결론
Rsync는 네트워크 연결을 통한 파일 전송을 간소화하고 로컬 디렉토리 동기화에 견고성을 추가할 수 있습니다. Rsync의 유연성으로 인해 다양한 파일 수준 작업에 대한 좋은 옵션이 됩니다.
A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.