본문 바로가기
IT/Proxmox

[Proxmox] 스토리지 관리 완벽 가이드: ZFS, LVM, NFS, iSCSI 비교 및 최적화

by 수누다 2026. 5. 17.

Proxmox 스토리지, 처음엔 저도 뭘 써야 할지 몰랐어요

Proxmox VE를 처음 설치하고 VM(가상 머신)을 만들려는 순간, 스토리지 선택 화면에서 멈춰본 경험 있으신가요? ZFS, LVM, NFS, iSCSI... 이름만 봐도 머리가 살짝 아파오는 그 느낌. 저도 딱 그랬거든요. 처음 홈랩에 Proxmox를 올렸을 때, 그냥 기본값인 LVM으로 쭉 써왔는데 어느 날 VM 디스크가 꽉 차는 사고가 났고, 그때부터 스토리지 구조를 제대로 파고들기 시작했습니다.

13년 넘게 인프라를 다루면서 느낀 건데, 스토리지 선택은 처음에 잘 해야 나중에 마이그레이션 삽질을 안 한다는 거예요. 이 글에서는 Proxmox 스토리지의 핵심 옵션인 ZFS, LVM, NFS, iSCSI를 실제 사용 경험을 바탕으로 비교해드리고, 각 상황에 맞는 최적화 팁까지 정리해보겠습니다.

▲ Proxmox VE의 스토리지 아키텍처 개요. 각 스토리지 타입이 VM/CT와 어떻게 연결되는지 한눈에 볼 수 있습니다.

Proxmox 스토리지 기본 개념 이해하기

본격적인 비교 전에 Proxmox 스토리지가 어떻게 동작하는지 간단히 짚고 넘어갈게요. 쉽게 말해서, Proxmox는 스토리지를 "어디에 VM 디스크 이미지를 저장할 것인가"의 관점으로 관리합니다.

스토리지 타입 분류

Proxmox의 스토리지는 크게 두 가지 방식으로 나뉩니다:

  • 로컬 스토리지 (Local Storage): 해당 Proxmox 노드에 직접 연결된 디스크. ZFS, LVM, Directory 등이 여기에 해당합니다
  • 공유 스토리지 (Shared Storage): 여러 Proxmox 노드가 동시에 접근 가능한 스토리지. NFS, iSCSI, Ceph 등이 여기에 해당하며, 클러스터 환경에서 라이브 마이그레이션(Live Migration)을 하려면 필수입니다

이 차이가 왜 중요하냐면, 단일 노드 홈랩이냐 다중 노드 클러스터냐에 따라 선택지가 확 달라지거든요.

ZFS (Z File System): 데이터 무결성의 끝판왕

ZFS가 뭔가요?

ZFS는 원래 Sun Microsystems에서 개발한 파일 시스템인데, 지금은 OpenZFS 프로젝트를 통해 Linux에서도 쓸 수 있어요. Proxmox는 ZFS를 네이티브로 지원하는 몇 안 되는 하이퍼바이저 중 하나고, 이게 Proxmox를 선택하는 이유 중 하나이기도 합니다.

ZFS의 핵심 특징을 정리하면:

  • Copy-on-Write (CoW, 쓰기 시 복사): 데이터를 덮어쓰지 않고 새 위치에 씁니다. 덕분에 데이터 손상 위험이 확 줄어요
  • 스냅샷 (Snapshot): 거의 순간적으로 스냅샷을 생성할 수 있고, 공간도 효율적으로 씁니다
  • RAID-Z: 소프트웨어 RAID를 ZFS 레벨에서 처리. RAID-Z1(패리티 1), RAID-Z2(패리티 2) 등 선택 가능합니다
  • 데이터 체크섬 (Checksum): 모든 데이터 블록에 체크섬을 달아서 조용한 데이터 손상(Silent Corruption)을 감지하고 자동 복구합니다
  • ARC (Adaptive Replacement Cache): 메모리를 캐시로 적극 활용해서 읽기 성능을 높입니다

Proxmox에서 ZFS 설정하기

Proxmox 설치 시 ZFS를 선택하거나, 설치 후에도 추가할 수 있어요. 설치 후 추가하는 방법입니다:

# ZFS 풀 생성 (미러 구성, 2개 디스크)
zpool create -f rpool mirror /dev/sdb /dev/sdc

# ZFS 풀 상태 확인
zpool status

# Proxmox에서 ZFS 스토리지 추가 (Web UI 대신 CLI로)
pvesm add zfspool local-zfs --pool rpool --content images,rootdir
# ZFS 성능 튜닝 - ARC 최대 크기 설정 (예: 8GB)
echo 'options zfs zfs_arc_max=8589934592' > /etc/modprobe.d/zfs.conf
update-initramfs -u

# 현재 ARC 사용량 확인
cat /proc/spl/kstat/zfs/arcstats | grep -E '^(size|c_max|hits|misses)'

ZFS 사용 시 주의사항

⚠️ ZFS는 메모리를 많이 먹습니다. 일반적으로 스토리지 1TB당 1GB RAM이라는 가이드라인이 있는데, 홈랩 환경에서는 최소 8GB 이상 RAM을 권장해요. 저도 처음에 RAM 4GB짜리 서버에 ZFS 올렸다가 OOM(Out of Memory) 킬러가 작동하는 참사를 겪었습니다 ㅎㅎ.

⚠️ 절대로 ZFS 풀에 하드웨어 RAID 컨트롤러를 쓰지 마세요. ZFS는 디스크를 직접 제어해야 해서, HBA(Host Bus Adapter) 모드나 IT 모드의 컨트롤러를 써야 합니다. 하드웨어 RAID 위에 ZFS를 올리면 ZFS의 자가 복구 기능이 제대로 동작하지 않아요.

LVM (Logical Volume Manager): 검증된 클래식

LVM이 뭔가요?

LVM(논리 볼륨 관리자)은 Linux에서 오랫동안 사용되어 온 스토리지 관리 방식이에요. 물리 디스크를 추상화해서 유연하게 관리할 수 있게 해줍니다. Proxmox 기본 설치 옵션이기도 하고요.

LVM의 구조는 이렇습니다:

  • PV (Physical Volume, 물리 볼륨): 실제 디스크나 파티션
  • VG (Volume Group, 볼륨 그룹): PV를 묶은 논리적 풀
  • LV (Logical Volume, 논리 볼륨): VG에서 할당받은 실제 사용 공간

Proxmox에서는 LVM-Thin(씬 프로비저닝)을 많이 쓰는데, 이게 핵심이에요. 씬 프로비저닝이란 VM에게 100GB를 할당했어도 실제로 데이터를 쓰는 만큼만 디스크를 사용하는 방식입니다. 공간 효율이 훨씬 좋더라고요.

Proxmox에서 LVM-Thin 설정하기

# 새 디스크를 PV로 초기화
pvcreate /dev/sdb

# VG 생성
vgcreate vg-data /dev/sdb

# LVM-Thin 풀 생성 (VG 용량의 95% 할당)
lvcreate -l 95%FREE --thinpool thin-pool vg-data

# Proxmox에 LVM-Thin 스토리지 추가
pvesm add lvmthin local-lvm-thin --vgname vg-data --thinpool thin-pool --content images,rootdir

# 상태 확인
lvs -a --units g

LVM vs LVM-Thin 차이

항목 LVM (Thick) LVM-Thin
공간 할당 즉시 전체 할당 사용한 만큼만 할당
스냅샷 지원 (공간 소모 큼) 효율적 스냅샷 지원
오버프로비저닝 불가 가능 (주의 필요)
성능 안정적 약간의 오버헤드 있음
복잡도 낮음 중간

⚠️ LVM-Thin에서 오버프로비저닝할 때는 실제 사용량을 꼭 모니터링해야 해요. 풀이 꽉 차면 VM들이 I/O 오류를 뱉으면서 난리가 납니다. 저도 이걸 한 번 경험하고 나서 Grafana로 LVM-Thin 사용량 알람을 걸어뒀거든요.

▲ Proxmox Web UI에서 LVM-Thin 스토리지 설정 화면. 씬 풀 사용량을 실시간으로 확인할 수 있습니다.

NFS (Network File System): 공유 스토리지의 대명사

NFS가 뭔가요?

NFS(네트워크 파일 시스템)는 네트워크를 통해 파일 시스템을 공유하는 프로토콜이에요. 쉽게 말해서, NAS나 별도 서버의 디렉토리를 Proxmox에 마운트해서 스토리지로 쓰는 방식입니다.

NFS의 장점:

  • 설정이 비교적 간단해요
  • 여러 Proxmox 노드가 동시에 접근 가능 → 라이브 마이그레이션 지원
  • 기존 NAS(Synology, QNAP 등)와 쉽게 연동됩니다
  • ISO 이미지, 백업 파일 저장에 적합합니다

NFS의 단점:

  • 네트워크 의존성이 높음 (네트워크 장애 = 스토리지 장애)
  • 레이턴시(지연시간)가 로컬 스토리지보다 높아요
  • 고성능 VM 디스크용으로는 부적합한 경우가 많습니다

Proxmox에서 NFS 설정하기

# NFS 클라이언트 패키지 확인
apt install nfs-common

# NFS 마운트 테스트
mount -t nfs 192.168.1.100:/volume1/proxmox /mnt/test-nfs

# Proxmox Web UI 대신 CLI로 NFS 스토리지 추가
pvesm add nfs nas-storage \
  --server 192.168.1.100 \
  --export /volume1/proxmox \
  --content iso,backup,images \
  --options vers=4.1

# 추가된 스토리지 확인
pvesm status

💡 : NFS 버전은 가능하면 NFSv4.1을 쓰세요. NFSv3보다 안정성과 성능이 향상됐고, 특히 Proxmox 클러스터 환경에서 더 안정적으로 동작합니다.

NFS 성능 최적화 옵션

# /etc/fstab에 NFS 마운트 옵션 최적화
192.168.1.100:/volume1/proxmox /mnt/nas-proxmox nfs \
  vers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 0 0

# rsize/wsize: 읽기/쓰기 블록 크기 (1MB)
# hard: 서버 응답 없으면 계속 재시도 (VM 안전을 위해 hard 권장)
# timeo: 타임아웃 (1/10초 단위, 600 = 60초)

iSCSI: 블록 스토리지를 네트워크로

iSCSI가 뭔가요?

iSCSI(아이스카시)는 SCSI 명령을 IP 네트워크를 통해 전달하는 프로토콜이에요. NFS가 "파일" 단위로 공유한다면, iSCSI는 "블록" 단위로 공유합니다. VM 입장에서 보면 마치 로컬 디스크가 연결된 것처럼 보여요.

iSCSI 용어 정리:

  • Target (타깃): 스토리지를 제공하는 서버 (NAS, SAN 등)
  • Initiator (이니시에이터): 스토리지를 사용하는 클라이언트 (Proxmox 노드)
  • IQN (iSCSI Qualified Name): iSCSI 장치를 식별하는 고유 이름
  • LUN (Logical Unit Number): Target에서 제공하는 스토리지 단위

Proxmox에서 iSCSI 설정하기

# iSCSI initiator 패키지 설치
apt install open-iscsi

# iSCSI Target 검색 (NAS IP로)
iscsiadm -m discovery -t sendtargets -p 192.168.1.100

# 검색된 Target에 로그인
iscsiadm -m node --login

# 연결된 iSCSI 세션 확인
iscsiadm -m session

# Proxmox에 iSCSI 스토리지 추가
pvesm add iscsi san-storage \
  --portal 192.168.1.100 \
  --target iqn.2023-01.com.example:storage \
  --content none

# iSCSI 위에 LVM-Thin을 올려서 사용하는 게 일반적
pvesm add lvmthin san-lvm-thin \
  --vgname san-vg \
  --thinpool san-thin-pool \
  --content images

여기서 중요한 포인트! iSCSI는 단독으로는 Proxmox에서 VM 디스크로 직접 쓰기 어렵고, 보통 iSCSI로 블록 디바이스를 가져온 다음 그 위에 LVM이나 LVM-Thin을 올려서 사용해요. 저도 처음엔 이게 왜 이렇게 복잡한가 싶었는데, 블록 스토리지의 특성상 그렇게 써야 제대로 성능이 나오더라고요.

4가지 스토리지 종합 비교

항목 ZFS LVM-Thin NFS iSCSI+LVM
유형 로컬 로컬 공유 (파일) 공유 (블록)
스냅샷 ✅ 매우 효율적 ✅ 효율적 ⚠️ 제한적 ✅ LVM 스냅샷
라이브 마이그레이션 ❌ 단일 노드 ❌ 단일 노드 ✅ 가능 ✅ 가능
데이터 무결성 ✅ 최고 수준 ⚠️ 기본 수준 ⚠️ 네트워크 의존 ⚠️ 중간 수준
성능 ✅ 높음 ✅ 높음 ⚠️ 네트워크 속도 의존 ✅ 높음
설정 난이도 중간 낮음 낮음 높음
RAM 요구량 높음 낮음 낮음 낮음
추천 용도 단일 노드, 데이터 안전성 중시 단일 노드, 일반 VM ISO/백업, 소규모 클러스터 엔터프라이즈 클러스터

▲ Proxmox 스토리지 4종 비교 인포그래픽. 상황에 따라 적합한 스토리지 타입이 다릅니다.

실제 구성 예시 및 최적화 팁

홈랩 단일 노드 추천 구성

제가 실제로 홈랩에서 쓰는 구성을 공유할게요:

# /etc/pve/storage.cfg 예시 (실제 파일 위치)

# 기본 로컬 디렉토리 (ISO, 백업용)
dir: local
        path /var/lib/pve/local
        content iso,backup,snippets

# ZFS 풀 (VM 디스크 메인)
zfspool: local-zfs
        pool rpool/data
        content images,rootdir
        mountpoint /rpool/data

# NFS (NAS 백업 및 ISO 라이브러리)
nfs: nas-backup
        export /volume1/proxmox-backup
        path /mnt/pve/nas-backup
        server 192.168.1.100
        content backup,iso
        options vers=4.1

ZFS 성능 최적화 핵심 설정

# ZFS 레코드 크기 조정 (VM 디스크용 - 16K~64K 권장)
zfs set recordsize=64K rpool/data

# VM 특성에 따른 recordsize 조정
# 데이터베이스 VM: 8K~16K
# 일반 VM: 64K
# 파일 서버 VM: 128K
zfs set recordsize=16K rpool/data/vm-100-disk-0

# 동기화 쓰기 설정 (성능과 안전성 트레이드오프)
# sync=always: 가장 안전, 가장 느림
# sync=standard: 기본값 (권장)
# sync=disabled: 가장 빠름, 전원 손실시 데이터 손상 위험
zfs set sync=standard rpool/data

# 압축 활성화 (CPU 사용 약간 증가, 용량 절약)
zfs set compression=lz4 rpool/data

# 중복 제거 (dedup) - RAM 많이 필요, 신중하게 결정
# 홈랩에선 웬만하면 끄는 걸 추천
zfs set dedup=off rpool/data

# ZFS 상태 및 통계 확인
zpool status -v
zfs list -t all
zpool iostat -v 1

iSCSI 멀티패스 (Multipath) 설정 — 고가용성 환경

# multipath-tools 설치
apt install multipath-tools

# /etc/multipath.conf 기본 설정
cat > /etc/multipath.conf << 'EOF'
defaults {
    user_friendly_names yes
    find_multipaths yes
}
blacklist {
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^hd[a-z]"
}
EOF

systemctl enable multipathd
systemctl start multipathd
multipath -ll  # 멀티패스 장치 확인

트러블슈팅: 제가 겪은 문제들

문제 1: ZFS 풀이 DEGRADED 상태

# 증상 확인
zpool status
# 출력에서 state: DEGRADED 확인

# 디스크 교체 후 복구
zpool replace rpool /dev/old-disk /dev/new-disk

# 리실버링(데이터 복구) 진행 상황 확인
zpool status -v
# 완료까지 기다린 후 state: ONLINE 확인

문제 2: NFS 마운트 후 VM 시작 느림

이건 NFS 타임아웃 설정 문제였어요. Proxmox 노드 재시작 시 NFS가 마운트되기 전에 VM이 시작하려다 보니 생기는 문제였습니다.

# /etc/systemd/system/pve-storage-nas-backup.service.d/ 디렉토리 생성
mkdir -p /etc/systemd/system/pve-storage-nas-backup.service.d/

# NFS 마운트 의존성 추가
cat > /etc/systemd/system/pve-storage-nas-backup.service.d/override.conf << 'EOF'
[Unit]
After=network-online.target
Wants=network-online.target
EOF

systemctl daemon-reload

문제 3: LVM-Thin 풀 오버커밋 위험

# LVM-Thin 사용량 모니터링 스크립트
cat > /usr/local/bin/check-thin-usage.sh << 'EOF'
#!/bin/bash
THRESHOLD=80
USAGE=$(lvs --noheadings -o data_percent vg-data/thin-pool 2>/dev/null | tr -d ' ')
USAGE_INT=${USAGE%.*}

if [ "$USAGE_INT" -gt "$THRESHOLD" ]; then
    echo "WARNING: LVM-Thin pool usage is ${USAGE}%"
    # 여기에 알림 로직 추가 (메일, Slack 등)
fi
EOF
chmod +x /usr/local/bin/check-thin-usage.sh

# cron에 등록 (5분마다 체크)
echo '*/5 * * * * root /usr/local/bin/check-thin-usage.sh' >> /etc/cron.d/thin-monitor

▲ Proxmox 스토리지 모니터링 대시보드. ZFS 풀 상태, LVM-Thin 사용량, NFS 연결 상태를 한 화면에서 확인하는 구성 예시입니다.

상황별 Proxmox 스토리지 선택 가이드

어떤 걸 골라야 하나요?

결국 "뭐가 제일 좋냐"는 질문에 정답은 없어요. 상황에 따라 다르거든요. 제 추천을 정리하면:

  • 🏠 홈랩, 단일 노드, 데이터 안전성 중시ZFS. RAM이 충분하다면 무조건 ZFS 먼저 고려하세요
  • 💻 홈랩, 단일 노드, 심플하게 시작LVM-Thin. 복잡함 없이 바로 쓸 수 있어요
  • 🗄️ ISO/백업 파일 공유, 기존 NAS 연동NFS. 설정 쉽고 NAS랑 궁합 최고
  • 🏢 다중 노드 클러스터, 라이브 마이그레이션 필요iSCSI+LVM 또는 Ceph. Ceph는 다음 글에서 따로 다룰 예정이에요

마무리: 스토리지는 처음 선택이 반입니다

Proxmox 스토리지 설정, 생각보다 선택지가 많죠? 저도 처음엔 그냥 기본값으로 쭉 쓰다가 나중에 마이그레이션하느라 고생 많이 했어요. 지금 돌아보면 처음부터 ZFS로 시작했으면 훨씬 편했을 텐데 싶더라고요.

정리하면:

  • ZFS: 데이터 무결성, 효율적 스냅샷, 단일 노드 최강자. RAM은 넉넉하게 준비하세요
  • LVM-Thin: 검증된 안정성, 낮은 진입장벽, 씬 프로비저닝으로 공간 효율적입니다
  • NFS: 공유 스토리지 입문, NAS 연동, ISO/백업 저장에 딱입니다
  • iSCSI: 블록 레벨 공유, 클러스터 환경, 설정 복잡하지만 성능 좋습니다

다음 글에서는 Proxmox 클러스터 환경에서 Ceph를 활용한 분산 스토리지 구성을 다뤄볼 예정입니다. 여러 노드에 걸쳐 데이터를 분산 저장하고 고가용성을 확보하는 방법인데, 홈랩에서도 충분히 구성 가능하더라고요. 혹시 궁금한 점이나 다른 스토리지 구성 경험 있으시면 댓글로 공유해 주세요! 🎉