C.W.K.
Stream
Lesson 09 of 12 · published

--link-dest 백업 패턴

~18 min · backup, link-dest, incremental, snapshots

Level 0Pinger
0 XP0/101 lessons0/12 achievements
0/150 XP to next level150 XP to go0% complete

풀 snapshot 처럼 보이는 incremental 백업

고전 백업 패턴 — NAS 에 nightly rsync, 근데 매 밤 전체 snapshot 처럼. 트릭이 --link-dest. rsync 가 출처를 명명된 디렉토리와 비교 — 안 바뀐 파일에 복사 대신 hard link 생성. 결과 — 매 밤 디렉토리가 완전해 보이는데 바뀐 파일만 새 디스크 공간 사용. 한 달 daily 가 단일 풀 백업보다 5–10% 만 더 소비.

실제 디스크 위에 뭐가

Hard link 가 같은 inode 가리키는 여러 디렉토리 항목. 사용자 시점에선 둘 다 풀 파일처럼 보임. 스토리지 시점에선 정확히 한 복사. 한 항목 삭제 — 다른 거 여전히 동작. 그래서 --link-dest snapshot 이 그렇게 싸 — 안 바뀐 파일의 모든 "복사" 가 그냥 다른 inode 참조.

Code

Daily incremental 백업·bash
#!/bin/bash
# nightly-backup.sh
set -euo pipefail

SOURCE="/home/you_username/"
DEST_HOST="nas"
DEST_BASE="/volume1/backups/you_username"
DATE=$(date +%Y-%m-%d)
LATEST="${DEST_BASE}/latest"
BACKUP="${DEST_BASE}/${DATE}"

rsync -avz --delete \
  --link-dest="${LATEST}" \
  --exclude '.Trash' --exclude 'Library/Caches' --exclude 'Downloads' \
  "${SOURCE}" "${DEST_HOST}:${BACKUP}/"

# Update the 'latest' symlink for tomorrow's --link-dest
ssh "${DEST_HOST}" "ln -snf '${DATE}' '${LATEST}'"

echo "Backup ${DATE} complete."

External links

Exercise

위 스크립트를 테스트 target (같은 머신의 디렉토리, 또는 NAS path) 에 셋업. 3 일 연속 돌리고, 사이에 source 의 파일 하나 수정. 각 백업 디렉토리 검사 — du -sh /backups/2026-05-01 /backups/2026-05-02 /backups/2026-05-03. 2 일째와 3 일째가 작은 거 봐 — 대부분 파일이 1 일째 block 으로의 hard link 라.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.