Profile picture

[Linux] Rsync 정리: 데이터 백업, 동기화, 미러링까지!

JaehyoJJAng2024년 07월 14일

개요

리눅스 환경에서 파일을 효율적으로 관리하고 전송할 때 rsync만큼 강력한 도구가 또 있을까요?


이번 글에서는 rsync의 기본 개념부터 활용 방법, 자주 사용되는 명령어(옵션), 그리고 미러 서버 설정까지 자세히 기록해보려고 합니다!

데이터 백업, 동기화, 대용량 데이터 이동에 관심이 있다면 이 글이 큰 도움이 될 거예요!


rsync

rsync는 "Remote Sync"의 약자로,

파일과 디렉터리를 로컬 또는 원격 시스템 간에 빠르고 효율적으로 동기화할 수 있는 오픈소스 유틸리티입니다

scpcp 같은 기본 명령어와 달리, rsyncDelta Encoding Algorithm 을 사용해 변경된 부분만 전송하므로

네트워크 대역폭을 최소화하며 빠른 속도를 자랑해요!

덤으로 효율적인 증분 백업도 가능하죠!


주요 특징으로는 다음과 같아요!

  • 데이터 백업 및 동기화: 로컬과 원격 서버 간 데이터를 손쉽게 동기화
  • 대용량 데이터 이동: 효율적인 전송으로 시간과 자원 절약 가능
  • 추가 기능: 심볼릭 링크, 소유자, 권한, 디바이스 파일 등을 보존 가능
  • 익명 사용자 지원: root 권한 없이도 사용 가능.
  • 네트워크 활용: 기본적으로 TCP 873번 포트를 사용하며, SSH나 RSH 같은 원격 쉘과 함께 동작 가능

이제 rsnyc의 기본 사용법과 옵션을 살펴보도록 할까요?


기본 사용법

rsync의 기본 명령어 형식은 다음과 같아요!

$ rsync [options] <src> <dest>
  • <src>: 복사할 원본 경로.
  • <dest>: 복사할 대상 경로.

주요 옵션 정리

rsync는 다양한 옵션을 제공해 사용자가 원하는 대로 동작을 커스터마이징할 수 있어요!

자주 쓰이는 옵션을 정리해봤어요.

옵션 설명
-a, --archive 아카이브 모드, -rlptgoD 옵션을 포함함 (권한, 소유자, 시간 등 보존)
-v, --verbose 상세한 실행 정보 출력.
-r, --recursive 하위 디렉터리까지 재귀적으로 복사.
-z 전송 시 데이터를 압축해 네트워크 부하 감소.
-h 사람이 읽기 쉬운 형식으로 출력 (human-readable).

옵션 설명
--delete 대상에 없는 파일을 삭제해 완벽한 동기화 구현.
--exclude 지정한 파일/디렉터리를 제외.
-e, --rsh=COMMAND 원격 셸 지정 (예: SSH 포트 변경 시 유용).
--bwlimit 전송 대역폭 제한 (KB 단위).
--checksum 파일 크기/시간 대신 체크섬으로 비교.

활용 예시: 데이터 백업과 이동

rsync는 데이터 백업, 동기화, 대용량 파일 이동에 최적화되어 있어요.

아래는 실무에서 자주 사용하는 명령어 예시입니다!


1. 로컬에서 로컬로 백업

$ rsync -av /home/user /backup/user
  • /home/user 디렉터리를 /backup/user에 상세 출력(-v)과 함께 아카이브 모드(-a)로 백업.

2. 로컬에서 원격 서버로 복사

$ rsync -avz /home/user/data user@192.168.1.100:/home/user/backup
  • 로컬의 data 디렉터리를 원격 서버로 압축(-z) 전송.

3. 원격 서버에서 로컬로 백업

$ rsync -avz --delete user@192.168.1.100:/home/user/data /home/user/backup
  • 원격 서버의 데이터를 로컬로 동기화하며, 로컬에 불필요한 파일은 삭제(--delete).

4. 대용량 데이터 이동 (불필요한 파일 제외)

$ rsync -avz --exclude="*.log" /data user@remote:/backup
  • *.log 파일을 제외하고 대용량 데이터를 원격지로 전송.

5. SSH 포트가 기본(22번)이 아닌 경우

$ rsync -avz -e 'ssh -p 66022' user@192.168.1.100:/data /backup
  • SSH 포트가 66022일 때 원격 서버와 연결.

6. 현재 디렉토리 모든 파일을 원격지로 압축 전송

$ rsync -avz -e ssh ./* user@192.168.1.100:/home/user/destination
  • 현재 경로의 모든 파일을 원격지에 전송.

미러 서버 설정: Rsync로 데이터 배포하기

rsync는 미러 서버에서 데이터를 배포하는 데도 자주 사용됩니다!

이를 위해서는 rsync 데몬을 서버에 설정하고,

클라이언트가 지정된 폴더에서 데이터를 가져갈 수 있도록 해야해요!


1. Rsync 데몬 설정

1-1. 설치 확인

$ sudo apt install rsync  # Debian/Ubuntu
$ sudo yum install rsync  # CentOS/RHEL

1-2. 설정 파일 수정 (/etc/rsyncd.conf)

다음 내용을 붙여넣고, 필요에 따라 수정해보세요!

# 전역 설정
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
timeout = 300

# 미러 모듈
[proxmox-mirror]
    path = /var/www/proxmox-mirror  # 실제 Proxmox 미러 데이터 경로
    comment = My Proxmox Mirror Repository
    read only = yes                 # 클라이언트가 수정 못 하게 읽기 전용
    list = yes                      # 모듈 목록 표시 허용
    uid = nobody                    # 보안을 위해 nobody 사용자
    gid = nogroup                   # 보안을 위해 nogroup 그룹
    hosts allow = *                 # 모든 IP 허용 (보안 위해 제한 추천)
  • path: Proxmox 미러 데이터가 있는 실제 디렉터리 경로예요. 예를 들어 /var/www/proxmox-mirror에 데이터가 있다면 이렇게 설정하면 됩니다.
  • [proxmox-mirror]: 모듈 이름이에요. 클라이언트가 나중에 rsync://서버IP/proxmox-mirror로 접속할 때 쓰이는 이름이죠.
  • hosts allow: *는 모든 IP에서 접속 가능하다는 뜻이에요. 보안을 위해 192.168.1.0/24처럼 특정 네트워크만 허용할 수도 있어요.

1-3. 데몬 실행

$ sudo rsync --daemon
  • TCP 873번 포트에서 실행됩니다.

1-4. systemd 서비스 설정 (추천)

서비스 파일 생성

sudo nano /etc/systemd/system/rsyncd.service

다음 내용 입력

[Unit]
Description=Rsync Daemon Service
After=network.target

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
Restart=on-failure

[Install]
WantedBy=multi-user.target

서비스 활성화 및 시작

sudo systemctl daemon-reload
sudo systemctl enable rsyncd.service
sudo systemctl start rsyncd.service

잘 되는지 테스트

sudo systemctl status rsyncd.service

"active (running)"이 보이면 성공이에요!


1-4. 부팅 시 자동 실행 (선택): /etc/default/rsync에서 RSYNC_ENABLE=true로 설정 후 서비스 활성화

$ sudo systemctl enable rsync
$ sudo systemctl start rsync

2. 디렉토리 권한 설정

미러 데이터가 있는 디렉토리의 권한을 맞춰줘야 해요! 이전에 nobody:nogroup으로 설정했으니:

$ sudo chown -R nobody:nogroup /var/www/proxmox-mirror
$ sudo chmod -R 755 /var/www/proxmox-mirror

이렇게 하면 rsync 데몬이 문제없이 데이터에 접근할 수 있어요!


2. 클라이언트에서 데이터 가져오기

모듈 목록 확인

$ rsync rsync://서버IP/proxmox-mirror

데이터 동기화

$ rsync -avz rsync://서버IP/proxmox-mirror /로컬/저장/경로
  • -avz는 아카이브 모드(파일 속성 유지), verbose(상세 출력), 압축 전송을 뜻해요. 잘 내려받아지면 성공!

질문!

🔥 자주 묻는 질문

"proxmox-mirror"는 어디서 온 거예요?



rsync://서버IP/proxmox-mirror에서 /proxmox-mirror/etc/rsyncd.conf에 설정한 모듈 이름이에요.

물리적 경로가 아니라 rsync가 인식하는 논리적 이름이죠.

[my-custom-mirror]로 바꾸면 rsync://서버IP/my-custom-mirror로 접속해야 해요!


Loading script...