liminfo

rsync Reference

rsync 파일 동기화 레퍼런스

31개 결과

rsync Reference 소개

rsync 레퍼런스는 rsync 파일 동기화 유틸리티를 위한 포괄적이고 검색 가능한 치트 시트입니다. 기본 옵션, 필터, 원격 동기화, SSH, 백업, 제외 등 6개 카테고리에 걸쳐 30개 항목을 다룹니다. 각 항목에는 정확한 플래그나 패턴 구문, 설명, 실용적인 명령줄 예제가 포함되어 있어 로컬 디렉토리 동기화, 서버 배포, 자동 백업 시스템 구축 시 올바른 옵션을 빠르게 찾을 수 있습니다.

이 레퍼런스는 네트워크를 통해 효율적으로 파일을 전송해야 하는 시스템 관리자, DevOps 엔지니어, 개발자, 고급 사용자를 위해 설계되었습니다. 기본 옵션 섹션은 -a(아카이브 모드, 권한과 타임스탬프 보존), -v(상세 출력), -z(압축), -P(진행률 + 부분 재시작), --delete(미러 동기화), -n(드라이 런 시뮬레이션), --stats(전송 요약) 등 필수 플래그를 다룹니다. 필터 섹션은 파일 타입 필터링을 위한 --include와 --exclude 패턴, 파일에서 패턴 읽기를 위한 --exclude-from, --filter 규칙 구문, 크기 기반 필터링을 위한 --max-size/--min-size를 다룹니다.

원격 동기화 섹션은 rsync 로컬-원격, 원격-로컬, 데몬 모드(rsync:// 프로토콜)를 설명합니다. SSH 섹션은 -e ssh 전송 옵션, -e "ssh -p PORT"를 이용한 커스텀 SSH 포트, -e "ssh -i KEY"를 이용한 SSH 키 인증, --bwlimit을 이용한 대역폭 제한, --checksum을 이용한 체크섬 기반 비교를 다룹니다. 백업 섹션은 suffix가 있는 --backup, 날짜 기반 버전 관리를 위한 --backup-dir, 하드링크 증분 백업을 위한 --link-dest, cron 스케줄링 패턴, 전체 미러 백업을 다룹니다. 제외 섹션은 .git, node_modules, 숨김 파일 제외 및 디렉토리별 규칙을 위한 .rsync-filter 파일 사용에 대한 실용적인 패턴을 다룹니다.

주요 기능

  • 핵심 rsync 플래그: -a(아카이브), -v(상세), -z(압축), -P(진행률+부분), --delete(미러), -n(드라이 런), --stats
  • 필터 패턴: 와일드카드가 있는 --include/--exclude, --exclude-from 파일, --filter 규칙, --max-size와 --min-size
  • 원격 동기화: 로컬-원격, 원격-로컬, rsync 데몬 모드(rsync://와 ::module 구문)
  • SSH 전송: -e ssh, -e "ssh -p PORT"를 이용한 커스텀 포트, -e "ssh -i KEY"를 이용한 SSH 키 파일, --bwlimit 대역폭 제어
  • 백업 전략: --suffix가 있는 --backup, 날짜별 백업을 위한 --backup-dir, 하드링크 증분 백업을 위한 --link-dest
  • 예약 백업: /var/log/rsync-backup.log에 로깅을 포함한 일일 rsync cron 작업 템플릿
  • 실용적인 제외 패턴: .git/, node_modules/, 숨김 점 파일, --cvs-exclude 플래그, 디렉토리별 .rsync-filter 규칙
  • 정확한 비교를 위한 --checksum 기반 동기화, --delete-excluded를 이용한 미러 백업

자주 묻는 질문

rsync -av는 무엇을 하며 언제 사용해야 하나요?

-a 플래그는 아카이브 모드를 활성화하며 -rlptgoD와 동일합니다: 디렉토리를 재귀적으로 복사(-r), 심볼릭 링크 보존(-l), 권한 보존(-p), 수정 시간 보존(-t), 그룹 소유권 보존(-g), 소유자 보존(-o), 디바이스/특수 파일 보존(-D). -v 플래그는 전송되는 각 파일을 볼 수 있도록 상세 출력을 활성화합니다. 대부분의 동기화 작업에서 기본 시작점으로 -av를 사용합니다.

소스 경로 끝에 슬래시가 있는 rsync와 없는 rsync의 차이점은 무엇인가요?

소스 경로의 끝 슬래시는 큰 차이를 만듭니다. 끝 슬래시가 있으면(rsync -av /src/ /dest/) rsync가 /src/의 내용을 직접 /dest/에 복사하여 파일이 /dest/file.txt에 위치합니다. 끝 슬래시가 없으면(rsync -av /src /dest/) rsync가 디렉토리 자체를 복사하여 /dest/src/file.txt를 생성합니다. 대상 경로의 끝 슬래시는 영향을 미치지 않습니다. 이것은 rsync 실수 중 가장 흔한 원인 중 하나입니다.

rsync가 무엇을 변경할지 미리 확인하는 드라이 런을 어떻게 실행하나요?

-n 또는 --dry-run 플래그를 사용합니다: rsync -avn --delete /src/ /dest/. -v와 조합하면 실제로 변경하지 않고도 어떤 파일이 생성, 업데이트 또는 삭제될지 정확히 표시합니다. --delete나 다른 파괴적인 작업을 사용하기 전에 항상 드라이 런을 실행하여 파일 목록이 예상과 일치하는지 확인합니다. 출력 형식은 실제 실행과 동일하여 검토하기 쉽습니다.

rsync로 증분 백업을 구현하는 방법은?

--link-dest 옵션을 사용하여 하드링크 기반 증분 백업을 만듭니다. 패턴은 다음과 같습니다: LATEST=$(ls -td /backup/*/ | head -1) && rsync -av --link-dest="$LATEST" /src/ /backup/$(date +%Y%m%d)/. 마지막 백업 이후 변경되지 않은 파일은 이전 백업 디렉토리에서 하드링크되어(추가 디스크 공간 없음) 변경된 파일만 새로 복사됩니다. 각 날짜별 백업 디렉토리는 완전한 복사본처럼 보이지만 최소한의 추가 공간만 사용합니다.

비표준 포트의 SSH를 통해 파일을 동기화하는 방법은?

-e 플래그를 사용하여 SSH 전송 옵션을 지정합니다: rsync -avz -e "ssh -p 2222" /local/ user@remote:/data/. -e 옵션은 기본 원격 셸 명령을 대체하므로 포트를 위한 -p, 키 파일을 위한 -i, SSH 설정 옵션을 위한 -o, SSH 레벨 압축을 위한 -C 등 모든 ssh 플래그를 전달할 수 있습니다. 비표준 포트를 자주 사용한다면 Host와 Port 지시어로 ~/.ssh/config에 추가하는 것이 좋습니다.

rsync 전송에서 node_modules와 .git을 제외하는 방법은?

--exclude 플래그를 사용합니다: rsync -av --exclude='.git/' --exclude='node_modules/' /project/ user@server:/var/www/project/. 여러 --exclude 플래그를 체이닝할 수 있습니다. 대규모 프로젝트에서는 모든 제외 패턴을 텍스트 파일(한 줄에 하나씩)에 넣고 --exclude-from=exclude-list.txt를 사용합니다. 또는 --cvs-exclude(-C)를 사용하면 .git, .svn, *.o, *.swp 등 일반 VCS 및 빌드 아티팩트 디렉토리를 자동으로 제외합니다.

--delete 플래그는 무엇이며 언제 안전하게 사용할 수 있나요?

--delete 플래그는 소스에 더 이상 존재하지 않는 대상의 파일을 삭제하여 대상이 소스의 정확한 미러가 되도록 합니다. 이것은 진정한 미러링에 필수적이지만 부주의하게 사용하면 위험합니다 — 대상에만 존재하는 모든 파일이 영구적으로 삭제됩니다. 항상 --dry-run으로 먼저 파일 목록을 확인하고, 프로덕션에서 --delete를 사용하기 전에 --backup 또는 --backup-dir을 사용하여 삭제될 파일을 저장하는 것을 고려합니다.

rsync --checksum은 기본 파일 비교와 어떻게 다른가요?

기본적으로 rsync는 파일 크기와 수정 시간을 비교하여 전송 여부를 결정합니다. 이것은 빠르지만 파일이 수정되었다가 같은 크기와 타임스탬프로 복원된 경우를 놓칠 수 있습니다. --checksum 플래그는 rsync가 각 파일의 MD5 또는 유사한 체크섬을 계산하고 크기/시간 대신 체크섬을 비교하도록 강제합니다. 이것은 더 느리지만(모든 파일의 모든 바이트 읽기 필요) 비트 단위 정확도를 보장합니다. 미디어 복사 후나 타임스탬프를 신뢰할 수 없을 때처럼 데이터 무결성이 중요한 경우에 --checksum을 사용합니다.