주간 백업 자동화: 간단한 리눅스 크론 작업 튜토리얼

cron, rsync 및 tar를 사용하여 안전한 스크립트, 스케줄링 예제 및 복원 확인을 포함한 주간 Linux 백업을 자동화합니다.

주간 백업 자동화: 간단한 Linux Cron 작업 튜토리얼

정기적인 백업은 강력한 시스템 관리의 초석입니다. 하드웨어 오류, 실수로 인한 삭제 또는 보안 사고로 인해 중요한 데이터를 잃는 것은 치명적일 수 있습니다. 다행히 Linux는 cron 스케줄러와 결합하여 안정적이고 자동화된 주간 백업을 가능하게 하는 강력한 내장 도구를 제공합니다. 이 튜토리얼에서는 cron으로 관리되는 rsynctar와 같은 표준 Linux 유틸리티를 사용하여 간단하면서도 효과적인 주간 백업 시스템을 설정하는 방법을 안내합니다.

이 가이드는 자동화된 백업 전략을 구현하려는 Linux 사용자 및 시스템 관리자를 위해 설계되었습니다. 이 튜토리얼을 마치면 중요한 디렉토리의 주간 백업을 수행하도록 cron 작업을 구성하여 데이터를 안전하게 보호하고 복구할 수 있는 방법을 이해하게 됩니다.

백업을 자동화해야 하는 이유는 무엇인가요?

수동 백업은 사람의 실수에 취약하며, 특히 바쁜 일정 속에서는 종종 무시됩니다. 자동화는 이러한 위험을 제거합니다. 주간 백업을 위한 cron 작업을 설정하면 다음을 보장합니다.

  • 일관성: 백업이 설정된 시간에 문제없이 수행됩니다.
  • 신뢰성: 사람의 실수나 건망증 가능성을 줄입니다.
  • 효율성: 시스템 관리자가 다른 중요한 작업에 집중할 수 있는 귀중한 시간을 확보합니다.
  • 데이터 복구: 비즈니스 연속성에 중요한 데이터 손실에 대한 안전망을 제공합니다.

백업 도구 선택: rsync vs. tar

Linux는 백업 생성을 위한 여러 도구를 제공합니다. 이 튜토리얼에서는 두 가지 일반적이고 강력한 유틸리티인 rsynctar에 초점을 맞춥니다.

rsync

rsync(원격 동기화)는 증분 백업에 탁월합니다. 두 위치 간에 파일과 디렉토리를 효율적으로 동기화하여 차이점만 전송합니다. 따라서 특히 후속 백업의 경우 매우 빠르고 대역폭 효율적입니다.

주요 장점:

  • 증분 백업에 효율적입니다.
  • 로컬 및 원격 위치를 동기화할 수 있습니다.
  • 파일 권한, 소유권 및 타임스탬프를 보존합니다.

tar

tar(테이프 아카이브)는 다목적 아카이빙 유틸리티입니다. 여러 파일과 디렉토리를 단일 아카이브 파일로 묶을 수 있으며, 종종 압축됩니다. 데이터의 전체 스냅샷을 만드는 데 이상적입니다.

주요 장점:

  • 단일 아카이브 파일을 생성하여 관리를 간소화합니다.
  • 다양한 압축 방법(gzip, bzip2, xz)을 지원합니다.
  • 파일 권한과 소유권을 보존합니다.

백업 디렉토리 설정

시작하기 전에 백업을 저장할 특정 디렉토리를 지정하는 것이 좋습니다. 이렇게 하면 백업이 체계적으로 유지되고 라이브 데이터와 분리됩니다. 이 예에서는 백업이 /mnt/backups/weekly/에 저장된다고 가정합니다.

이 디렉토리가 존재하고 적절한 권한이 있는지 확인하십시오. 더 나은 재해 복구를 위해 별도의 물리적 드라이브 또는 NAS(Network-Attached Storage)에 백업을 저장하는 것도 고려할 수 있습니다.

sudo mkdir -p /mnt/backups/weekly
sudo chown root:root /mnt/backups/weekly # 또는 전용 백업 사용자

방법 1: 증분 백업을 위한 rsync 사용

rsync는 변경 사항의 기록을 효율적으로 유지하려는 디렉토리를 백업하는 데 환상적입니다. 주간 백업의 경우 전체 디렉토리를 백업할 수 있으며 rsync는 변경된 파일만 처리합니다.

/home 디렉토리와 /etc 디렉토리를 백업한다고 가정해 보겠습니다.

1. 백업 스크립트 생성:

먼저 백업을 수행하는 셸 스크립트를 만듭니다. 이렇게 하면 명령 관리가 더 쉬워지고 필요한 경우 더 복잡한 논리를 허용합니다.

/usr/local/bin/과 같은 위치에 weekly_backup.sh라는 파일을 만듭니다.

#!/bin/bash

# --- 구성 ---
SOURCE_DIRS=("/home" "/etc")
BACKUP_DEST="/mnt/backups/weekly/"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="${BACKUP_DEST}backup_log_${TIMESTAMP}.log"

# --- 대상 디렉토리 존재 확인 ---
mkdir -p "${BACKUP_DEST}"

# --- 로깅 시작 ---
echo "$(date)에 주간 백업 시작" >> "${LOG_FILE}"

# --- rsync 수행 ---
for dir in "${SOURCE_DIRS[@]}"; do
    echo "${dir} 백업 중..." >> "${LOG_FILE}"
    rsync -a --delete "${dir}/" "${BACKUP_DEST}${dir##*/}/" >> "${LOG_FILE}" 2>&1
    if [ $? -eq 0 ]; then
        echo "${dir} 백업 성공." >> "${LOG_FILE}"
    else
        echo "${dir} 백업 중 오류 발생." >> "${LOG_FILE}"
    fi
done

# --- 로깅 종료 ---
echo "$(date)에 주간 백업 완료" >> "${LOG_FILE}"
echo "---------------------------" >> "${LOG_FILE}"

exit 0

rsync 옵션 설명:

  • -a (아카이브 모드): -rlptgoD의 조합으로, 재귀적으로 복사하고, 심볼릭 링크, 권한, 수정 시간, 그룹, 소유자 및 장치/특수 파일을 보존합니다.
  • --delete: 대상 디렉토리에서 불필요한 파일을 삭제합니다. 이렇게 하면 백업이 소스의 정확한 미러가 됩니다. 주의해서 사용하십시오!
  • ${dir}/: 소스 디렉토리의 후행 슬래시가 중요합니다. 이는 "이 디렉토리의 내용을 복사"를 의미합니다. 슬래시가 없으면 디렉토리 자체를 대상에 복사합니다.
  • ${BACKUP_DEST}${dir##*/}/: 대상 경로를 구성합니다. ${dir##*/}는 디렉토리의 기본 이름을 추출합니다(예: '/home'에서 'home').

스크립트를 실행 가능하게 만듭니다:

sudo chmod +x /usr/local/bin/weekly_backup.sh

2. 스크립트 테스트:

스크립트가 예상대로 작동하는지 수동으로 실행합니다.

sudo /usr/local/bin/weekly_backup.sh

백업을 확인하려면 /mnt/backups/weekly/ 디렉토리와 로그 파일을 확인하십시오.

방법 2: 전체 아카이브 백업을 위한 tar 사용

tar는 데이터의 단일 압축 아카이브를 만드는 데 이상적입니다. 이 방법은 특정 시점의 전체 스냅샷을 원하는 경우에 좋습니다.

/home/etc를 압축된 tarball로 백업한다고 가정해 보겠습니다.

1. 백업 스크립트 생성:

/usr/local/bin/weekly_tar_backup.sh라는 파일을 만듭니다.

#!/bin/bash

# --- 구성 ---
SOURCE_DIRS=("/home" "/etc")
BACKUP_DEST="/mnt/backups/weekly/"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_NAME="backup_${TIMESTAMP}.tar.gz"
LOG_FILE="${BACKUP_DEST}backup_log_${TIMESTAMP}.log"

# --- 대상 디렉토리 존재 확인 ---
mkdir -p "${BACKUP_DEST}"

# --- 로깅 시작 ---
echo "$(date)에 주간 tar 백업 시작" >> "${LOG_FILE}"

# --- tar 백업 수행 ---
echo "${ARCHIVE_NAME} 아카이브 생성 중..." >> "${LOG_FILE}"
tar -czvf "${BACKUP_DEST}${ARCHIVE_NAME}" "${SOURCE_DIRS[@]}" >> "${LOG_FILE}" 2>&1

if [ $? -eq 0 ]; then
    echo "${ARCHIVE_NAME} 아카이브 생성 성공." >> "${LOG_FILE}"
else
    echo "${ARCHIVE_NAME} 아카이브 생성 중 오류 발생." >> "${LOG_FILE}"
fi

# --- 로깅 종료 ---
echo "$(date)에 주간 tar 백업 완료" >> "${LOG_FILE}"
echo "---------------------------" >> "${LOG_FILE}"

exit 0

tar 옵션 설명:

  • -c: 새 아카이브를 만듭니다.
  • -z: 압축을 위해 gzip을 통해 아카이브를 필터링합니다.
  • -v: 처리된 파일을 자세히 나열합니다.
  • -f: 아카이브 파일 또는 장치 FILENAME을 사용합니다.
  • "${SOURCE_DIRS[@]}": 각 소스 디렉토리를 별도의 인수로 전달합니다.

스크립트를 실행 가능하게 만들고 테스트합니다:

sudo chmod +x /usr/local/bin/weekly_tar_backup.sh
sudo /usr/local/bin/weekly_tar_backup.sh

주간 Cron 작업 예약

스크립트가 수동으로 작동하면 cron으로 예약합니다. 스크립트가 /etc 또는 다른 사용자의 홈 디렉토리와 같은 시스템 디렉토리를 읽을 수 있는 권한이 필요한 경우 root의 crontab을 사용하십시오.

sudo crontab -e

다음 항목 중 하나를 추가합니다:

# 매주 일요일 오전 2:00에 rsync 백업 실행
0 2 * * 0 /usr/local/bin/weekly_backup.sh

# 또는 매주 일요일 오전 2:30에 tar 백업 실행
30 2 * * 0 /usr/local/bin/weekly_tar_backup.sh

Cron은 다음 필드 순서를 사용합니다:

분 시 일 월 요일 명령어

대부분의 Linux 시스템에서 요일 필드의 0 또는 7은 일요일을 의미합니다. 배포판에서 한 가지 형식만 문서화하는 경우 cron 매뉴얼을 따르십시오.

백업 확인 및 유지 관리

백업은 복원할 수 있을 때만 유용합니다. 다음 확인 사항을 정기적으로 추가하십시오:

  • 첫 번째 예약 실행 후 최신 로그 파일을 검토합니다.
  • 작은 테스트 파일을 임시 디렉토리에 복원합니다.
  • 백업 대상에 충분한 여유 공간이 있는지 확인합니다.
  • 데이터가 중요한 경우 원본 서버 외부에 최소한 하나의 복사본을 저장합니다.
  • 백업 디렉토리 자체를 백업하지 않도록 합니다.

rsync의 경우 --delete가 소스의 삭제를 미러링한다는 점을 기억하십시오. 이는 깨끗한 현재 복사본에 유용하지만 버전 관리 백업을 대체하지는 않습니다. tar의 경우 나중에 보존 정책을 추가하여 오래된 아카이브가 디스크를 가득 채우지 않도록 하십시오.

결론

테스트하고 복원할 수 있는 가장 간단한 주간 cron 작업부터 시작하십시오. 현재 미러를 원할 때는 rsync를 사용하고, 날짜가 지정된 스냅샷을 원할 때는 tar를 사용하며, 백업에 의존하기 전에 항상 샘플 파일을 복원하여 백업을 확인하십시오.