Rsync (원격 동기화)은 Linux/Unix 시스템에서 원격 및 로컬로 파일과 디렉터리를 복사하고 동기화하는 데 가장 일반적으로 사용되는 명령입니다.
rsync 명령을 사용하여 디렉터리, 디스크 및 네트워크를 통해 데이터를 원격 및 로컬로 복사하고 동기화하며 데이터 백업을 수행하고 두 Linux 머신 간에 미러링을 할 수 있습니다.
이 문서에서는 Linux 기반 시스템에서 파일을 원격 및 로컬로 전송하기 위해 rsync 명령의 기본 및 고급 사용법을 16가지 설명합니다. Rsync 명령을 실행하려면 루트 사용자가 아니어도 됩니다.
목차
Rsync 명령어의 장점
다음과 같은 여러 장점을 제공합니다:
- 효율적인 파일 전송 – rsync는 델타 전송 알고리즘을 사용하여 소스와 대상 파일 간의 차이점만 전송하여 전송되는 데이터의 양을 크게 줄입니다. 이는 대량 파일 또는 디렉터리 동기화에 효율적입니다.
- 원격 파일 동기화 – rsync는 SSH를 통한 로컬 및 원격 파일 전송을 지원하여 로컬 및 원격 시스템 간 또는 여러 기계에 걸쳐 디렉터리를 미러링하는 동기화를 가능하게 합니다.
- 점진적 백업 – rsync는 새로운 또는 수정된 파일만 전송하여 백업을 효율적으로 생성하고 업데이트하는 데 적합합니다.
- 파일 권한 보존 – rsync는 권한, 소유권, 타임스탬프 및 심볼릭 링크와 같은 다양한 파일 속성을 보존할 수 있어, 복사된 파일이 목적지에서 원래의 특성을 유지하도록 보장합니다.
- 대역폭 제어 – rsync는 파일 전송 중 대역폭 사용량을 제한할 수 있도록 허용하여, 양쪽 끝에서 데이터를 전송하고 받을 때 압축 및 압축 해제 방법을 사용합니다.
- 더 빠름 – rsync는 파일 전송에서 scp (Secure Copy)보다 빠를 수 있으며, 특히 대규모 디렉터리를 동기화하거나 이미 일부 전송되었거나 목적지에 이미 존재하는 파일을 처리할 때 빠릅니다.
Rsync 명령 구문
rsync 명령은 다음과 같은 구문을 따릅니다:
# rsync [OPTIONS] SOURCE DESTINATION
rsync 명령과 함께 사용되는 다양한 구성 요소와 옵션에 대한 설명은 다음과 같습니다:
-v
– 전송에 대한 자세한 정보를 표시하는 자세한 출력입니다.-r
– 데이터를 재귀적으로 복사합니다 (하지만 데이터를 전송하는 동안 타임스탬프와 권한을 보존하지 않습니다).-a
– 아카이브 모드로, 파일을 재귀적으로 복사할 수 있으며, 심볼릭 링크, 파일 권한, 사용자 및 그룹 소유권, 타임스탬프를 보존합니다.-z
– 파일을 전송 중에 압축하여 네트워크 사용량을 줄입니다.-h
– 인간이 읽을 수 있는 형식으로 숫자를 출력합니다.-P
– 전송 중에 진행 상황을 표시합니다.SOURCE
– 전송할 소스 파일 또는 디렉터리를 지정합니다. 로컬 또는 원격 위치가 될 수 있습니다.DESTINATION
– 파일 또는 디렉터리가 복사될 대상 경로를 지정합니다. 소스와 유사하게, 로컬 경로 또는 원격 위치가 될 수 있습니다.
Linux 시스템에 Rsync 설치
우리는 리눅스 배포판에 따라 다음 패키지 관리자의 도움으로 rsync 패키지를 설치할 수 있습니다.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. 파일 로컬로 복사/동기화
파일을 로컬로 복사하거나 동기화하려면, 다음 명령을 사용할 수 있습니다. 이 명령은 로컬 머신에서 한 위치에서 다른 위치로 단일 파일을 동기화합니다.
이 예제에서 파일 이름 backup.tar을 /tmp/backups/ 폴더로 복사하거나 동기화해야 합니다.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
위의 예에서 목적지가 이미 존재하지 않으면 rsync가 목적지를 자동으로 만듭니다.

2. 디렉토리 로컬로 복사/동기화
다음 명령은 동일한 기계의 다른 디렉토리로 모든 파일을 전송하거나 동기화합니다.
여기 예에서 /root/rpmpkgs는 몇 개의 rpm 패키지 파일이 포함되어 있으며 해당 디렉토리를 /tmp/backups/ 폴더 내로 복사하려고 합니다.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. 로컬에서 원격 서버로 디렉토리 복사
로컬 서버에서 원격 서버로 디렉토리를 복사하려면 다음 명령을 사용할 수 있으며, 이 명령은 로컬에서 원격 기계로 디렉토리를 동기화합니다.
예를 들어, 로컬 컴퓨터에 “rpmpkgs”라는 폴더가 있고 그 안에 일부 RPM 패키지가 포함되어 있고 이 로컬 디렉토리의 내용을 원격 서버로 전송하려면 다음 명령을 사용할 수 있습니다.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. 원격 서버에서 로컬로 디렉토리 복사
이 명령은 원격 디렉토리를 로컬 디렉토리로 동기화하는 데 도움이 됩니다. 여기 예에서는 원격 서버에 있는 /root/rpmpkgs 디렉토리가 로컬 컴퓨터의 /tmp/myrpms에 복사되고 있습니다.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. SSH를 통한 Rsync
rsync를 사용하면 데이터 전송에 SSH (보안 셸)을 사용하여 데이터 전송 시 SSH 프로토콜을 사용합니다. 데이터가 인터넷을 통해 전송되는 동안 데이터가 암호화된 보안 연결로 전송되므로 누구도 데이터를 읽을 수 없습니다.
또한 rsync을 사용할 때 특정 작업을 수행하려면 사용자/루트 암호를 제공해야 합니다. 따라서 SSH 옵션을 사용하면 로그인이 암호화된 방식으로 전송되어 암호가 안전합니다.
rsync를 SSH로 사용하려면 원격 셸 명령을 지정하는 -e
옵션을 사용할 수 있습니다. 일반적으로 ssh로 표시됩니다.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. 원격 서버에서 로컬 서버로 파일 복사하기
원격 서버에서 로컬 서버로 파일을 동기화하려면 ” rsync “를 사용하여 프로토콜을 지정할 수 있으며 원하는 프로토콜 이름으로 ” -e ” 옵션을 사용합니다.
이 예제에서는 ” ssh “와 ” -e ” 옵션을 사용하여 데이터 전송을 수행합니다.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. SSH를 사용하여 로컬 서버에서 원격 서버로 파일 복사하기
SSH를 사용하여 로컬 서버에서 원격 서버로 파일을 동기화하려면 다음 명령을 활용할 수 있습니다.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Rsync를 사용하여 데이터 전송 중 진행 상황 표시하기
다른 기기로 데이터를 전송하는 동안 진행 상황을 표시하려면 ‘--progress'
옵션을 사용할 수 있습니다. 이 옵션은 파일과 전송 완료까지 남은 시간을 표시합니다.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Rsync를 사용하여 특정 확장자 파일 포함하기
rsync 작업 중 특정 파일 또는 패턴을 포함하려면 모든 파일과 일치하는 확장자를 사용하여 --include
옵션을 사용할 수 있습니다.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
제공된 예에서 rsync는 전송 중에 /path/to/source/ 디렉토리에서 .txt
확장자를 가진 파일만 포함합니다.
10. Rsync를 사용하여 특정 확장자 파일 제외하기
마찬가지로 rsync 작업 중 특정 확장자를 제외하려면 와일드카드 패턴과 함께 --exclude
옵션을 사용할 수 있습니다.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
제공된 예에서 rsync는 전송 중에 지정된 확장자 (*.ext)
를 가진 파일을 제외하고 다른 모든 파일과 디렉토리를 포함합니다.
11. Rsync로 파일 포함 및 제외하기
Rsync 작업 중 특정 파일이나 패턴을 포함하거나 제외하려면 적절한 와일드카드 패턴과 함께 --include
및 --exclude
옵션을 모두 사용할 수 있습니다.
이 두 옵션을 사용하면 매개변수를 지정하여 파일을 포함하거나 제외할 수 있으며 이를 통해 동기화할 파일 또는 디렉토리를 지정할 수 있습니다. 전송하지 않을 파일 및 폴더를 제외할 수 있습니다.
이 예에서 rsync 명령은 ‘R’로 시작하는 파일과 디렉토리만 포함하고 다른 모든 파일과 디렉토리를 제외합니다.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Rsync와 함께 –delete 옵션 사용
소스에 파일 또는 디렉토리가 없지만 대상에 이미 존재하는 경우 동기화하는 동안 해당 기존 파일/디렉토리를 삭제하려고 할 수 있습니다.
소스 디렉토리에 없는 파일을 삭제하려면 ‘--delete
‘ 옵션을 사용할 수 있습니다.
소스와 대상이 동기화되어 있습니다. 이제 대상에 새 파일 test.txt을 만듭니다.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
대상은 ‘–delete’ 옵션을 사용하여 소스와 동기화할 때 test.txt라는 새 파일을 가졌습니다. 이는 파일 test.txt를 제거했습니다. Rsync로 파일 전송 한도 설정

13. Rsync를 사용하여 파일 전송 한도 설정
전송하거나 동기화할 최대 파일 크기를 지정할 수 있습니다. “–max-size” 옵션으로 할 수 있습니다. 여기 이 예에서 최대 파일 크기는 200k이므로 이 명령은 200k 이하의 파일만 전송합니다.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. 전송 후 소스 파일 자동 삭제
이제 주 서버와 데이터 백업 서버가 있고 매일 백업을 만들어 백업 서버와 동기화했습니다. 그러나 이제 웹 서버의 해당 로컬 백업 복사본을 보관하지 않으려고 합니다.
그래서 전송이 완료될 때까지 기다렸다가 해당 로컬 백업 파일을 수동으로 삭제하시겠습니까? 물론 그렇지 않습니다. 이 자동 삭제는 ‘–remove-source-files’ 옵션을 사용하여 수행할 수 있습니다.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Rsync로 Dry Run 수행
Rsync를 처음 사용하는 초보자이고 명령이 정확히 무엇을 할지 모르는 경우가 있습니다. Rsync는 대상 폴더에서 실수로 많은 문제를 일으킬 수 있으며 그 후 되돌리는 것이 번거로운 작업이 될 수 있습니다.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Rsync 대역폭 제한 설정 및 파일 전송
하나의 기계에서 다른 기계로 데이터를 전송하는 동안 ‘--bwlimit
‘ 옵션을 사용하여 대역폭 제한을 설정할 수 있습니다. 이 옵션을 사용하면 I/O 대역폭을 제한할 수 있습니다.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
또한, 기본적으로 rsync는 변경된 블록과 바이트만 동기화하지만, 전체 파일을 동기화하려면 ‘-W‘ 옵션을 사용합니다.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
결론
rsync 및 그 기능에 대한 개요를 마칩니다. 다양한 옵션과 기능을 더 자세히 살펴보려면 포괄적인 매뉴얼 페이지(맨 페이지)를 참조하시기 바랍니다.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/