Skip to main content

Proxmox VE Storage Configuration

가상화에서 스토리지는 성능의 핵심 — 로컬부터 분산까지


📌 이 글의 목적

Proxmox는 스토리지 옵션이 매우 다양함. 선택지가 많다는 것은 "뭘 써야 하는가?" 라는 질문이 따라온다는 뜻임.

이 글을 읽고 나면:

  • Proxmox 스토리지 아키텍처와 Content Type을 이해할 수 있음
  • 각 스토리지 백엔드(LVM, ZFS, NFS, iSCSI, Ceph)의 특성과 설정 방법을 알 수 있음
  • 환경별로 어떤 스토리지를 선택해야 하는지 판단할 수 있음

1. Proxmox 스토리지 아키텍처

1.1 스토리지 모델

Proxmox는 Storage Plugin 구조로 다양한 백엔드를 지원함. 모든 스토리지는 동일한 인터페이스로 관리됨.

1.2 Content Type

스토리지마다 저장할 수 있는 콘텐츠 타입이 다름:

Content Type코드설명
VM Disk ImageimagesVM의 가상 디스크
CT VolumerootdirLXC 컨테이너의 루트 파일시스템
ISO ImageisoOS 설치 ISO
CT TemplatevztmplLXC 컨테이너 템플릿
Backupbackupvzdump 백업 파일
SnippetsnippetsCloud-Init, Hook 스크립트 등

스토리지 타입별 지원 Content:

스토리지imagesrootdirisovztmplbackupsnippets
Directory
LVM
LVM-Thin
ZFS
NFS
CIFS/SMB
iSCSI
Ceph RBD
CephFS
PBS

💡 이 표의 의미: LVM/ZFS/Ceph RBD는 VM 디스크 전용임. ISO나 백업을 저장하려면 Directory, NFS, 또는 CephFS가 필요함. 기본 설치에서 local(Directory)과 local-lvm(LVM-Thin)이 함께 존재하는 이유임.

1.3 이미지 포맷

| 포맷 | 설명 | 스냅샷 | Thin | 스토리지 | |------|------|:------:|:----:---------| | raw | 생(raw) 디스크 이미지 | ❌ | ❌ | Directory, NFS | | qcow2 | QEMU Copy-On-Write | ✅ | ✅ | Directory, NFS | | vmdk | VMware 호환 | ❌ | ❌ | Directory (import용) | | — (block) | 블록 디바이스 직접 사용 | 백엔드 의존 | ✅ | LVM, ZFS, RBD, iSCSI |

💡 qcow2 vs raw: qcow2는 스냅샷, thin provisioning, 압축을 지원하지만 약간의 오버헤드가 있음. raw는 성능이 최고지만 기능이 없음. LVM/ZFS/Ceph를 쓰면 블록 레벨에서 스냅샷과 thin provisioning을 지원하므로 qcow2가 필요 없음.


2. 로컬 스토리지

2.1 Directory (dir)

가장 단순한 스토리지. 파일시스템 디렉토리에 이미지 파일을 저장함.

# 기본 설치 시 local 스토리지
pvesm status

# 설정 확인
cat /etc/pve/storage.cfg

# 디렉토리 구조
ls /var/lib/vz/
# dump/ images/ private/ snippets/ template/

추가 Directory 스토리지 등록:

mkdir -p /mnt/data/vz
pvesm add dir data-storage --path /mnt/data/vz --content images,iso,backup,vztmpl,snippets
pvesm status

2.2 LVM

Linux Logical Volume Manager. 블록 레벨 스토리지.

기본 설치 후 LVM 구조:

# VG 확인
vgs

# LV 확인
lvs
# LV VG Attr LSize Pool
# data pve twi-a-t--- 800.00g
# root pve -wi-ao---- 100.00g
# swap pve -wi-ao---- 8.00g

2.3 LVM-Thin

LVM-Thin Provisioning — 실제 사용한 만큼만 공간을 할당하는 LVM.

항목Thick LVMLVM-Thin
공간 할당즉시 전체 할당사용 시 할당
오버프로비저닝
스냅샷
성능약간 좋음약간 오버헤드
기본 설치✅ (local-lvm)
# LVM-Thin pool 상태 확인
lvs -o+lv_size,data_percent,metadata_percent pve/data

# VM 디스크 확인
lvs | grep vm-

⚠️ LVM-Thin 오버프로비저닝 주의: 100GB thin pool에 VM 10개 × 50GB = 500GB를 할당할 수 있지만, 실제 사용량이 100GB를 초과하면 pool이 full되어 모든 VM이 멈춤. 반드시 사용량을 모니터링하고 알림을 설정해야 함.

2.4 ZFS

Proxmox에서 네이티브로 지원하는 가장 강력한 로컬 스토리지.

ZFS 스토리지 추가:

# 사용 가능한 디스크 확인
lsblk

# 새 ZFS pool 생성 (미러 예시)
zpool create -f -o ashift=12 datapool mirror /dev/sdb /dev/sdc

# Proxmox 스토리지로 등록
pvesm add zfspool zfs-data -pool datapool --content images,rootdir

# pool 상태 확인
zpool status datapool
zpool list datapool

ZFS 핵심 설정:

# 압축 활성화 (강력 추천)
zfs set compression=lz4 datapool

# 현재 압축률 확인
zfs get compressratio datapool

# ARC 최대 크기 제한 (RAM의 50% 예시)
echo "options zfs zfs_arc_max=8589934592" > /etc/modprobe.d/zfs.conf

# Scrub (데이터 무결성 검사) — 주기적으로 실행
zpool scrub datapool

ZFS 스냅샷:

# 스냅샷 생성
zfs snapshot datapool/vm-100-disk-0@before-update

# 스냅샷 목록
zfs list -t snapshot

# 롤백
zfs rollback datapool/vm-100-disk-0@before-update

# 스냅샷 삭제
zfs destroy datapool/vm-100-disk-0@before-update

ZFS 메모리 가이드라인:

ZFS 기능최소 RAM권장 RAM비고
기본 사용8GB16GBARC 캐시를 위해
+ 중복 제거32GB+64GB+❌ 대부분 비추천
+ Ceph 연동32GB+64GB+ZFS + Ceph 동시 사용 시
경험칙ZFS pool 1TB당 1~2GB RAM

💡 ZFS 중복 제거(dedup)는 거의 항상 비추천임. RAM 소비가 너무 크고, 성능이 떨어짐. 대신 압축(compression)을 사용하면 비슷한 효과를 훨씬 적은 비용으로 얻을 수 있음.

2.5 LVM-Thin vs ZFS 비교

항목LVM-ThinZFS
Thin Provisioning
스냅샷✅ (더 빠르고 유연)
압축✅ (LZ4, ZSTD)
중복 제거✅ (비추천)
데이터 무결성✅ (체크섬)
자가 복구✅ (RAID + 체크섬)
소프트웨어 RAIDmdraid 필요내장 (mirror, raidz)
RAM 요구적음많음 (최소 8GB)
복잡도낮음중간
기본 설치설치 시 선택

결론: RAM 8GB 이상이면 ZFS 추천. RAM 부족하면 LVM-Thin.


3. 네트워크 스토리지

3.1 NFS

NAS에서 가장 많이 쓰는 프로토콜. 파일 레벨 공유 스토리지.

NFS 스토리지 추가:

pvesm add nfs nfs-storage \
--server 10.10.10.50 \
--export /export/pve-data \
--content images,iso,backup,vztmpl,snippets \
--options vers=3

pvesm status

NFS 성능 튜닝:

항목권장값설명
NFS 버전v3 또는 v4.2v3: 호환성, v4.2: 보안/성능
MTU9000 (점보 프레임)스토리지 네트워크 전체
rsize/wsize1048576NFS 읽기/쓰기 블록 크기
async vs syncsync (안전)프로덕션은 반드시 sync

⚠️ NFS와 VM 디스크 성능: NFS에 VM 디스크를 저장하면 네트워크 지연이 디스크 I/O에 직접 영향을 줌. DB처럼 I/O가 많은 워크로드는 로컬 스토리지나 블록 스토리지(iSCSI, Ceph RBD)가 나음.

3.2 iSCSI

SAN에서 사용하는 블록 레벨 프로토콜. NFS보다 I/O 성능이 좋음.

iSCSI 스토리지 추가:

# iSCSI Target 등록
pvesm add iscsi iscsi-storage \
--portal 10.10.10.60 \
--target iqn.2026-01.com.lab:storage.lun1 \
--content images

# iSCSI + LVM 조합
iscsiadm -m discovery -t sendtargets -p 10.10.10.60
iscsiadm -m node --login

pvcreate /dev/sdc
vgcreate vg-iscsi /dev/sdc

pvesm add lvm iscsi-lvm --vgname vg-iscsi --content images,rootdir

NFS vs iSCSI:

항목NFSiSCSI
프로토콜 레벨파일블록
VM 디스크 성능보통좋음
공유 접근다중 노드 동시 R/W기본적으로 단일 노드
ISO/템플릿/백업 저장
설정 복잡도낮음중간

3.3 CIFS/SMB

Windows 파일 공유. NAS나 Windows Server에서 쓸 때.

pvesm add cifs smb-backup \
--server 10.10.10.55 \
--share pve-backup \
--content backup,iso,vztmpl \
--username pveuser \
--password

NFS 사용 가능한 환경이면 NFS가 성능이 더 좋음. CIFS/SMB는 Windows NAS밖에 없을 때 사용.


4. Ceph (분산 스토리지)

4.1 Ceph란

Ceph는 소프트웨어 정의 분산 스토리지임. Proxmox 노드의 로컬 디스크를 모아서 하나의 공유 스토리지 풀로 만듦.

Ceph 핵심 컴포넌트:

컴포넌트역할최소 수량
MON (Monitor)클러스터 상태 관리, 합의3 (홀수)
OSD (Object Storage Daemon)실제 데이터 저장, 복제3+
MGR (Manager)모니터링, 대시보드2 (Active-Standby)
MDS (Metadata Server)CephFS 메타데이터CephFS 사용 시

4.2 왜 Ceph인가

방식장점단점
로컬 스토리지성능 최고공유 불가, 마이그레이션 느림
NFS공유 쉬움단일 장애점, NFS 서버 의존
iSCSI블록 성능SAN 장비 필요, 비용
Ceph공유, HA, 자가 복구, 확장복잡도, 최소 3노드, 네트워크 대역폭

Ceph를 선택해야 하는 경우:

  • 별도 NAS/SAN 없이 공유 스토리지가 필요한 경우
  • 스토리지 단일 장애점을 없애고 싶은 경우
  • 노드를 추가하면서 스토리지도 함께 확장하고 싶은 경우
  • Live Migration을 자유롭게 쓰고 싶은 경우

4.3 Ceph 설치 (Proxmox 내장)

Proxmox는 Ceph를 웹 UI에서 설치하고 관리할 수 있음.

# CLI에서 Ceph 설치
pveceph install --repository no-subscription

# 초기화
pveceph init --network 10.10.10.0/24

# MON 생성 (각 노드에서)
pveceph mon create

# MGR 생성
pveceph mgr create

# OSD 생성 (빈 디스크 필요)
pveceph osd create /dev/sdb
pveceph osd create /dev/sdc

# Pool 생성
pveceph pool create ceph-vm --pg_autoscale_mode on

# Proxmox 스토리지로 등록
pvesm add rbd ceph-rbd --pool ceph-vm --content images,rootdir

# 상태 확인
ceph status
ceph osd tree
ceph df

4.4 Ceph 네트워크 설계

Ceph는 2개의 네트워크를 분리하는 것이 권장됨:

네트워크용도대역폭분리 이유
PublicMON 통신, 클라이언트 I/O10GbE 권장VM이 사용하는 I/O
ClusterOSD 복제, 복구, 리밸런싱10GbE 권장복구 시 대량 트래픽 발생

⚠️ Ceph는 네트워크 대역폭에 매우 민감함. 1GbE에서도 동작하지만, OSD 장애 시 복구 트래픽이 서비스에 영향을 줄 수 있음. 프로덕션에서는 10GbE 이상을 강력히 권장.

4.5 CephFS

Ceph 위에 POSIX 호환 파일시스템을 올리는 것.

# MDS 생성 (CephFS 필수)
pveceph mds create

# CephFS 생성
pveceph fs create --pg_num 64 --add-storage

# 스토리지 등록 확인
pvesm status | grep cephfs

CephFS 용도:

용도이유
ISO/템플릿 공유모든 노드에서 동일한 ISO 접근
백업 저장분산 저장으로 안전
공유 디렉토리VM 간 공유 파일

5. Proxmox Backup Server (PBS)

5.1 PBS 개요

Proxmox Backup Server는 VM/CT 백업 전용 서버임.

PBS 주요 기능:

기능설명
증분 백업변경된 부분만 백업, 빠르고 효율적
중복 제거동일 데이터 한 번만 저장
클라이언트 암호화PVE에서 암호화 후 전송
무결성 검증주기적으로 백업 데이터 검증
원격 동기화PBS → 원격 PBS 복제

PBS 스토리지 등록:

pvesm add pbs pbs-backup \
--server 10.10.10.70 \
--datastore main \
--username backup@pbs \
--password \
--fingerprint <PBS서버_fingerprint> \
--content backup

6. 스토리지 선택 가이드

6.1 의사결정 플로우

6.2 환경별 추천

환경추천 스토리지이유
홈랩 (1노드, RAM ≤8GB)LVM-Thin기본 설치, 추가 설정 없음
홈랩 (1노드, RAM ≥16GB)ZFS Mirror스냅샷, 압축, 데이터 보호
홈랩 (3노드)ZFS 로컬 + NFS 공유성능 + ISO/백업 공유
소규모 프로덕션 (3노드)Ceph RBD + CephFSHA, 자가 복구, 공유
중규모 프로덕션Ceph + 10GbE확장성, 무중단
기존 SAN 보유iSCSI + LVM기존 투자 활용
기존 NAS 보유NFS (백업/ISO) + 로컬 (VM)용도별 분리

6.3 전체 비교표

항목DirLVM-ThinZFSNFSiSCSICeph RBD
VM 디스크 성능★★★★★★★★★★★★★★★★★★★★★
스냅샷qcow2qcow2
Thin Provisionqcow2qcow2
압축
데이터 무결성
공유 (다중 노드)⚠️
Live Migration
HA 지원
추가 HW 필요NASSAN❌ (10GbE 권장)
설정 복잡도낮음낮음중간낮음중간높음
ISO/백업 저장CephFS

7. 디스크 I/O 경로

7.1 VM(KVM)의 I/O 경로

VM에서 디스크 I/O가 발생하면 다음 경로를 따름.

각 단계의 성능 영향:

단계성능 영향최적화 포인트
게스트 드라이버VirtIO 사용 시 에뮬레이션 오버헤드 최소화IDE/SATA 대신 VirtIO-SCSI 사용
Virtqueue배치 I/O로 VM Exit 최소화기본 활성화됨
QEMU I/Oiothread 활성화 시 I/O가 메인 스레드에서 분리됨iothread=1 설정
스토리지 백엔드블록(LVM/Ceph) > 파일(NFS/dir) 성능용도에 맞는 백엔드 선택
물리 디스크NVMe > SSD > HDD캐시 티어(ZFS ARC, Ceph OSD) 활용

7.2 LXC의 I/O 경로

LXC 컨테이너는 호스트 커널을 공유하므로 QEMU 레이어가 없음.

  • QEMU 에뮬레이션, VirtIO, Virtqueue가 모두 없음
  • 호스트 파일시스템에 직접 접근하므로 네이티브에 가까운 I/O 성능
  • 이것이 LXC가 VM보다 I/O 성능이 좋은 근본적 이유

7.3 I/O 최적화 옵션

옵션설명설정
iothread디스크 I/O를 메인 QEMU 스레드에서 분리. I/O 많은 VM에 권장qm set 100 --scsi0 local-lvm:32,iothread=1
io_uringLinux 5.1+ 비동기 I/O 인터페이스. 기존 AIO 대비 성능 향상qm set 100 --scsi0 local-lvm:32,aio=io_uring
cache 모드write-back(성능) vs write-through(안정) vs none(직접)cache=none (ZFS/Ceph), cache=writeback (기타)
discardTRIM/UNMAP 전달. Thin Provisioning 시 공간 회수qm set 100 --scsi0 local-lvm:32,discard=on

캐시 모드 선택 기준:

스토리지권장 캐시이유
ZFSnoneZFS가 자체 ARC 캐시를 가지고 있어 이중 캐싱이 해로움
Ceph RBDnone 또는 writebackCeph도 자체 캐시 계층이 있음
LVM-Thinwriteback캐시 없으면 성능 저하
NFSnone 또는 writebackNFS 프로토콜이 캐시 처리

💡 VMware의 VAAI(vStorage API for Array Integration)와 대응하는 개념은 Linux의 SCSI UNMAP/TRIM 전달과 io_uring 기반의 비동기 I/O임. VAAI가 스토리지 어레이에 복사/제로화/잠금을 오프로드하는 것처럼, Linux는 커널 I/O 스택이 직접 어레이와 통신하여 유사한 효과를 얻음.


8. 스토리지 관리 명령어

7.1 pvesm (스토리지 매니저)

# 스토리지 목록
pvesm status

# 스토리지 상세
pvesm list <storage-id>

# 스토리지 추가
pvesm add <type> <storage-id> [options]

# 스토리지 제거
pvesm remove <storage-id>

# 설정 확인
cat /etc/pve/storage.cfg

# 사용하지 않는 디스크 확인
qm rescan --vmid 100

7.2 디스크 관리

# VM 디스크 이동 (스토리지 간)
qm move-disk 100 scsi0 zfs-data

# VM 디스크 크기 변경
qm resize 100 scsi0 +20G

# 사용하지 않는 디스크 정리
qm set 100 --delete unused0

# VM 디스크 import (외부 이미지)
qm importdisk 100 /path/to/disk.qcow2 local-lvm

9. 트러블슈팅

Q: LVM-Thin pool이 가득 참

# pool 사용량 확인
lvs -o+data_percent pve/data

# 긴급: VM 중지 후 불필요한 스냅샷 삭제
# 또는 VM 디스크를 다른 스토리지로 이동

Q: ZFS pool이 DEGRADED 상태

# 상태 확인
zpool status datapool

# 디스크 교체
zpool replace datapool /dev/old-disk /dev/new-disk

# Resilver 진행 확인
zpool status datapool | grep resilver

Q: NFS 마운트가 안 됨

# NFS 서버 연결 확인
showmount -e 10.10.10.50

# 수동 마운트 테스트
mount -t nfs 10.10.10.50:/export/pve-data /mnt/test

Q: Ceph OSD가 down

# 전체 상태
ceph status
ceph health detail

# OSD 상태
ceph osd tree

# OSD 재시작
systemctl restart ceph-osd@0

10. VMware 스토리지 비교

대응 구조

VMwareProxmox비고
VMFSLVM-Thin / ZFSVMFS와 같은 전용 클러스터 FS는 없음. LVM/ZFS가 각각의 방식으로 대체
vSANCeph둘 다 로컬 디스크 기반 분산 스토리지. vSAN은 유료, Ceph는 무료
NFS DatastoreNFS 스토리지동일 개념
iSCSI LUNiSCSI + LVM
VMDK (Thick/Thin)QCOW2 / RAW / zvolVMDK Thick Eager ≈ RAW, VMDK Thin ≈ QCOW2
Storage vMotionqm move-disk온라인 디스크 이동
VAAI (HW Offload)io_uring, TRIM/UNMAPVAAI는 스토리지 어레이 오프로드, Linux는 커널 I/O 스택이 직접 처리
SPBM (정책 기반)Storage Plugin + Content TypeVMware는 VM별 정책 적용, Proxmox는 스토리지별 특성으로 구분
Snapshot (delta disk)ZFS/LVM-Thin/Ceph 스냅샷VMware는 델타 디스크 체인, ZFS/Ceph는 CoW 기반

핵심 차이점

VMFS vs LVM/ZFS — VMware VMFS는 다수 ESXi 호스트가 동일 LUN에 동시 접근할 수 있는 클러스터 파일시스템임. Proxmox에는 이에 직접 대응하는 것이 없으며, 공유 스토리지가 필요하면 NFS, iSCSI, Ceph 등을 사용함.

vSAN vs Ceph — 둘 다 로컬 디스크를 모아 분산 스토리지를 만드는 개념이지만, 아키텍처가 다름. vSAN은 디스크 그룹(캐시+용량) 구조로 오브젝트 기반 저장을 하고, Ceph는 CRUSH Map 기반으로 OSD에 데이터를 분산함. vSAN은 VCF/VVF 번들에 포함된 유료 제품이고, Ceph는 완전히 무료임.

I/O 경로 — VMware는 VMkernel 내부의 SCSI 스택 + PSA(Pluggable Storage Architecture)로 I/O를 처리하고, VAAI로 스토리지 어레이에 작업을 오프로드함. Proxmox/KVM은 QEMU + VirtIO + Linux 블록 I/O 레이어를 거치며, io_uring과 iothread로 최적화함. 성능은 둘 다 네이티브에 근접하며 실질적 차이는 크지 않음.


정리

Proxmox 스토리지 선택의 핵심 원칙:

  1. VM 디스크와 파일(ISO/백업)은 분리함 — VM 디스크는 블록 스토리지(LVM-Thin/ZFS/Ceph RBD), 파일은 Directory/NFS/CephFS
  2. 로컬 스토리지가 성능이 가장 좋음 — 공유가 필요 없으면 로컬 우선
  3. 공유 스토리지는 Live Migration과 HA의 전제 조건임 — 클러스터를 구성할 거면 공유 스토리지 필수
  4. ZFS는 RAM이 충분하면 최고의 로컬 스토리지임 — 압축, 스냅샷, 무결성
  5. Ceph는 "NAS/SAN 없이 공유 스토리지"의 답임 — 단 최소 3노드, 10GbE 권장

다음 글

Cluster & HA — Corosync, 쿼럼, HA Manager, 펜싱


🔗 관련 문서


📝 참고 자료