전용 NAS 장비가 없어도 된다. 노트북과 USB 외장하드 한 개면 충분하다. 제대로 설정하면 전원이 켜진 상태에서 자동 마운트, 네트워크 파일 공유, 클라우드 백업까지 완전 자동화된다. 이 가이드는 실제로 운영 중인 구성을 그대로 공개한다.

1. 외장하드 UUID 확인 및 exFAT 마운트 설정

외장하드를 꽂을 때마다 /dev/sdb처럼 디바이스 이름이 바뀔 수 있다. UUID로 마운트하면 항상 동일한 경로에 연결되고, 시스템 부팅 시 자동 마운트된다.

bash
# exFAT 지원 패키지 설치 (Ubuntu 22.04+)
sudo apt install -y exfatprogs fuse

# 외장하드 연결 후 UUID 확인
sudo blkid
# 출력 예시:
# /dev/sdb1: UUID="ABCD-1234" TYPE="exfat" LABEL="MyDisk"

# 마운트 포인트 생성
sudo mkdir -p /mnt/nas

# /etc/fstab에 자동 마운트 설정 추가 (UUID를 위에서 확인한 값으로 교체)
echo 'UUID=ABCD-1234  /mnt/nas  exfat  defaults,uid=1000,gid=1000,umask=022,nofail  0  0' \
  | sudo tee -a /etc/fstab

# 즉시 마운트 테스트
sudo mount -a
df -h /mnt/nas
💡 nofail 옵션이 중요한 이유

nofail을 추가하면 외장하드가 없는 상태로 부팅해도 시스템이 멈추지 않는다. 외장하드를 항상 연결된 상태로 운영하지 않는 경우 반드시 추가해야 한다. uid=1000,gid=1000은 일반 사용자가 sudo 없이 읽고 쓸 수 있도록 소유권을 설정한다.

2. Samba 설정 — Windows·macOS·Linux 파일 공유

Samba는 SMB 프로토콜을 통해 윈도우, 맥, 리눅스 모든 운영체제에서 NAS를 네트워크 드라이브로 마운트할 수 있게 한다. 설정 파일 하나로 완성된다.

bash
# Samba 설치
sudo apt install -y samba samba-common-bin

# Samba 사용자 추가 (리눅스 계정과 별도 관리)
sudo smbpasswd -a $USER   # 비밀번호 입력 프롬프트 나타남

# /etc/samba/smb.conf 끝에 공유 설정 추가
sudo tee -a /etc/samba/smb.conf << 'EOF'

[NAS]
   path = /mnt/nas
   browseable = yes
   read only = no
   writable = yes
   valid users = myuser
   create mask = 0664
   directory mask = 0775
   force group = myuser

[PublicShare]
   path = /mnt/nas/public
   browseable = yes
   read only = no
   guest ok = yes
   create mask = 0666
   directory mask = 0777
EOF

# Samba 서비스 재시작 및 자동 시작 등록
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd

# 방화벽에서 Samba 허용
sudo ufw allow samba
bash
# === 각 OS에서 NAS에 접속하는 방법 ===

# Windows: 파일 탐색기 주소창에 입력
\\192.168.x.x\NAS

# macOS: Finder → 이동 → 서버에 연결 (Cmd+K)
smb://192.168.x.x/NAS

# Linux: 파일 관리자 주소창에 입력
smb://192.168.x.x/NAS

# 또는 CLI에서 직접 마운트
sudo apt install -y cifs-utils
sudo mount -t cifs //192.168.x.x/NAS /mnt/smb \
  -o username=myuser,password=mypass,uid=1000,gid=1000

3. 3-2-1 백업 전략 — rsync + rclone

3-2-1 백업 원칙: 3개 복사본, 2가지 다른 미디어, 1개 오프사이트(클라우드). rsync로 로컬 백업을 자동화하고, rclone으로 클라우드에 동기화한다.

단계위치도구빈도목적
1차 (원본) 외장하드 /mnt/nas 직접 저장 실시간 주 스토리지
2차 (로컬) 노트북 내장 SSD rsync 매일 새벽 3시 빠른 복구
3차 (클라우드) Google Drive rclone 매주 일요일 재해 복구
bash
# === rsync 로컬 백업 설정 ===

# 백업 디렉토리 생성
mkdir -p ~/backup/nas

# rsync 백업 스크립트 작성
cat > ~/scripts/backup-nas.sh << 'EOF'
#!/bin/bash
LOGFILE=/var/log/nas-backup.log
echo "=== NAS 백업 시작: $(date) ===" >> $LOGFILE

rsync -avh --delete \
  --exclude='*.tmp' \
  --exclude='.Trash*' \
  --exclude='System Volume Information' \
  /mnt/nas/ ~/backup/nas/ >> $LOGFILE 2>&1

echo "=== 완료: $(date) ===" >> $LOGFILE
EOF
chmod +x ~/scripts/backup-nas.sh

# crontab에 매일 새벽 3시 자동 실행 등록
(crontab -l; echo "0 3 * * * /home/$USER/scripts/backup-nas.sh") | crontab -
bash
# === rclone 클라우드 백업 설정 ===

# rclone 설치
curl https://rclone.org/install.sh | sudo bash

# Google Drive 연동 (interactive 설정)
rclone config
# → n(새 원격) → 이름: gdrive → google drive 선택
# → 브라우저 인증 후 완료

# rclone 동기화 테스트 (dry-run으로 먼저 확인)
rclone sync /mnt/nas gdrive:NAS-Backup --dry-run

# 실제 동기화 실행
rclone sync /mnt/nas gdrive:NAS-Backup \
  --exclude '.Trash*' \
  --exclude '*.tmp' \
  --progress \
  --transfers 4

# 매주 일요일 새벽 2시 자동화
(crontab -l; echo "0 2 * * 0 rclone sync /mnt/nas gdrive:NAS-Backup --log-file=/var/log/rclone.log") | crontab -
"rsync는 변경된 파일만 전송한다. 처음 한 번은 오래 걸리지만 이후 매일 백업은 수 분 안에 끝난다."

4. SMART 디스크 모니터링 — 고장 예측

외장하드는 언제든 고장날 수 있다. SMART(Self-Monitoring, Analysis and Reporting Technology)로 디스크 상태를 주기적으로 체크하고, 이상 징후 발견 시 이메일로 알림을 받을 수 있다.

bash
# smartmontools 설치
sudo apt install -y smartmontools

# 외장하드 SMART 상태 즉시 확인
sudo smartctl -a /dev/sdb

# 핵심 지표 필터링
sudo smartctl -a /dev/sdb | grep -E \
  "Reallocated_Sector|Pending_Sector|Uncorrectable|Temperature|Power_On_Hours"

# 짧은 셀프 테스트 실행 (약 2분 소요)
sudo smartctl -t short /dev/sdb
# 완료 후 결과 확인
sudo smartctl -l selftest /dev/sdb
bash
# smartd 데몬 설정 — 주기적 자동 모니터링
sudo nano /etc/smartd.conf
# 다음 줄 추가 (모든 디스크에 적용):
# DEVICESCAN -d removable -H -l error -l selftest \
#   -s (S/../.././02|L/../../6/03) -m root -M exec /usr/share/smartmontools/smartd-runner

sudo systemctl enable smartd
sudo systemctl start smartd

# 디스크 헬스 요약 스크립트
cat > ~/scripts/disk-health.sh << 'EOF'
#!/bin/bash
echo "=== 디스크 상태 점검: $(date) ==="
for disk in /dev/sd?; do
  echo "--- $disk ---"
  sudo smartctl -H $disk | grep "SMART overall-health"
  sudo smartctl -a $disk | grep "Reallocated_Sector_Ct" | awk '{print "불량 섹터:", $10}'
  sudo smartctl -a $disk | grep "Temperature_Celsius" | awk '{print "온도:", $10, "°C"}'
done
EOF
chmod +x ~/scripts/disk-health.sh
⚠️ SMART 위험 신호 — 이 값이 0 이상이면 즉시 백업

Reallocated_Sector_Ct: 불량 섹터 대체 횟수. 0이어야 정상.
Current_Pending_Sector: 읽기 실패 후 대기 중인 섹터. 0이어야 정상.
Offline_Uncorrectable: 복구 불가능한 불량 섹터. 0이어야 정상.
위 세 값이 1 이상이면 디스크가 죽어가고 있다는 신호다. 즉시 데이터를 다른 디스크로 옮겨야 한다.

5. 중복 파일 탐지 및 정리 — fdupes

NAS를 오래 쓰다 보면 동일한 파일이 여러 폴더에 복사되어 공간을 낭비한다. fdupes로 중복 파일을 찾아 정리할 수 있다.

bash
# fdupes 설치
sudo apt install -y fdupes

# 중복 파일 탐지 (삭제 없이 목록만 출력)
fdupes -r /mnt/nas

# 크기 정보 포함 출력
fdupes -rS /mnt/nas

# 특정 폴더만 검사
fdupes -r /mnt/nas/Photos /mnt/nas/Backup/Photos

# 중복 파일 수와 낭비 공간 요약
fdupes -rS /mnt/nas | grep "^Size" | awk '{sum += $2} END {print "낭비 공간:", sum/1024/1024, "MB"}'

# 대화형 모드로 삭제 선택 (각 그룹에서 유지할 파일 선택)
fdupes -rd /mnt/nas/Photos
bash
# 자동화 중복 정리 스크립트 (주의: 삭제 전 백업 필수)
cat > ~/scripts/dedup-nas.sh << 'EOF'
#!/bin/bash
REPORT=/tmp/duplicates-$(date +%Y%m%d).txt
echo "중복 파일 탐지 시작: $(date)" > $REPORT

# 중복 목록만 생성 (삭제 안 함)
fdupes -rS /mnt/nas >> $REPORT 2>&1

TOTAL=$(fdupes -rn /mnt/nas | wc -l)
echo "발견된 중복 파일 수: $TOTAL" >> $REPORT
echo "리포트: $REPORT"
cat $REPORT
EOF
chmod +x ~/scripts/dedup-nas.sh

6. 스토리지 사용량 모니터링 자동화

NAS가 꽉 차면 백업이 실패하고 파일이 손상될 수 있다. 임계치 초과 시 자동으로 알림을 보내는 스크립트를 설정한다.

bash
# 스토리지 모니터링 스크립트
cat > ~/scripts/storage-check.sh << 'EOF'
#!/bin/bash
THRESHOLD=85   # 사용률 85% 초과 시 경고
MOUNT=/mnt/nas

USAGE=$(df $MOUNT | awk 'NR==2 {print $5}' | tr -d '%')
AVAIL=$(df -h $MOUNT | awk 'NR==2 {print $4}')
TOTAL=$(df -h $MOUNT | awk 'NR==2 {print $2}')

echo "NAS 사용률: ${USAGE}% (남은 공간: ${AVAIL} / 전체: ${TOTAL})"

if [ "$USAGE" -ge "$THRESHOLD" ]; then
  echo "⚠️ 경고: NAS 사용률이 ${THRESHOLD}%를 초과했습니다! (현재: ${USAGE}%)"
  # 이메일 알림 (mailutils 설치 필요)
  # echo "NAS full: ${USAGE}%" | mail -s "NAS 경고" your@email.com
fi
EOF
chmod +x ~/scripts/storage-check.sh

# 매일 오전 8시 자동 체크
(crontab -l; echo "0 8 * * * /home/$USER/scripts/storage-check.sh >> /var/log/storage.log 2>&1") | crontab -

7. 오류 발생 시 AI 도구로 즉시 해결

NAS 구축 과정에서 fstab 오류, 권한 문제, rsync 실패 같은 오류가 반드시 발생한다. 이때 당황하지 않아도 된다 — AI 도구를 쓰면 된다.

오류 유형추천 도구사용법
fstab 마운트 실패, 부팅 불가 Claude Code CLI 오류 메시지 붙여넣기 → 수정 명령어 즉시 출력
파일명·폴더 정리 오류 Antigravity --dry-run으로 미리 확인 후 --move
rsync/rclone 스크립트 버그 Claude Code CLI 스크립트 파일 통째로 붙여넣고 "오류 찾아줘"
Samba 권한 설정 복잡한 경우 Claude (웹/앱) 현재 smb.conf 붙여넣고 원하는 권한 설명
bash
# Claude Code CLI 설치 및 NAS 오류 해결 예시

# 설치 (Node.js 18+ 필요)
npm install -g @anthropic-ai/claude-code

# 프로젝트 디렉토리에서 실행
cd ~/scripts
claude

# 오류 발생 시 사용 예시:
# "fstab에 UUID 추가했는데 mount -a 하면 이 오류 나: [오류 붙여넣기]"
# "rsync 스크립트 실행하면 permission denied 에러 나. 이 스크립트 봐줘"
# "rclone sync가 중간에 끊기는데 재시도하게 만들려면?"

# 컨텍스트 정리 (오래 쓰다 느려지면)
# Claude Code 세션 내에서:
# /clear   — 현재 대화 맥락 초기화
# /compact — 요약해서 압축 (중요 내용은 유지)

8. 데이터 정리 루틴 — 로그·캐시·임시파일 자동 관리

NAS와 서버를 함께 운영하다 보면 로그, 캐시, 임시 파일이 디스크를 조용히 잠식한다. 정기 정리 루틴을 자동화해두면 신경 쓸 필요가 없다.

bash
# 주간 정리 스크립트 — 모든 정리 작업 통합
cat > ~/scripts/weekly-cleanup.sh << 'EOF'
#!/bin/bash
echo "=== 주간 정리 시작: $(date) ==="

# 1. 시스템 로그 7일 이상 삭제
sudo journalctl --vacuum-time=7d
echo "✅ 시스템 로그 정리 완료"

# 2. apt 캐시 정리
sudo apt autoremove -y && sudo apt clean
echo "✅ apt 캐시 정리 완료"

# 3. Docker 미사용 리소스 정리 (Docker 사용 시)
if command -v docker &> /dev/null; then
  docker system prune -f
  echo "✅ Docker 정리 완료"
fi

# 4. git 저장소 최적화 (개발 폴더 있는 경우)
find ~/projects -name ".git" -type d | while read gitdir; do
  repo=$(dirname "$gitdir")
  git -C "$repo" gc --quiet
done
echo "✅ Git 저장소 최적화 완료"

# 5. NAS 임시 파일 정리
find /mnt/nas -name "*.tmp" -older -7 -delete 2>/dev/null
find /mnt/nas -name ".Trash*" -type d -exec rm -rf {} + 2>/dev/null
echo "✅ NAS 임시 파일 정리 완료"

# 6. 백업 로그 30일 이상 삭제
find /var/log -name "*.log" -mtime +30 -delete 2>/dev/null
echo "✅ 오래된 로그 삭제 완료"

# 결과 요약
echo "=== 정리 완료: $(date) ==="
df -h /mnt/nas
df -h /
EOF
chmod +x ~/scripts/weekly-cleanup.sh

# 매주 일요일 오전 4시 자동 실행
(crontab -l; echo "0 4 * * 0 /home/$USER/scripts/weekly-cleanup.sh >> /var/log/weekly-cleanup.log 2>&1") | crontab -
bash
# 즉시 공간 확인 — 어디서 용량을 많이 쓰는지 파악
df -h                    # 파티션별 사용량
du -sh /mnt/nas/*       # NAS 내 폴더별 사용량 (최상위)
du -sh ~/backup/*       # 백업 폴더 사용량

# 가장 용량 큰 파일 TOP 10
find /mnt/nas -type f -printf '%s %p\n' | sort -rn | head -10 | \
  awk '{printf "%.1f GB  %s\n", $1/1024/1024/1024, $2}'

# 30일 이상 접근 안 한 파일 목록
find /mnt/nas -type f -atime +30 -printf '%a  %p\n' | head -20

9. 완성된 NAS 자동화 아키텍처

구성 요소도구자동화 주기상태
외장하드 마운트 fstab UUID 부팅 시 자동 ✅ 완성
네트워크 파일 공유 Samba 상시 실행 ✅ 완성
로컬 백업 rsync 매일 03:00 ✅ 자동화
클라우드 백업 rclone → Google Drive 매주 일요일 02:00 ✅ 자동화
디스크 상태 점검 smartd 주 1회 자동 테스트 ✅ 자동화
스토리지 사용률 경보 shell script 매일 08:00 ✅ 자동화
데이터 정리 weekly-cleanup.sh 매주 일요일 04:00 ✅ 자동화
"NAS는 설정 한 번 제대로 하면 신경 안 써도 된다. 자동 마운트, 자동 백업, 자동 모니터링 — 세 가지를 crontab에 넣으면 진짜 NAS가 완성된다."