시놀로지 DSM 7 Hyper Backup 외장하드 자동 마운트/언마운트 완전 에어갭(3-2-1-1-0) 구축 가이드

Share

목차

작성일: 2026-10-29
지원 환경: Synology DSM 7.x 전 기종 (Intel, AMD x86_64, ARM 전 모델 호환)
대상 패키지: Hyper Backup

1. 개요: 왜 이 스크립트가 필요한가?

랜섬웨어와 악성코드의 위협으로부터 데이터를 완벽히 보호하기 위한 표준 백업 원칙은 3-2-1-1-0 전략입니다:

  • 3: 3개의 데이터 복사본 유지
  • 2: 2개 이상의 서로 다른 매체 사용
  • 1: 1개 이상의 원격지(클라우드/오프사이트) 보관
  • 1: 1개 이상의 오프라인 격리(Air-Gap) 사본 유지 (네트워크 및 전원 물리적/논리적 차단)
  • 0: 백업 무결성 검사 오류 0개 보장

과거 DSM 6 시절에는 Hyper Backup 작업 설정에 "백업 완료 후 외부 장치 제거" 옵션이 명확히 지원되었으나, DSM 7.x 버전으로 넘어오면서 이 옵션이 제거되거나 불완전해졌습니다. 가장 큰 문제는 "다음 백업 때 외장하드를 자동으로 다시 연결(마운트)해 주는 기능이 시놀로지 자체에 없다"는 점입니다.

이로 인해 많은 나스 사용자들이:

  1. 외장하드를 상시 연결해 두어 랜섬웨어 감염 시 백업 외장하드까지 동시 암호화되는 치명적인 위험에 노출되거나,
  2. 매주 번거롭게 외장하드를 손으로 뺐다 꽂거나 스마트 플러그를 동원하는 복잡한 우회책을 사용해 왔습니다.

본 가이드에서는 시놀로지 순정 도구만을 활용하여, 매주 정해진 시간에 외장하드를 자동 마운트하고 → 백업 수행 → 무결성 검사 → 안전 언마운트까지 단 하나의 스케줄로 100% 자동 완결하는 완전한 에어갭 솔루션을 공유합니다.


2. 전체 파이프라인 및 핵심 동작 원리

이 스크립트는 단순한 시간 지연(sleep)으로 어림잡아 동작하는 것이 아니라, 리눅스 커널 및 시놀로지 Hyper Backup 공식 바이너리와 실시간 통신하여 결정론적(Deterministic)으로 동작합니다.

복사

[작업 스케줄러 트리거 (예: 매주 목요일 07:00)]
   │
   ▼
1. SCSI 호스트 버스 리스캔 (/sys/class/scsi_host/host*/scan)
   └─ Eject 상태로 삭제되었던 커널 디바이스 노드(/dev/usb1) 완전 복원
   │
   ▼
2. USB 외장하드 자동 마운트 (/usr/syno/bin/synousbdisk -mount usb1)
   └─ /volumeUSB1/usbshare 정상 마운트 확인 (최대 30초 검증)
   │
   ▼
3. Hyper Backup 백업 트리거 (/var/packages/HyperBackup/target/bin/dsmbackup --backup ID)
   │
   ▼
4. 실시간 백업 완료 3중 안전 검증
   ├─ ① 공식 CLI 백업 락 검사 (dsmbackup --check-is-share-backing-up)
   ├─ ② 코어 엔진 프로세스(img_backup) 종료 감시
   └─ ③ 실시간 진행 상태 파일(/tmp/synobackup/progress/task_ID/0)의 result="done" 확인
   │
   ▼
5. Hyper Backup 무결성 검사 자동 연계 (detect_monitor -t -k ID -f -T 1800)
   └─ 백업 직후 시놀로지 공식 무결성 검사 엔진 자동 실행 및 완료 대기
   │
   ▼
6. 디스크 캐시 플러시(sync) 및 안전 언마운트 (/usr/syno/bin/synousbdisk -umount usb1)
   └─ exFAT dirty flag 방지 버퍼 대기 후 볼륨 언마운트 (완벽한 오프라인 에어갭 달성)

3. 스크립트 다운로드 및 환경 설정

3.1 스크립트 코드 (usb_hyperbackup.sh)

아래 코드를 복사하여 나스에 저장합니다.

yml복사

#!/bin/bash
# ==============================================================================
# Synology NAS 3-2-1-1-0 에어갭 백업 자동화 스크립트
# 대상: Hyper Backup 외장 USB 백업 작업
# 기능: SCSI 리스캔 -> USB 마운트 -> 백업 실행/완료 검증 -> 무결성 검사 -> sync -> 안전 언마운트
# ==============================================================================

set -o pipefail

# ==============================================================================
# [필수 수정] 사용자 환경에 맞게 아래 3개 변수를 설정하세요.
# ==============================================================================
TASK_ID="1"            # 자신의 Hyper Backup 작업 ID (확인법은 아래 가이드 참조)
USB_DEV="usb1"         # 시놀로지 제어판의 외장 장치 ID (보통 usb1 또는 usb2)
SHARE_NAME="usbshare1" # 외장하드의 공유 폴더명 (보통 usbshare1)
LOG_FILE="/volume1/scripts/usb_hyperbackup.log" # 로그 저장 경로
# ==============================================================================

log() {
    local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
    echo "$msg"
    echo "$msg" >> "$LOG_FILE"
}

log "=========================================================="
log "=== USB 외장하드 에어갭 백업 및 무결성 검사 프로세스 시작 ==="
log "=========================================================="

# 1. 커널 SCSI 버스 리스캔 (Eject 상태에서 디바이스 노드 복원)
log "[1/5] SCSI 호스트 버스 리스캔 수행..."
for host in /sys/class/scsi_host/host*; do
    if [ -f "${host}/scan" ]; then
        echo "- - -" > "${host}/scan" 2>/dev/null || true
    fi
done
sleep 3

# 2. USB 외장하드 마운트
if ! df -h | grep -q "/volumeUSB1/usbshare"; then
    log "[1/5] 외장하드(/dev/${USB_DEV}) 마운트 시도..."
    /usr/syno/bin/synousbdisk -mount "${USB_DEV}" >> "$LOG_FILE" 2>&1

    MOUNT_OK=0
    for i in $(seq 1 10); do
        if df -h | grep -q "/volumeUSB1/usbshare"; then
            MOUNT_OK=1
            break
        fi
        sleep 3
    done

    if [ "$MOUNT_OK" -ne 1 ]; then
        log "[오류] 외장하드 마운트 실패! 백업을 중단합니다."
        exit 1
    fi
    log "[1/5] 외장하드 마운트 완료 (/volumeUSB1/usbshare)"
else
    log "[1/5] 외장하드가 이미 마운트되어 있습니다."
fi

# 3. Hyper Backup 백업 트리거
log "[2/5] Hyper Backup 백업 시작 (Task ID: ${TASK_ID})..."
/var/packages/HyperBackup/target/bin/dsmbackup --backup "${TASK_ID}" >> "$LOG_FILE" 2>&1
sleep 10

# 4. 백업 완료까지 실시간 상태 기반 모니터링 (3중 안전 검증)
log "[3/5] 백업 진행 중... 실시간 상태 모니터링 시작"
while true; do
    # 1차: CLI로 공유 폴더 백업 트랜잭션 검사 (0: 완료/유휴, 1: 진행 중)
    if /var/packages/HyperBackup/target/bin/dsmbackup --check-is-share-backing-up "${SHARE_NAME}" >/dev/null 2>&1; then
        # 2차: 코어 백업 프로세스(img_backup) 종료 확인
        if ! pgrep -f "img_backup.*-k ${TASK_ID}" >/dev/null 2>&1; then
            # 3차: 실시간 진행 상태 파일 플래그 확인
            PROGRESS_FILE="/tmp/synobackup/progress/task_${TASK_ID}/0"
            if [ -f "$PROGRESS_FILE" ]; then
                STATUS=$(grep -E '^result=' "$PROGRESS_FILE" | cut -d '"' -f 2 || true)
                STAGE=$(grep -E '^stage=' "$PROGRESS_FILE" | cut -d '"' -f 2 || true)
                if [ "$STATUS" = "done" ] || [ "$STAGE" = "backup_complete" ]; then
                    log "[3/5] Hyper Backup 백업 완료 검증 성공! (stage=${STAGE}, result=${STATUS})"
                    break
                fi
            else
                log "[3/5] 백업 프로세스 정상 종료 확인!"
                break
            fi
        fi
    fi
    sleep 30
done

# 5. 무결성 검사(detect_monitor) 자동 실행 및 완료 대기
log "[4/5] 백업 완료! 무결성 검사(detect_monitor) 시작..."
/var/packages/HyperBackup/target/bin/detect_monitor -t -k "${TASK_ID}" -f -T 1800 >> "$LOG_FILE" 2>&1
sleep 10

while pgrep -f "detect_monitor.*-k ${TASK_ID}" >/dev/null 2>&1; do
    log "[4/5] 무결성 검사 진행 중... 대기 중 (30초)"
    sleep 30
done
log "[4/5] 무결성 검사 정상 완료!"

# 6. 디스크 캐시 플러시 및 안전 언마운트
log "[5/5] 디스크 동기화(sync) 및 안전 언마운트 수행..."
sync
sleep 5
/usr/syno/bin/synousbdisk -umount "${USB_DEV}" >> "$LOG_FILE" 2>&1
sleep 3

if ! df -h | grep -q "/volumeUSB1/usbshare"; then
    log "[5/5] 외장하드 안전 언마운트 완료 (오프라인 에어갭 격리 성공)"
else
    log "[경고] 외장하드가 아직 언마운트되지 않았습니다. 수동 점검이 필요합니다."
fi

log "=========================================================="
log "=== Hyper Backup 에어갭 전체 작업 정상 완료 ==="
log "=========================================================="

복사


3.2 내 환경에 맞게 수정하는 법 (환경 변수 확인)

1) 자신의 TASK_ID 확인 방법

SSH 터미널에서 다음 명령어를 입력하면 나스에 등록된 백업 작업 번호와 이름이 출력됩니다:

bash복사

grep -E '\[task_|name=' /usr/syno/etc/packages/HyperBackup/synobackup.conf

복사

  • 예시 출력:

복사

  [task_1]
  name="Local Storage 1"
  [task_2]
  name="Synology NAS 1"

자신의 외장하드 백업 작업이 [task_1]이라면 TASK_ID="1"로 지정합니다.

2) USB_DEV 및 SHARE_NAME 확인

  • DSM [제어판] → [외부 장치]에서 장치 이름이 USB Disk 1이면 USB_DEV="usb1"
  • DSM [제어판] → [공유 폴더]에서 해당 외장하드의 공유 폴더명이 usbshare1이면 SHARE_NAME="usbshare1"

4. ⚠️ 가장 중요한 주의사항 (반드시 읽어보세요!)

1) Hyper Backup 앱 자체의 '일정'과 '무결성 검사 일정'을 반드시 꺼야 합니다!

이 스크립트를 사용하기 전에, DSM의 Hyper Backup 앱 작업 설정에 들어가서:

  1. [스케줄] 탭: 백업 일정 활성화 체크 해제 (일정 없음)
  2. [설정] 탭: 일정 무결성 검사 활성화 체크 해제
  3. [설정] 탭: 백업 완료 후 대상 외부 장치 제거 체크 해제 (스크립트가 직접 안전 언마운트함)
🚨 이유:
스크립트가 새벽에 백업과 무결성 검사를 모두 끝마치고 외장하드를 언마운트(격리)해 두었는데, Hyper Backup 자체 스케줄러가 뒤늦게 백업이나 무결성 검사를 독자적으로 실행하려고 시도하면 "대상 장치가 오프라인입니다"라는 실패 오류 알림이 매주 발생하게 됩니다.
이제부터는 스크립트가 [마운트 → 백업 → 무결성 검사 → 언마운트]를 알아서 한 큐에 실행하므로 앱 내부 일정은 꺼두셔야 합니다.

2) 외장하드 포맷(exFAT/NTFS)과 안전 분리

  • exFAT 포맷은 윈도우/맥 호환성이 뛰어나지만 저널링(Journaling)이 없어 비정상 분리 시 dirty bit 오류가 남을 수 있습니다.
  • 본 스크립트에는 언마운트 직전 리눅스 커널 메모리 캐시를 디스크에 강제 플러시하는 sync와 5초간의 I/O 안정화 대기가 포함되어 있어 파일시스템 손상을 원천 방지합니다.

5. 설치 및 DSM 작업 스케줄러 등록 가이드

1단계: 스크립트 파일 저장 및 권한 부여

SSH 또는 File Station을 통해 스크립트를 저장합니다.

  • 권장 저장 위치: /volume1/scripts/usb_hyperbackup.sh
  • 실행 권한 부여 (SSH):bashchmod 755 /volume1/scripts/usb_hyperbackup.sh

(팁) 스크립트 분실 방지 및 File Station에서의 편한 수정을 위해 공유 폴더(예: /volume1/backup/scripts/)에 복사본을 함께 보관해 두시면 좋습니다.

2단계: DSM 제어판 [작업 스케줄러] 등록

  1. Synology DSM 웹 관리자 → [제어판] → [작업 스케줄러] 이동
  2. 상단 메뉴 [생성] → [예약된 작업] →  [사용자 정의 스크립트] 클릭
  3. 일반 설정:
    • 작업: Hyper Backup USB Air-Gap auto
    • 사용자: root (반드시 root로 선택해야 마운트/언마운트 권한이 작동합니다)
    • 활성화됨: 체크
  4. 스케줄:
    • 실행 주기: 매주 원하는 요일 (예: 매주 목요일)
    • 시작 시간: 원하는 백업 시작 시간 (예: 07:00)
  5. 작업 설정:
    • 사용자 정의 스크립트 입력란에 아래 명령어 1줄 입력:bashbash /volume1/scripts/usb_hyperbackup.sh
  6. [확인]을 눌러 저장합니다.

6. 동작 확인 및 로그 모니터링

  • 스케줄러에 등록 후 해당 작업을 선택하고 상단의 [실행] 버튼을 누르면 즉시 수동 테스트가 가능합니다.
  • 실행 중 실시간 로그는 지정한 로그 파일에서 확인할 수 있습니다:

bash복사

tail -f /volume1/scripts/usb_hyperbackup.log

복사

  • 성공 로그 예시:

복사

  [2026-10-29 07:00:01] === USB 외장하드 에어갭 백업 및 무결성 검사 프로세스 시작 ===
  [2026-10-29 07:00:01] [1/5] SCSI 호스트 버스 리스캔 수행...
  [2026-10-29 07:00:04] [1/5] 외장하드(/dev/usb1) 마운트 시도...
  [2026-10-29 07:00:07] [1/5] 외장하드 마운트 완료 (/volumeUSB1/usbshare)
  [2026-10-29 07:00:07] [2/5] Hyper Backup 백업 시작 (Task ID: 1)...
  [2026-10-29 07:00:17] [3/5] 백업 진행 중... 실시간 상태 모니터링 시작
  [2026-10-29 07:45:12] [3/5] Hyper Backup 백업 완료 검증 성공! (stage=backup_complete, result=done)
  [2026-10-29 07:45:12] [4/5] 백업 완료! 무결성 검사(detect_monitor) 시작...
  [2026-10-29 08:05:30] [4/5] 무결성 검사 정상 완료!
  [2026-10-29 08:05:30] [5/5] 디스크 동기화(sync) 및 안전 언마운트 수행...
  [2026-10-29 08:05:38] [5/5] 외장하드 안전 언마운트 완료 (오프라인 에어갭 격리 성공)
  [2026-10-29 08:05:38] === Hyper Backup 에어갭 전체 작업 정상 완료 ===

7. 맺음말

시놀로지 NAS에 아무리 훌륭한 백업 솔루션이 있어도 외장하드가 24시간 365일 마운트되어 있으면 랜섬웨어나 관리자 계정 탈취 공격 시 무방비로 파괴될 수 있습니다.

본 자동화 스크립트를 통해 주 1~2시간의 백업/검사 시간을 제외한 나머지 모든 시간 동안 외장하드를 안전하게 분리(Air-Gap)하여, 진정한 3-2-1-1-0 랜섬웨어 무적 백업 환경을 구축하시기 바랍니다.

 

 

요약

 

시놀로지에 연결 된 USB 외장 하드에 하이퍼 백업으로 백업할 때 

마운트/언마운트 자동으로 해주는 스크립트 설정 방법 입니다

 

코드 실행 원리 

CSI 버스 리스캔 →  USB 마운트 →  백업 실행 →  결정론적 3중 상태 검증 →  무결성 검사 자동 연계 →  캐시 플러시(sync) 후 안전 언마운트 

 

이 글 내용 싹 긁어서 사용하시는 AI 한테 설정 해달라고 하면 쉽게 설정 가능할겁니다

나스 SSH에 연결 된 에이전트면 더 간단하고요

 

yml복사

# ==============================================================================
# [필수 수정] 사용자 환경에 맞게 아래 3개 변수를 설정하세요.
# ==============================================================================
TASK_ID="1"            # 자신의 Hyper Backup 작업 ID (확인법은 아래 가이드 참조)
USB_DEV="usb1"         # 시놀로지 제어판의 외장 장치 ID (보통 usb1 또는 usb2)
SHARE_NAME="usbshare1" # 외장하드의 공유 폴더명 (보통 usbshare1)
LOG_FILE="/volume1/scripts/usb_hyperbackup.log" # 로그 저장 경로
# ==============================================================================

복사

스크립트에서 사용 중인 하이퍼 백업의

USB 외장하드 백업 번호

연결된 USB 외장하드 장치ID와 공유 폴더명을 수정 후

 

가이드 내용에 따라서 

제어판 - 작업 스케쥴러에서 스케쥴로 등록 해주면 됩니다  

 

사용 환경에 맞게 수정해서 사용하세요

Read more

3-2-1 백업의 중요성

이번 랜섬웨어 문제를 직접 겪으신 분들도 계시고  피해 없이 넘어가신 분들도 계실겁니다   피해 입으신 분들은 잘 해결이 됐으면 좋겠습니다   지금은 괜찮지만 이제 불안하신 분들 이런저런 보안 관련 설정도 중요하지만 백업 하는 방법도 중요합니다   나스 입문할 때 많이 들어봤던 이야기일텐데요   3-2-1 백업이라고 하죠  3-2-1 백업 원칙은 데이터

By 빨간물약

DSM 보안 업데이트 안하신 분들은 업데이트 하세요 - 랜섬웨어

Redditwww.reddit.com   지금 국내 뿐만 아니라 해외에서도 랜섬웨어 공격이 심한 것 같네요 위의 링크는 누군가 랜섬웨어에 당한 후 분석한 내용입니다 참고하세요   버전 업이 아니더라도 보안 업데이트라도 다 하시길 바랍니다   기본 5000, 5001 포트는 변경하고 포트 포워딩이나 DMZ 처럼 외부로 포트를 노출하는 것도 좋지 않습니다 SSH 22포트도 변경하시거나 안 쓸

By 빨간물약

최근 AI 성능이 향상되면서 활발해진 분야

사진 3장나눠 보기묶어 보기 1 / 3   https://retrodb.info/krpatch?platform=PS2   레트로게임 한글 패치 분야 입니다   다른 곳도 영향을 많이 받긴 하겠지만 요즘에 엄청 올라오더라고요   모든 레트로게임 다 한글화 할 기세로 올라오네요   단순 한글 패치 뿐만 아니라 롬 자체를 수정하는 경우도 많은데 이런 경우 공유가 힘들어지긴 하죠   여하튼 어렸을

By 빨간물약