2022이전/Linux

rsync 활용하기

바로퇴장 2021. 8. 11. 11:08

rsync 사용 시 873포트와 22포트

  1. 873/TCP를 사용 하겠다는 의미

-. 데이터를 받은 쪽에서 rsync 서버 (rsyncd / 873/TCP) 서버를 열고 rsync를 받겠다는 의미

  1. 22/TCP ss를 사용하겠다는 의미

-. 22번 포트를 통해 데이터를 전송하겠다는 의미 입니다. 즉 발송하는 쪽과 수신하는 쪽 모두 22/TCP를 사용 합니다.

-. SSH를 통할 경우 이점은 전송하는 데이터가 ssh의 암호/압축 등의 장점을 사용할 수 있듭니다

-. 다만 SSH를 사용할 경우 암호화/복호화 과정을 거쳐야 하기 때문에 상대적으로 하드웨어 사양을 조금 더 요구 합니다.

rsync 명령의 구문:

로컬 동기화 :

# 로컬 동기화 : 
rsync {options} {Source} {Destination}

# 원격 동기화 Pull:
rsync {options} <User_Name>@<Remote-Host>:<Source-File-Dir> <Destination>

# 원격 동기화 Push :
rsync <옵션> <Source-Files-Dir> <User_Name>@<Remote-Host>:<Destination>

옵션

  • v: verbosity를 높이는 옵션으로 복사하는 과정을 더 자세하게 보여줍니다.
  • z: compress를 주는 옵션으로 파일을 복사할 때 압축해서 복사합니다.
  • h: 사람이 읽기 쉬운 형태로 복사 결과들을 출력해줍니다.
  • a (same as -rlptgoD): archive 모드로 rlptgoD 옵션을 적용한것과 같습니다. 해당 옵션들은 아래서 설명하며 symlink, 권한 그리고 timestamp와 같은 속성들을 그대로 복사합는 옵션입니다.
  • r: 디렉토리를 복사할 때 사용하는 옵션입니다.
  • l: symlink는 symlink 형태로 복사하는 옵션입니다.
  • p: 파일과 디렉토리들의 권한을 유지하는 옵션입니다.
  • t: 수정시간을 유지하는 옵션입니다.
  • g: 그룹 속성을 유지하는 옵션입니다.
  • o: 소유자 속성을 유지하는 옵션입니다.
  • D (same as --devices --specials): -devices --specials의 옵션과 같습니다.
  • -devices: root 권한이 필요하며 Device 관련된 파일들을 복사해서 생성해줍니다.
  • -specials: named socket이나 fifo와 같은 특수한 파일들도 복사하는 옵션입니다.
  • P (same as --partial --progress): -partial --progress의 옵션과 같습니다.
  • -partial: rsync는 전송중에 인터럽트가 발생하면 전송하던 파일을 삭제하는게 기본값입니다. 이 옵션을 사용하면 전송된 부분파일을 남기고 다음부분부터 재전송 할 수 있게하여 속도를 빠르게 할 수 있습니다.
  • -progress: 전송시 진행상황을 보여줍니다.

예제

  • 로컬로 파일 복사

`# rsync [File Name] [Target Path]

rsync -avzhP test.txt /tmp

전송시 파일명 변경도 가능

rsync -avzhP test.txt /tmp/test-renamed.txt`

  • 로컬로 디렉토리 복사

`# rsync [Directory Name] [Target Path]

디렉토리 자체가 복사된다.

rsync -avzhP test-directory /tmp

디렉토리 내 파일들과 하위 디렉토리들 복사

rsync [Directory Name]/ [Target Path]

rsync -avzhP test-directory/ /tmp`

  • 원격에 파일 복사

`# rsync [File Name] [User]@[IP Address]:[Path]

rsync -avzhP test.txt twpower-private-server:~
rsync -avzhP test.txt twpower@192.168.1.2:~

전송시 파일명 변경도 가능

rsync -avzhP test.txt twpower-private-server:/test-renamed.txt
rsync -avzhP test.txt twpower@192.168.1.2:
/test-renamed.txt`

  • 원격에 디렉토리 복사

`# rsync [Directory Name] [User]@[IP Address]:[Path]

디렉토리 자체가 복사된다.

rsync -avzhP test-directory twpower-private-server:~
rsync -avzhP test-directory twpower@192.168.1.2:~

디렉토리 내 파일들과 하위 디렉토리들 복사

rsync [Directory Name]/ [User]@[IP Address]:[Path]

rsync -avzhP test-directory/ twpower-private-server:~
rsync -avzhP test-directory/ twpower@192.168.1.2:~`

  • 원격에 있는 파일 로컬로 가져오기

`# rsync [User]@[IP Address]:[File Name] [Path]

rsync -avzhP twpower-private-server:/test.txt .
rsync -avzhP twpower@192.168.1.2:
/test.txt .

전송시 파일명 변경도 가능

rsync -avzhP twpower-private-server:/test.txt ./test-renamed.txt
rsync -avzhP twpower@192.168.1.2:
test.txt ./test-renamed.txt`

  • 원격에 있는 디렉토리 로컬로 가져오기

`# rsync [User]@[IP Address]:[Directory Name] [Path]

디렉토리 자체가 복사된다.

rsync -avzhP twpower-private-server:/test-directory .
rsync -avzhP twpower@192.168.1.2:
/test-directory .

디렉토리 내 파일들과 하위 디렉토리들 복사

rsync [User]@[IP Address]:[Directory Name]/ [Path]

rsync -avzhP twpower-private-server:/test-directory/ .
rsync -avzhP twpower@192.168.1.2:
/test-directory/ .`

원격 rsync 자세히 보기

rsync는 873번 포트를 사용하며, 두 서버간의 데이터 백업을 위해서 주로 사용된다.

master서버에서 rsync데몬을 띄우고, backup 서버에서 master서버에 접근하여 허용된 디렉토리의 데이터를 백업하는 방식과, ssh를 이용하여 데이터를 미러링 하는 방법 두가지가 있다.

테스트 환경

master서버 : 10.30.100.60

backup서버 : 10.30.100.61

rsync데몬(873포트)을 이용하는 방법

1./etc/rsyncd.conf 파일 생성

/etc/rsyncd.conf 파일은 기본적으로 생성되어 있지 않기 때문에 아래와 같은 형식으로 생성 한다.

==============================================

[root@master ~]# cat /etc/rsyncd.conf
[add4s]
comment =add4s home directoryapplication/views/common/chatbot.php
path = /home/add4s/public_html
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 10.30.100.61
max connection = 2
timeout = 300

[add4s] --> 서비스명

comment = add4s home directory --> 서비스에 대한 코멘트

path = /home/add4s/public_html --> 서비스 디렉토리(백업 디렉토리)

uid = root --> 접속 user 권한

gid = root --> 접속 group 권한

use chroot = yes --> 서비스 디렉토리를 최상위 디렉토리로 사용

read only = yes --> 읽기 전용으로 설정

hosts allow = 10.30.100.61 --> 접속을 허용할 호스트(백업서버의 ip)

max connection = 2 --> 최대 접속 가능 수

timeout = 300 --> 클라이언트에서 접근시 타임아웃시간

1.2. master서버에서 rsync데몬 실행

/etc/xinetd.d/rsync 파일에서 disable = no 로 변경하고 xinetd 데몬을 실행한다. 데몬이 실행되면, 873포트가 open된 것을 확인 할 수 있다.

ubunt계열의 Linux에서는 /etc/default/rsync 파일에서 RSYNC_ENABLE=true 로 변경하고 rsync 데몬을 실행한다.

[root@master ~]# /etc/init.d/xinetd start

Starting xinetd: [  OK  ]

[root@master ~]# netstat -nltp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1242/sshd

**tcp        0      0 :::873                      :::*                        LISTEN      7022/xinetd**

tcp        0      0 :::22                       :::*                        LISTEN      1242/sshd

[root@master ~]#

1.3. iptables 873 포트 접속 허용

iptables 방화벽에 873 포트 접속이 가능하도록 포트를 허용한다.

================================================================================

[root@master ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

ACCEPT     icmp --  anywhere             anywhere

ACCEPT     all  --  anywhere             anywhere

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https

**ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:rsync**

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

1.4. backup서버에서 master서버의 rsync 서비스와 comment 확인하기

backup서버에서 아래와 같은 방법으로 master서버에서 허용된 서비스와 comment를 확인할 수 있다.

[root@backup ~]# rsync 10.30.100.60::

add4s            add4s home directory

1.5. 백업 테스트

  • master서버에서 파일 생성
[root@master ~]# cd /home/add4s/public_html

[root@master public_html]# touch testfile1 testfile2 testfile3

[root@master public_html]# ls -l

total 0

- rw-r--r-- 1 root root 0 Apr 24 01:14 testfile1
- rw-r--r-- 1 root root 0 Apr 24 01:14 testfile2
- rw-r--r-- 1 root root 0 Apr 24 01:14 testfile3

[root@master public_html]#

==============================================================================

- backup서버에서 rsync명령으로 업데이트(master서버에서 생성된 파일이 백업된 것을 확인할 수 있다.)

아래는 master서버에서 허용된 서비스의 디렉토리와 backup서버의 /backup/add4s 디렉토리를 동기화 시키는 작업이다.

==============================================================================

[root@backup ~]# rsync -avzr --delete 10.30.100.60::add4s /backup/add4s/

receiving incremental file list

./

testfile1

testfile2

testfile3

sent 86 bytes  received 200 bytes  52.00 bytes/sec

total size is 0  speedup is 0.00

[root@backup ~]# cd /backup/add4s

[root@backup add4s]# ls -l

total 0

- rw-r--r-- 1 root root 0 Apr 24 2009 testfile1
- rw-r--r-- 1 root root 0 Apr 24 2009 testfile2
- rw-r--r-- 1 root root 0 Apr 24 2009 testfile3

[root@backup add4s]#

==============================================================================

- master서버에서 file 삭제

==============================================================================

[root@master public_html]# rm -rf testfile2 testfile3

[root@master public_html]# ls -l

total 0

- rw-r--r-- 1 root root 0 Apr 24 01:14 testfile1

[root@master public_html]#

==============================================================================

- backup서버에서 rsync명령으로 업데이트(master서버에서 삭제한 파일이 같이 삭제 된것을 확인할 수 있다.)

==============================================================================

[root@backup add4s]# rsync -avzr --delete 10.30.100.60::add4s /backup/add4s/

receiving incremental file list

deleting testfile3

deleting testfile2

./

sent 29 bytes  received 82 bytes  20.18 bytes/sec

total size is 0  speedup is 0.00

[root@backup add4s]# ls -l

total 0

- rw-r--r-- 1 root root 0 Apr 24 2009 testfile1

1.6. cron에 등록하여 주기적으로 백업

아래와 같은 방법으로 backup서버의 cron에 등록을 하면 원하는 시간에 주기적으로 데이터를 미러링 하게 된다.

[root@backup add4s]# crontab -l

00 02 * * * /usr/bin/rsync -avzr --delete 10.30.100.60::add4s /backup/add4s/

ssh를 이용하여 rsync사용하기

ssh를 이용하는 경우는 아래와 같이 -e ssh 옵션(생략가능)을 추가해서 rsync 명령을 사용하면 된다. 그리고, master서버와 backup서버 둘다 명령을 수행 할 수 있다.

마찬가지로 아래의 명령을 스크립트로 만들어서 사용하거나, cron에 등록해서 주기적인 데이터 미러링 작업이 가능하다.

2.1. master서버에서 rsync 명령으로 백업

[root@master ~]# rsync -avzr --delete -e ssh /home/add4s/public_html/ root@10.30.100.61:/backup/add4s/

The authenticity of host '10.30.100.61 (10.30.100.61)' can't be established.

RSA key fingerprint is 4a:42:46:c9:55:48:63:08:a5:84:0a:69:d8:a6:47:0e.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.30.100.61' (RSA) to the list of known hosts.

root@10.30.100.61's password:

sending incremental file list

sent 67 bytes  received 12 bytes  10.53 bytes/sec

total size is 0  speedup is 0.00

2.2. slave서버에서 rsync 명령으로 백업

[root@backup ~]# rsync -avzr --delete -e ssh root@10.30.100.60:/home/add4s/public_html/ /backup/add4s/

root@10.30.100.60's password:

receiving incremental file list

sent 11 bytes  received 68 bytes  8.32 bytes/sec

total size is 0  speedup is 0.00

참조

[명령어] rsync 이해

rsync를 사용하여 원격으로 데이터 백업 하기