전용 NAS 장비가 없어도 된다. 노트북과 USB 외장하드 한 개면 충분하다. 제대로 설정하면 전원이 켜진 상태에서 자동 마운트, 네트워크 파일 공유, 클라우드 백업까지 완전 자동화된다. 이 가이드는 실제로 운영 중인 구성을 그대로 공개한다.
1. 외장하드 UUID 확인 및 exFAT 마운트 설정
외장하드를 꽂을 때마다 /dev/sdb처럼 디바이스 이름이 바뀔 수 있다. UUID로 마운트하면 항상 동일한 경로에 연결되고, 시스템 부팅 시 자동 마운트된다.
# 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을 추가하면 외장하드가 없는 상태로 부팅해도 시스템이 멈추지 않는다. 외장하드를 항상 연결된 상태로 운영하지 않는 경우 반드시 추가해야 한다. uid=1000,gid=1000은 일반 사용자가 sudo 없이 읽고 쓸 수 있도록 소유권을 설정한다.
2. Samba 설정 — Windows·macOS·Linux 파일 공유
Samba는 SMB 프로토콜을 통해 윈도우, 맥, 리눅스 모든 운영체제에서 NAS를 네트워크 드라이브로 마운트할 수 있게 한다. 설정 파일 하나로 완성된다.
# 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
# === 각 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 | 매주 일요일 | 재해 복구 |
# === 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 -
# === 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)로 디스크 상태를 주기적으로 체크하고, 이상 징후 발견 시 이메일로 알림을 받을 수 있다.
# 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
# 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
Reallocated_Sector_Ct: 불량 섹터 대체 횟수. 0이어야 정상.
Current_Pending_Sector: 읽기 실패 후 대기 중인 섹터. 0이어야 정상.
Offline_Uncorrectable: 복구 불가능한 불량 섹터. 0이어야 정상.
위 세 값이 1 이상이면 디스크가 죽어가고 있다는 신호다. 즉시 데이터를 다른 디스크로 옮겨야 한다.
5. 중복 파일 탐지 및 정리 — fdupes
NAS를 오래 쓰다 보면 동일한 파일이 여러 폴더에 복사되어 공간을 낭비한다. fdupes로 중복 파일을 찾아 정리할 수 있다.
# 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
# 자동화 중복 정리 스크립트 (주의: 삭제 전 백업 필수)
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가 꽉 차면 백업이 실패하고 파일이 손상될 수 있다. 임계치 초과 시 자동으로 알림을 보내는 스크립트를 설정한다.
# 스토리지 모니터링 스크립트
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 붙여넣고 원하는 권한 설명 |
# 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와 서버를 함께 운영하다 보면 로그, 캐시, 임시 파일이 디스크를 조용히 잠식한다. 정기 정리 루틴을 자동화해두면 신경 쓸 필요가 없다.
# 주간 정리 스크립트 — 모든 정리 작업 통합
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 -
# 즉시 공간 확인 — 어디서 용량을 많이 쓰는지 파악
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가 완성된다."