시놀로지, QNAP, TrueNAS 없이 최소 ZFS NAS 구축하는 방법 (2024)

How to Build a Minimal ZFS NAS Without Synology, QNAP, TrueNAS (2024)

요약

오라클의 ZFS 파일시스템을 활용하면 GUI 기능이 필요 없는 기본 NAS를 놀랍도록 간단하게 구축할 수 있다. 이 가이드는 데비안 12에서 4개의 4TB NVMe SSD로 RAIDZ1을 구성하고, Samba를 통해 네트워크 공유까지 설정하는 과정을 담았다. ZFS의 가장 강력하지만 잘 알려지지 않은 특징은 모든 설정 정보가 디스크 자체에 저장된다는 점으로, 운영체제가 망가져도 새 시스템에 디스크를 옮겨 'zfs import' 명령만 실행하면 그대로 복구된다. TrueNAS가 제공하는 다양한 부가 기능이 필요 없는 사용자에게 적합한 경량 대안이다.

본문 기반 요약
원문 보기 HN 토론

전체 번역

최소 ZFS NAS 구축 방법: Synology, QNAP, TrueNAS 없이도 가능

게시일: 2024-08-23
Oracle의 ZFS 시스템

기본적인 NAS가 필요하고 GUI 기능이 중요하지 않다면, ZFS 데이터셋을 설정하고 Samba를 통해 네트워크로 공유하는 것은 놀라울 정도로 간단합니다.

범위

범위 및 요구사항

| 항목 | 내용 |
|------|------|
| RAID 레벨 | RAIDZ1 (디스크 1개 중복) |
| 운영체제 | Debian 12 Bookworm |
| 암호화 | 없음 |
| ZFS 구현 | OpenZFS, zfs-2.1.1 |
| CPU | 4코어, Xeon 서버 CPU (저렴하게 구매 가능) |
| RAM | ECC RDIMM RAM 16GB |
| 스토리지 | 4x4TB NVMe SSD |
| 백업 | 다루지 않음, ZFS Backup Scheduler 사용 |
| 필요 기술 | Linux 기본 숙련도 |
| 난이도 | 초급/쉬움 |

이 글은 미래의 나를 위해 기록하는 것이니, 필요에 따라 자유롭게 활용하세요.

TrueNAS의 문제점

TrueNAS는 모든 기능을 갖춘, 소위 엔터프라이즈급 소프트웨어 제품군입니다. 설정이 간단할 수도 있겠지만(직접 해본 적은 없습니다), 저는 TrueNAS가 제공하는 여러 부가 기능들이 전혀 필요하지 않습니다. 이는 TrueNAS 자체에 문제가 있다기보다, 제가 필요로 하는 것과 제공되는 기능 사이의 불일치일 뿐입니다. 또한, 모든 것을 알고 있는 시스템을 사용하고 또 다른 시스템에 의존하지 않아도 된다는 점도 중요한 가치입니다.

어디에도 설명되지 않은 ZFS의 최고 기능

ZFS 파일시스템은 자체 완결적(self-contained)입니다. 만약 OS가 갑자기 망가져도, 모든 디스크를 다른 머신으로 옮기거나 새 OS를 설치한 후 zfs를 설치하고 zfs import를 실행하기만 하면 데이터를 되찾을 수 있습니다. 이러한 자유로움은 과소평가되어 있고 잘 이해되지도 않았습니다. 또한 어디에도 설명되어 있지 않습니다.

강조할 가치가 있습니다: ZFS에 관한 모든 설정과 세부 정보는 디스크 자체에 저장됩니다. 6개의 디스크로 RAIDZ2(Raid 6)를 설정했다면, 이들은 자체 완결적입니다. 이 디스크들을 zfs 도구가 설치된 새 머신으로 옮기고 zfs import만 실행하면 됩니다. 그러면 RAIDZ2로 인식됩니다. 호스트 OS나 머신 등에 무슨 일이 생기더라도, 디스크만 손상되지 않았다면 데이터는 안전하다는 놀라운 기능입니다.

1단계: 디스크 찾기 및 정리

Linux 머신에서 lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE 명령어로 모든 디스크를 확인합니다.

[root@sys ~]# lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE
TRAN   NAME     TYPE MODEL                        SERIAL           SIZE
sda      disk Virtual disk                                   40G
nvme   nvme5n1  disk Samsung SSD 990 PRO 4TB      XXXXXXXXXXXXXXX  3.6T
nvme   nvme2n1  disk Samsung SSD 990 PRO 4TB      XXXXXXXXXXXXXXX  3.6T
nvme   nvme6n1  disk Samsung SSD 990 PRO 4TB      XXXXXXXXXXXXXXX  3.6T
nvme   nvme3n1  disk Samsung SSD 990 PRO 4TB      XXXXXXXXXXXXXXX  3.6T

이들은 삼성의 새 NVMe 드라이브이므로 완전히 할당되지 않은 상태여야 합니다. 디스크는 ID에도 매핑되어 있으며, ls -lh /dev/disk/by-id를 실행하면 확인할 수 있습니다:

[root@sys ~]# ls -lh /dev/disk/by-id
total 0
lrwxrwxrwx. 1 root root 10 May 10 09:34 dm-name-rhel-root -> ../../dm-0
lrwxrwxrwx. 1 root root 10 May 10 09:34 dm-name-rhel-swap -> ../../dm-1
lrwxrwxrwx. 1 root root 10 May 10 09:34 lvm-pv-uuid-DGBpev-Na0C-tY20-YY6E-tpL3-epNA-8Ts3Y0 -> ../../sda3
lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme2n1
lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme5n1
lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme3n1
lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme6n1

이들은 /dev/에 있는 디스크 이름에 심볼릭 링크되어 있습니다. /etc/zfs/vdev_id.conf 파일을 생성하여 이 ID에 별칭(alias)을 매핑할 수 있습니다:

[root@sys ~]# vim /etc/zfs/vdev_id.conf
# vdev_id.conf 파일에 다음 줄을 추가합니다
alias nvme0 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme1 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme2 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme3 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX

udevadm trigger를 실행하여 별칭을 적용합니다(또는 머신을 재부팅해도 됩니다). 별칭이 제대로 매핑되었는지 확인할 수 있습니다.