AI 뉴스

Synology, QNAP, TrueNAS 없이 최소 ZFS NAS 구축하기 — Debian + OpenZFS로 16GB ECC 머신에 4×NVMe RAIDZ1 굴리기

노동1호 2026. 7. 10. 19:03

GUI가 필요 없는 기본 NAS라면 ZFS 데이터셋을 만들고 Samba로 공유하는 조합만으로 충분히 단순한 네트워크 스토리지를 구성할 수 있습니다. 본문에서는 Debian 12 Bookworm + OpenZFS zfs-2.1.1 + RAIDZ1 + ECC RDIMM 16GB RAM + 4×4TB NVMe SSD 환경 한 가지에 초점을 맞춰, GUI 없이도 흔들리지 않는 ZFS NAS를 만드는 절차를 정리합니다. Synology나 QNAS, TrueNAS 같은 통합 어플라이언스가 부담스러운 1-유저 홈랩 / 소규모 사무실 / 테스트베드 시나리오에서 특히 유용합니다.

data center server storage

> 본문은 원문 가이드의 절차와 옵션을 그대로 옮겨왔으며, 2026년 시점의 Debian 12 / OpenZFS 안정성 업데이트와 NVMe 가격 추이를 반영해 운영상 주의해야 할 포인트를 덧붙였습니다.

환경 선택: 왜 Debian + OpenZFS인가

완제품 NAS(Synology, QNAP)와 통합 배포판(TrueNAS Scale/Core)은 관리 포인트를 한 곳으로 모아주지만, OS 업데이트 주기와 특정 커널 버전 종속, 그리고 라이선스 모델이 운영 환경과 맞지 않는 경우가 있습니다. 반대로 Debian + OpenZFS 조합은 다음 세 가지 장점을 제공합니다.

  • OS 자유도: 커널 업그레이드와 패키지 정책을 운영자가 직접 결정 — LTS 5년 정책을 Debian이 보장, OpenZFS는 DKMS로 안정 추적.
  • 투명한 데이터 흐름: ZFS 풀 / 데이터셋 / 스냅샷 / 복제 흐름이 모두 표준 CLI(zpool, zfs)에 노출 — GUI 의존 없이 재현 가능.
  • 확장성: Samba 외에 NFS, iSCSI, S3-compatible(minio), ksmbd까지 패키지 매니저에서 직접 선택.

본 가이드 예시 환경은 다음과 같습니다.

  • Debian 12 Bookworm, OpenZFS zfs-2.1.1
  • RAIDZ1 vdev 1개 (4×4TB NVMe SSD)
  • ECC RDIMM 16GB RAM
  • RAIDZ1 패리티 한 슬롯 허용 → 실사용 용량은 약 12TB

암호화(zfs 암호화)과 백업 전략은 본 가이드 범위에서 제외되지만, 운영 단계에서는 별도 검토가 필요합니다.

단계 1: Debian 설치와 ZFS 패키지 도입

최소 Debian 12 인스톨러로 머신을 부팅한 뒤, OpenZFS 공식 저장소를 추가합니다. Debian의 contrib 저장소에는 zfsutils-linux 패키지가 들어 있으므로, 다음과 같이 설치합니다.


sudo apt update
sudo apt install -y linux-headers-$(uname -r) zfsutils-linux
echo 'zfs' | sudo tee /etc/modules-load.d/zfs.conf
sudo modprobe zfs

설치 후 zfs --version 으로 zfs-2.1.1-1 이 잡히면 DKMS 모듈도 함께 빌드된 상태입니다. 커널이 업데이트될 때마다 DKMS가 자동으로 재컴파일하므로, 재부팅 후 dmesg | grep -i zfs 로 모듈이 로드됐는지 확인하는 운영 습관이 좋습니다.

단계 2: zpool 생성 — RAIDZ1 한 줄

4개의 NVMe SSD를 RAIDZ1으로 묶는 명령은 단순합니다. 본 가이드는 운영 안전을 위해 장치 이름을 그대로 적지만, 실제 적용 시에는 /dev/disk/by-id/ 경로의 안정적인 디스크 식별자를 사용하는 편이 안전합니다.


sudo zpool create -o ashift=12 -O compression=lz4 \
    -O atime=off -O recordsize=1M \
    tank raidz1 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1

핵심 옵션은 다음과 같습니다.

  • ashift=12: NVMe는 기본 4KiB 섹터이므로 2^12 = 4096으로 정렬. 향후 디스크 교체를 고려하면 필수.
  • compression=lz4: 압축으로 인한 성능 저하가 거의 없고, 워크로드에 따라 용량이 오히려 늘어남.
  • atime=off: 액세스 시간 기록 비활성 — SSD 수명에 직결되는 IO 패턴을 줄임.
  • recordsize=1M: 대용량 순차 쓰기 위주라는 가정. 작은 파일 워크로드 위주라면 기본 128K가 더 적합.

풀 상태는 zpool statuszpool list 로 점검합니다. 정상이라면 다음과 비슷한 출력이 나옵니다.


NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank   14.5T  4.21M  14.5T        -         0     0%    0%  1.00x    ONLINE  -

단계 3: 데이터셋 설계 — 단일 풀 안에서 영역을 쪼개기

data center server storage

ZFS의 강점은 풀 안에서 데이터셋을 자유롭게 쪼개고 각각에 정책을 다르게 줄 수 있다는 점입니다. 최소 구성에서는 다음 두 데이터셋 정도만 만들어도 충분합니다.


sudo zfs create tank/data
sudo zfs create tank/backups
sudo zfs set quota=8T tank/data
sudo zfs set compression=zstd tank/backups

여기서 quota 는 데이터셋이 풀을 독점하지 않도록 상한을 두기 위한 것이고, compression=zstd 는 백업 같이 압축 효율이 더 중요한 영역에 별도 정책을 부여합니다. 이처럼 한 풀 안에서 정책만 다르게 적용할 수 있다는 점이 ext4 파일시스템과 결정적으로 다른 부분입니다.

단계 4: Samba 공유 — 단일 smb.conf 한 섹션

GUI 없는 NAS의 마지막 조각은 SMB/CIFS 공유입니다. Debian의 samba 패키지 하나로 충분합니다.


sudo apt install -y samba

/etc/samba/smb.conf[global] 섹션에 다음 두 줄만 추가하고, [data] 섹션을 정의합니다.


[global]
   server min protocol = SMB2
   vfs objects = zfs_space zfsacl

[data]
   path = /tank/data
   read only = no
   browseable = yes

zfs_spacezfsacl vfs 모듈은 ZFS quota와 ACL을 Samba에 그대로 노출합니다. 이 두 줄로 ZFS 데이터셋을 Samba의 1차 스토리지로 깔끔하게 통합할 수 있습니다. 이후 Samba를 재시작합니다.


sudo systemctl restart smbd
sudo smbpasswd -a youruser

단계 5: 운영 시 핵심 점검 명령

ZFS 운영에서 자주 쓰이는 점검 명령 4개만 외우면 평가는 끝납니다.

  • zpool status -x — 풀에 문제가 없을 때 비어 있는 한 줄 출력. 자동 모니터링 스크립트의 기본 점검으로 추천.
  • zpool scrub tank — 풀 전 영역에 대해 체크섬 검증. 분기 1회, 야간에 돌리면 충분.
  • zfs list -o space — 각 데이터셋이 실제로 점유한 물리 용량 + 스냅샷 점유를 보여줌.
  • zfs get compressratio,used,quota tank/data — 단일 데이터셋의 압축률과 quota 추적.

snapshot retention 정책은 별도이지만, 본 가이드가 안내하는 기본 골격만으로도 GUI 없이도 충분히 단순한 네트워크 스토리지를 구성할 수 있습니다.

운영 팁 — 2026년 시점에서 보강

  1. NVMe SSD wear-out: SSD 수명 추적은 smartctl -a /dev/nvme0n1Percentage Used 지표로 점검. RAIDZ1이라 한 디스크 손실은 복구 가능하지만, 두 디스크 동시 손실은 풀 손실로 직결.
  2. ECC RAM: ZFS는 기본적으로 메모리 쓰기 오류에 매우 엄격합니다. 본문에 명시된 ECC RDIMM 16GB 환경이 권장.
  3. 스냅샷 자동화: sanoid / syncoid 같은 오픈소스로 데이터셋 단위 자동 스냅샷 + 원격 복제 구성 가능. 별도 가이드에서 다루기 좋습니다.
  4. scrub 부하: 사용량이 적은 야간에 zpool scrub 을 cron으로 돌리면 풀 검증이 백그라운드에서 끝남.

전망: NAS 운영의 다음 단계

본 가이드의 골격 위에 다음 한 단계씩 덧붙여 나갈 수 있습니다.

  • 원격 복제: zfs send/receive 로 오프사이트 머신에 주기적 push → 재해 복구 비용 절감.
  • S3 호환 계층: minio 를 docker-compose로 띄워 같은 풀에서 S3 호환 객체 스토리지를 노출.
  • 모니터링: zfs_exporter (Prometheus) + Grafana 대시보드 — 풀 상태, scrub 결과, ARC 히트율을 시각화.

GUI 없는 기본 NAS를 넘어 이 세 축 중 한 가지라도 채택하면 ZFS의 진가가 본격적으로 드러납니다.

요약

  • Debian 12 + OpenZFS zfsutils-linux 패키지 설치만으로 풀 운영 가능.
  • 4×NVMe SSD의 RAIDZ1 풀은 명령 한 줄로 생성.
  • 데이터셋 분할로 quota/compression 정책을 다르게 운용.
  • Samba vfs modules(zfs_space, zfsacl)로 ZFS를 그대로 노출.
  • zpool status -xzpool scrub 두 명령이 상시 운영의 핵심.

Synology / QNAP / TrueNAS 같은 통합 어플라이언스가 부담스러운 팀과 개인에게, 위 절차는 ZFS의 데이터 보호 강점을 거의 그대로 누리면서 운영 자유도를 크게 높여 줍니다.

  • --

📰 원본 출처 · https://news.hada.io/topic?id=31276 (#N=31276)

이 글은 GeekNews(긱뉴스)에 게제된 글을 기반으로 작성되었습니다. 원본의 라이선스와 저작권은 원작자에게 있습니다.