Ubuntu에서 자동 백업 시스템 구축하기: rsync·cron·외장하드 조합

Ubuntu를 메인으로 쓰다 보면 언젠가는 이런 일을 한 번쯤 겪습니다. 실수로 디렉터리를 통째로 지우거나, 노트북이 갑자기 켜지지 않거나, SSD가 이상한 소리를 내기 시작하는 순간입니다. 저는 그때마다 “백업을 왜 미뤘을까”라는 생각을 했고, 결국 지금은 외장 디스크 + rsync + cron 조합으로 자동 백업을 돌리는 습관이 거의 고정됐습니다.

먼저 “어디를, 어디로” 백업할지부터 정하기

백업을 자동화하기 전에 가장 먼저 할 일은 범위를 줄이는 것입니다. 전체 시스템을 이미지로 떠두는 방식도 있지만, 실제로 복구할 일이 생겼을 때 “정말 절대 잃으면 안 되는 건 무엇인가”를 생각해 보면 보통 이렇게 정리됩니다.

  • 홈 디렉터리 중에서 작업용 디렉터리 (예: ~/projects, ~/Documents)
  • 개인 설정 파일 (예: ~/.ssh, 일부 앱 설정)
  • 사진·영상·자료 모음 디렉터리

저는 이 중에서도 “몇 년 치 작업물과 기록이 모여 있는 디렉터리”를 가장 우선 순위로 둡니다. OS나 앱은 다시 설치하면 되지만, 직접 만든 문서·코드는 되돌릴 방법이 없기 때문입니다. 이렇게 백업 대상 디렉터리를 몇 개로 좁혀 놓으면, 나중에 rsync 명령을 짤 때도 훨씬 단순해집니다.

백업 대상지가 될 외장 디스크는 보통 한 번 포맷해 두고, 마운트 지점을 고정합니다. 예를 들어 /mnt/backup_drive 같은 디렉터리를 만들어 두고, 외장하드가 연결되면 항상 여기에 올라오도록 설정해 두면 관리하기가 편했습니다.

rsync로 “어떻게 복사할지”를 정리하기

rsync는 파일 동기화 도구입니다. 이미 복사된 내용은 다시 복사하지 않고, 변경된 파일 위주로만 채워 넣는다는 점이 실용적입니다. Ubuntu에는 기본으로 설치돼 있거나, 패키지 관리자로 쉽게 설치할 수 있습니다.

가장 단순한 예시는 이런 형태입니다.

rsync -av --delete ~/projects/ /mnt/backup_drive/projects/ 

여기서 자주 쓰는 옵션은 대략 이 정도입니다.

  • -a: 권한·타임스탬프 등을 보존하는 “아카이브 모드”
  • -v: 진행 상황을 출력
  • --delete: 원본에서 삭제된 파일을 백업에서도 삭제

--delete는 조심해서 써야 합니다. “백업을 과거 버전 보관용”이 아니라, “거의 거울처럼 맞춰 두는 용도”로 쓸 때에만 쓰는 게 안전합니다. 저는 중요한 자료라면 별도의 버전 관리(git, 클라우드 등)를 병행하고, 외장하드 rsync는 “현재 상태를 거의 그대로 복제하는 역할”로 쓰는 쪽을 택했습니다.

여러 디렉터리를 한 번에 백업하고 싶으면, 간단한 셸 스크립트로 정리해 버리는 게 편합니다. 예를 들면:

#!/bin/bash rsync -av --delete ~/projects/ /mnt/backup_drive/projects/ rsync -av ~/Documents/ /mnt/backup_drive/Documents/ rsync -av ~/.ssh/ /mnt/backup_drive/dotfiles/ssh/ 

이 스크립트를 한 번 직접 실행해 보고, 원하는 대로 복사가 되는지 확인한 뒤에야 cron에 걸어 두는 것이 좋았습니다. 자동화를 하기 전에, 수동으로 한 번은 눈으로 결과를 확인해 보는 단계가 필요합니다.

cron으로 백업 스케줄을 OS에 맡기기

cron은 정해진 시간에 명령을 실행해 주는 스케줄러입니다. Ubuntu에서도 crontab을 통해 개인 단위 스케줄을 등록할 수 있습니다. 저는 보통 “집 노트북은 하루에 한 번, 밤에 외장하드가 연결돼 있을 때만 백업” 같은 기준을 사용했습니다.

예를 들어, 매일 새벽 3시에 백업 스크립트를 돌리려면:

crontab -e 

로 편집 화면을 연 뒤, 다음과 비슷한 줄을 추가합니다.

0 3 * * * /home/사용자명/bin/backup.sh >/home/사용자명/logs/backup.log 2>&1 

앞부분의 0 3 * * *는 “매일 03:00”을 의미하는 crontab 표기입니다. 실행 결과를 로그 파일로 남겨두면, 나중에 문제가 생겼을 때 확인하기에도 좋습니다. 다만 이 방식은 외장하드가 항상 연결된 PC에 적합합니다. 노트북처럼 자주 이동하는 기기라면, 일정 시간이 아니라 “외장하드를 연결했을 때” 백업을 하고 싶은 경우가 많습니다.

노트북이라면 “외장하드를 꽂았을 때” 수동 실행도 현실적

제가 개인적으로 가장 많이 쓰는 패턴은 이렇습니다. 노트북에는 크론을 걸지 않고, 가방에서 외장 SSD를 꺼내 꽂았을 때, 터미널에서 짧은 명령 하나로 백업을 실행하는 방식입니다.

예를 들어, backup.sh 스크립트를 만들어 PATH에 두고, 이렇게 쓰는 식입니다.

backup.sh 

이 스크립트 안에서는 먼저 백업 대상 디스크가 제대로 마운트돼 있는지 확인합니다. 대략 이런 흐름입니다.

if [ ! -d /mnt/backup_drive ]; then echo "백업 디스크가 마운트되지 않았습니다." exit 1 fi rsync -av --delete ~/projects/ /mnt/backup_drive/projects/ # 나머지 rsync… 

이렇게 해두면, 제 쪽에서 해야 할 일은 “가끔 외장하드를 꽂고, backup.sh를 한 번 실행하는 것”뿐입니다. 완전 자동은 아니지만, 노트북을 들고 다니는 생활에서는 이 정도가 오히려 현실적일 때가 많았습니다. 습관이 붙으면 주 1~2회 정도는 자연스럽게 하게 되고, 그 정도면 “모든 걸 잃었다”는 상황을 막기에는 꽤 충분했습니다.

백업 대상 자체도 다시 한 번 백업할지 고민해 보기

백업 시스템을 만들다 보면 또 이런 고민이 생깁니다. “외장하드가 고장 나면?” 완벽한 답은 없지만, 저는 다음 두 가지 원칙을 추가로 두고 있습니다.

  • 정말 중요한 자료는 클라우드나 다른 저장소에도 한 벌 더 둔다.
  • 외장하드 안에서도, 중요한 디렉터리는 기본 백업 영역과 별도로 한 번 더 복제해 두거나, 별도 디스크로 옮겨 둔다.

예를 들어, 중요한 문서와 코드 리포지토리는 Git 호스팅 서비스에 이미 올라가 있고, 사진·영상은 별도의 클라우드에 동기화해 두는 구조를 쓰고 있습니다. 이렇게 해두면 외장하드가 통째로 고장 나더라도, “최신 작업 일부를 다시 맞추는 정도”로 피해를 줄일 수 있습니다.

정리하면, rsync·cron·외장하드 조합은 “내가 직접 이해할 수 있는 범위 안에서 돌아가는 자동 백업”을 만들기에 적당한 도구 세트입니다. 어떤 상용 솔루션을 쓰든 결국 중요한 건 “어디까지 백업할지, 얼마나 자주 할지, 잃어버렸을 때 어디서 꺼내 쓸 수 있을지”를 스스로 알고 있는가였고, 저는 이 구조가 그 질문에 답하기 가장 쉬운 방식 중 하나였습니다.

댓글

이 블로그의 인기 게시물

라즈베리파이 대신, 오래된 노트북에 Ubuntu 깔아서 집 서버 만드는 법

Ubuntu에서 게임 스트리밍 클라이언트 세팅하기: Steam Link·Moonlight 활용법

Ubuntu에서 터미널 안 쓰고도 할 수 있는 관리 작업 10가지