안녕하세요! 리눅스 시스템을 관리하다 보면 '백업'은 숙명과도 같은 작업입니다. 가장 먼저 배우는 명령어는 단연 cp죠. 직관적이고 간단하니까요. 하지만 정기적인 백업 스크립트에 cp를 사용했다가 예상치 못한 문제로 당황해 본 적 없으신가요? 🤔
"분명 백업했는데 왜 디렉토리 구조가 이상해지지?"
오늘은 이 흔한 함정과 그에 대한 명쾌한 해답을 알려드리려고 합니다. 왜 단순한 복사(copy)가 아닌 동기화(sync)가 필요하며, 왜 rsync가 백업 작업의 표준으로 불리는지 그 이유를 속 시원하게 파헤쳐 보겠습니다!

1. cp 명령어의 숨겨진 함정: "어? 왜 폴더가 또 생기지?"
백업 스크립트에 아래와 같은 cp 명령어를 넣었다고 가정해 봅시다.
# /var/www/ 디렉토리를 /opt/www-backup/으로 백업한다
cp -a /var/www/ /opt/www-backup/
이 스크립트를 처음 실행하면 아무 문제 없이 /opt/www-backup 폴더 안에 /var/www의 내용물이 잘 복사됩니다. 하지만 두 번째 실행부터 문제가 발생합니다. /opt/www-backup 안에 www라는 폴더가 또 생겨버리죠!
- 1회차: /opt/www-backup/[...www의 내용물...] 👍
- 2회차: /opt/www-backup/www/[...www의 내용물...] 👎
- 3회차: /opt/www-backup/www/www/[...www의 내용물...] 😱
이것은 cp가 대상 폴더의 존재 여부에 따라 동작을 달리하기 때문입니다.
- 대상이 없으면: 대상 폴더를 만들고 그 안에 내용물을 복사합니다.
- 대상이 있으면: 대상 폴더 안에 원본 폴더 자체를 복사합니다.
마치 빈 상자에 물건을 정리하는 것과, 이미 물건이 든 상자 안에 또 다른 상자를 통째로 넣는 것의 차이와 같습니다.
2. cp로 문제를 해결하는 '무식한' 방법
물론 cp만으로 이 문제를 해결할 수는 있습니다. 바로 복사하기 전에 기존 백업을 몽땅 지워버리는 것이죠.
# 1. 일단 기존 백업을 깨끗하게 지운다.
rm -rf /opt/www-backup/
# 2. 그리고 다시 복사한다.
cp -a /var/www/ /opt/www-backup/
매번 백업 폴더를 지워서 cp가 항상 '첫 번째 실행'처럼 행동하게 만드는 원시적인 방법입니다. 동작은 하지만, 이 방법은 왜 우리가 cp를 백업에 사용하면 안 되는지를 명확하게 보여주는 단점들을 내포하고 있습니다.
3. 왜 cp + rm 방식이 최악의 선택일까?
🐢 극심한 비효율
가장 큰 문제입니다. 원본에서 1KB짜리 텍스트 파일 하나만 수정되어도, 이 스크립트는 수십 GB의 전체 백업을 지우고 처음부터 다시 복사합니다. 이는 엄청난 시간 낭비와 시스템 I/O 부하를 유발합니다. 액자 하나 바꾸려고 집 전체를 리모델링하는 것과 같죠.
💣 백업 공백 시간
rm으로 백업을 지운 순간부터 cp가 완료될 때까지, 여러분의 서버에는 백업이 존재하지 않는 위험한 시간이 발생합니다. 만약 이 사이에 시스템에 문제가 생긴다면? 상상하고 싶지도 않네요.
🗑️ 삭제 파일 미반영
만약 rm 없이 cp -u (업데이트) 옵션을 사용하면, 원본에서 삭제한 파일이 백업 폴더에는 그대로 남아있게 됩니다. 시간이 지날수록 백업 폴더는 유령 파일들로 가득 차게 됩니다.
4. 전문가의 선택: rsync (The Right Tool for the Job)
이 모든 문제를 해결하는 명령어가 바로 rsync입니다. rsync는 'Remote Sync'의 약자로, 이름처럼 두 디렉토리를 '동기화'하는 데 특화된 도구입니다.
rsync는 단순히 모든 것을 복사하는 게 아니라, 두 디렉토리를 비교해서 변경된 부분(Delta)만賢く 전송합니다.
완벽한 백업을 위한 rsync 명령어
rsync -avh --delete /var/www/ /opt/www-backup/
- -a (archive): 권한, 소유자 등 모든 속성을 보존하며 재귀적으로 복사합니다.
- -v (verbose): 진행 상황을 자세히 보여줍니다.
- -h (human-readable): 파일 크기를 M, G 등 읽기 편한 단위로 보여줍니다.
- --delete: 핵심 옵션입니다. 원본에서 삭제된 파일은 백업에서도 똑같이 삭제하여, 두 디렉토리를 완벽한 거울 상태로 만듭니다.
⚠️ rsync의 절대 규칙: 경로 끝의 슬래시(/)
rsync를 사용할 때 이것 하나만은 꼭 기억하세요. 원본(Source) 경로의 끝에 /를 붙이면 '그 안의 내용물'을 의미하고, 붙이지 않으면 '디렉토리 자체'를 의미합니다. cp에서 겪었던 문제를 피하려면 반드시 원본 경로 끝에 /를 붙여주세요!
- /var/www/ ➡️ /var/www의 내용물을 의미 (O)
- /var/www ➡️ /var/www 디렉토리 자체를 의미 (X)
결론: 망치와 전동 드라이버
cp와 rsync의 관계는 망치(🔨)와 전동 드라이버(🔩)에 비유할 수 있습니다. 못 하나를 박을 땐 망치가 빠르고 유용합니다. 하지만 수십 개의 나사로 가구를 조립해야 할 땐 전동 드라이버가 압도적으로 효율적이고 정확하죠.
단순한 일회성 복사에는 cp를, 반복적이고 안정성이 중요한 백업과 동기화 작업에는 반드시 rsync를 사용하세요. 올바른 도구를 선택하는 것이 당신의 시간과 시스템의 안정을 지켜주는 첫걸음입니다.
태그:
리눅스, 백업, 동기화, cp, rsync, 셸 스크립트, 시스템관리, DevOps, 리눅스팁
'일반IT > 리눅스' 카테고리의 다른 글
| 리눅스 관리의 첫걸음: 사용자(User)와 그룹(Group) 완벽 가이드 🧑💼 (0) | 2025.10.10 |
|---|---|
| 내 서버를 지키는 보이지 않는 방화벽: 리눅스 사용자 자원 제한 (ulimit) 완벽 가이드 🛡️ (0) | 2025.10.10 |
| 리눅스 자동화의 첫걸음: 셸 스크립트와 Cron 완벽 가이드 🤖 (0) | 2025.10.10 |
| 리눅스 파일 검색의 달인으로 거듭나기: find 명령어 완전 정복 🧙♂️ (0) | 2025.10.10 |
| 🚀 리눅스 저장소 유연하게 관리하기: LVM, PV, VG, LV 완벽 정복! (0) | 2025.10.10 |