Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

rsync로 Linux 백업:15가지 필수 명령

rsync로 Linux 백업:15가지 필수 명령 rsync는 원격 동기화를 의미합니다.

rsync는 UNIX/Linux에서 백업 작업을 수행하는 데 사용됩니다.

rsync 유틸리티는 효과적인 방법으로 한 위치에서 다른 위치로 파일과 디렉터리를 동기화하는 데 사용됩니다. 백업 위치는 로컬 서버 또는 원격 서버일 수 있습니다.

rsync의 주요 기능

  • 속도 :처음으로 rsync는 소스 디렉토리와 대상 디렉토리 사이의 전체 콘텐츠를 복제합니다. 다음번에는 rsync가 변경된 블록이나 바이트만 대상 위치로 전송하므로 전송 속도가 매우 빨라집니다.
  • 보안 :rsync를 사용하면 전송 중에 SSH 프로토콜을 사용하여 데이터를 암호화할 수 있습니다.
  • 대역폭 감소 :rsync는 전송 및 수신 측에서 각각 블록별로 데이터 압축 및 압축 해제를 사용합니다. 따라서 rsync에서 사용하는 대역폭은 다른 파일 전송 프로토콜에 비해 항상 적습니다.
  • 권한 :rsync 설치 및 실행에는 특별한 권한이 필요하지 않습니다.

구문

$ rsync options source destination

소스와 대상은 로컬이거나 원격일 수 있습니다. 원격의 경우 로그인 이름, 원격 서버 이름 및 위치를 지정하십시오.

예 1. 로컬 서버에서 두 디렉터리 동기화

로컬 컴퓨터의 두 디렉터리를 동기화하려면 다음 rsync -zvr 명령을 사용하세요.

$ rsync -zvr /var/opt/installation/inventory/ /root/temp
building file list ... done
sva.xml
svB.xml
.
sent 26385 bytes received 1098 bytes 54966.00 bytes/sec
total size is 44867 speedup is 1.63
$

위의 rsync 예에서:

  • -z는 압축을 활성화하는 것입니다.
  • -v 자세한 내용
  • -r은 재귀적임을 나타냅니다.

이제 소스에서 대상으로 복사된 파일 중 하나의 타임스탬프를 살펴보겠습니다. 아래에서 볼 수 있듯이 rsync는 동기화 중에 타임스탬프를 보존하지 않았습니다.

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 bin bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Sep 2 2009 /root/temp/sva.xml

예 2. rsync -a를 사용하여 동기화 중 타임스탬프 보존

rsync 옵션 -a는 아카이브 모드를 나타냅니다. -a 옵션은 다음을 수행합니다.

  • 재귀 모드
  • 심볼릭 링크를 유지합니다
  • 권한 유지
  • 타임스탬프 보존
  • 소유자와 그룹을 보존

이제 아래와 같이 예제 1에 제공된 동일한 명령을 실행합니다(단, rsync 옵션 -a 사용).

$ rsync -azv /var/opt/installation/inventory/ /root/temp/
building file list ... done
./
sva.xml
svB.xml
.
sent 26499 bytes received 1104 bytes 55206.00 bytes/sec
total size is 44867 speedup is 1.63
$

아래에서 볼 수 있듯이 rsync는 동기화 중에 타임스탬프를 보존합니다.

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /root/temp/sva.xml

예 3. 하나의 파일만 동기화

하나의 파일만 복사하려면 아래와 같이 rsync 명령에 파일 이름을 지정하십시오.

$ rsync -v /var/lib/rpm/Pubkeys /root/temp/
Pubkeys
sent 42 bytes received 12380 bytes 3549.14 bytes/sec
total size is 12288 speedup is 0.99

예 4. 로컬에서 원격으로 파일 동기화

rsync를 사용하면 로컬 시스템과 원격 시스템 간의 파일/디렉터리를 동기화할 수 있습니다.

$ rsync -avz /root/temp/ thegeekstuff@192.168.200.10:/home/thegeekstuff/temp/
Password:
building file list ... done
./
rpm/
rpm/Basenames
rpm/Conflictname
sent 15810261 bytes received 412 bytes 2432411.23 bytes/sec
total size is 45305958 speedup is 2.87

원격 서버와 동기화하는 동안 원격 서버의 사용자 이름과 IP 주소를 지정해야 합니다. 원격 서버의 대상 디렉터리도 지정해야 합니다. 형식은 사용자 이름@컴퓨터 이름:경로

입니다.

위에서 볼 수 있듯이 로컬에서 원격 서버로 rsync를 수행하는 동안 비밀번호를 묻습니다.

로컬에서 원격 서버로 파일을 백업하는 동안 비밀번호를 입력하고 싶지 않은 경우가 있습니다. 예를 들어 rsync를 사용하여 로컬에서 원격 서버로 파일을 복사하는 백업 셸 스크립트가 있는 경우 비밀번호를 입력하지 않고도 rsync를 수행할 수 있는 기능이 필요합니다.

그렇게 하려면 앞서 설명한 대로 SSH 비밀번호 없이 로그인을 설정하세요.

예 5. 원격에서 로컬로 파일 동기화

원격에서 로컬로 파일을 동기화하려면 아래와 같이 소스에 원격 경로를 지정하고 대상에 로컬 경로를 지정하세요.

$ rsync -avz thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
.
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87

예 6. 동기화를 위한 원격 셸

rsync를 사용하면 사용하려는 원격 셸을 지정할 수 있습니다. rsync ssh를 사용하여 보안 원격 연결을 활성화할 수 있습니다.

rsync -e ssh를 사용하여 사용할 원격 셸을 지정합니다. 이 경우 rsync는 ssh를 사용합니다.

$ rsync -avz -e ssh thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87

예 7. 대상에서 수정된 파일을 덮어쓰지 않음

일반적인 동기화 상황에서 파일이 대상에서 수정되면 소스의 이전 파일로 파일을 덮어쓰는 것을 원하지 않을 수 있습니다.

정확히 그렇게 하려면 rsync -u 옵션을 사용하십시오. (즉, 파일이 수정된 경우 대상에서 파일을 덮어쓰지 마십시오). 다음 예에서는 Basenames라는 파일이 대상에서 이미 수정되었습니다. 따라서 rsync -u로 덮어쓰지 않습니다.

$ ls -l /root/temp/Basenames
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
$ rsync -avzu thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
sent 122 bytes received 505 bytes 114.00 bytes/sec
total size is 45305958 speedup is 72258.31
$ ls -lrt
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames

예 8. 디렉터리 트리 구조만 동기화(파일은 제외)

원본에서 대상으로 디렉터리 트리만 동기화하려면 rsync -d 옵션을 사용합니다. 아래 예에서는 디렉터리의 파일이 아닌 디렉터리 트리만 재귀적으로 동기화합니다.

$ rsync -v -d thegeekstuff@192.168.200.10:/var/lib/ .
Password:
receiving file list ... done
logrotate.status
CAM/
YaST2/
acpi/
sent 240 bytes received 1830 bytes 318.46 bytes/sec
total size is 956 speedup is 0.46

예 9. 전송 중 rsync 진행 상황 보기

백업을 위해 rsync를 사용할 때 백업 진행 상황을 알고 싶을 수 있습니다. 즉, 복사본이 있는 파일 수, 파일을 복사하는 속도 등입니다.

rsync –progress 옵션은 아래와 같이 rsync 실행의 자세한 진행 상황을 표시합니다.

$ rsync -avz --progress thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ...
19 files to consider
./
Basenames
 5357568 100% 14.98MB/s 0:00:00 (xfer#1, to-check=17/19)
Conflictname
 12288 100% 35.09kB/s 0:00:00 (xfer#2, to-check=16/19)
.
.
.
sent 406 bytes received 15810211 bytes 2108082.27 bytes/sec
total size is 45305958 speedup is 2.87

rsync를 사용하는 rsnapshot 유틸리티를 사용하여 로컬 Linux 서버를 백업하거나 원격 Linux 서버를 백업할 수도 있습니다.

예 10. 타겟에 생성된 파일 삭제

파일이 소스에는 없지만 대상에는 있는 경우 rsync 중에 대상에서 파일을 삭제할 수 있습니다.

이 경우 아래와 같이 –delete 옵션을 사용하세요. rsync 삭제 옵션은 소스 디렉터리에 없는 파일을 삭제합니다.

# Source and target are in sync. Now creating new file at the target.
$ > new-file.txt
$ rsync -avz --delete thegeekstuff@192.168.200.10:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting new-file.txt
./
sent 26 bytes received 390 bytes 48.94 bytes/sec
total size is 45305958 speedup is 108908.55

Target에는 new-file.txt라는 새 파일이 있습니다. –delete 옵션을 사용하여 소스와 동기화하면 new-file.txt 파일이 제거됩니다.

예 11. 대상에 새 파일을 생성하지 않음

원하는 경우 대상의 기존 파일만 업데이트(동기화)할 수 있습니다. 소스에 새 파일이 있지만 대상에는 없는 경우 대상에 새 파일이 생성되지 않도록 할 수 있습니다. 이 기능을 원하시면 rsync 명령에 –existing 옵션을 사용하세요.

먼저 소스에 new-file.txt를 추가하세요.

[/var/lib/rpm ]$ > new-file.txt

다음으로, 타겟에서 rsync를 실행하세요.

$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
root@192.168.1.2's password:
receiving file list ... done
./
sent 26 bytes received 419 bytes 46.84 bytes/sec
total size is 88551424 speedup is 198991.96

위 출력이 표시된다면 new-file.txt라는 새 파일을 받지 못한 것입니다.

예 12. 소스와 대상 간의 변경 사항 보기

이 옵션은 원본과 대상 간의 파일이나 디렉터리 차이를 확인하는 데 유용합니다.

출처:

$ ls -l /var/lib/rpm
-rw-r--r-- 1 root root 5357568 2010-06-24 08:57 Basenames
-rw-r--r-- 1 root root 12288 2008-05-28 22:03 Conflictname
-rw-r--r-- 1 root root 1179648 2010-06-24 08:57 Dirnames

목적지:

$ ls -l /root/temp
-rw-r--r-- 1 root root 12288 May 28 2008 Conflictname
-rw-r--r-- 1 bin bin 1179648 Jun 24 05:27 Dirnames
-rw-r--r-- 1 root root 0 Sep 3 06:39 Basenames

위의 예에서 소스와 대상 사이에는 두 가지 차이점이 있습니다. 먼저 Dirname 파일의 소유자와 그룹이 다릅니다. 다음으로 Basenames 파일의 크기가 다릅니다.

이제 rsync가 이러한 차이를 어떻게 표시하는지 살펴보겠습니다. -i 옵션은 항목 변경 사항을 표시합니다.

$ rsync -avzi thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
>f.st.... Basenames
.f....og. Dirnames
sent 48 bytes received 2182544 bytes 291012.27 bytes/sec
total size is 45305958 speedup is 20.76

출력에서 파일 이름이나 디렉터리 이름 앞에 변경 사항을 나타내는 약 9개의 문자가 표시됩니다.

이 예에서 기본 이름(및 디렉터리 이름) 앞의 문자는 다음과 같습니다:

> specifies that a file is being transferred to the local host.
f represents that it is a file.
s represents size changes are there.
t represents timestamp changes are there.
o owner changed
g group changed.

예 13. 파일 전송 중 패턴 포함 및 제외

rsync를 사용하면 동기화를 수행하는 동안 파일이나 디렉터리를 포함하거나 제외하려는 패턴을 제공할 수 있습니다.

$ rsync -avz --include 'P*' --exclude '*' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Packages
Providename
Provideversion
Pubkeys
sent 129 bytes received 10286798 bytes 2285983.78 bytes/sec
total size is 32768000 speedup is 3.19

위의 예에서는 'P'(rsync include 사용)로 시작하는 파일 또는 디렉터리만 포함하고 다른 모든 파일은 제외합니다. (rsync 제외 '*' 사용)

예 14. 대용량 파일을 전송하지 마세요

rsync –max-size 옵션을 사용하면 특정 크기보다 큰 파일을 전송하지 않도록 rsync에 지시할 수 있습니다.

$ rsync -avz --max-size='100K' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Conflictname
Group
Installtid
Name
Sha1header
Sigmd5
Triggername
sent 252 bytes received 123081 bytes 18974.31 bytes/sec
total size is 45305958 speedup is 367.35

max-size=100K는 rsync가 100K 이하의 파일만 전송하도록 합니다. 메가바이트는 M, 기가바이트는 G로 표시할 수 있습니다.

예시 15. 전체 파일 전송

rsync의 주요 기능 중 하나는 파일 전체를 보내는 대신 변경된 블록만 대상으로 전송한다는 것입니다.

네트워크 대역폭이 문제가 되지 않지만(CPU는 문제인 경우) rsync -W 옵션을 사용하여 전체 파일을 전송할 수 있습니다. 소스와 대상에서 체크섬을 수행할 필요가 없으므로 rsync 프로세스 속도가 빨라집니다.

# rsync -avzW thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp
Password:
receiving file list ... done
./
Basenames
Conflictname
Dirnames
Filemd5s
Group
Installtid
Name
sent 406 bytes received 15810211 bytes 2874657.64 bytes/sec
total size is 45305958 speedup is 2.87

추가 rsync 튜토리얼

  • UNIX/Linux에서 SSH를 사용하여 Rsync를 설정하는 방법(비밀번호 없이 rsync)
  • exclude-from을 사용하여 여러 파일과 디렉터리를 제외하는 6가지 rsync 예제