13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Proxmox 스토리지

  • [Proxmox] Proxmox ZFS, 왜 선택해야 할까? 성능·안정성·운영 분석

    [Proxmox] Proxmox ZFS, 왜 선택해야 할까? 성능·안정성·운영 분석

    Proxmox ZFS, 왜 선택해야 할까? 성능, 안정성, 운영 관점 분석

    Proxmox ZFS를 처음 검토할 때는 보통 CPU나 메모리보다 스토리지에서 먼저 막히더라고요. VM은 뜨는데 백업이 길어지고, 디스크 한 장이 수상해 보여도 어디부터 봐야 할지 감이 안 잡히는 식입니다. 저도 처음엔 “여기까지 꼭 ZFS로 가야 하나?” 싶었는데, 오래 써보니 핵심은 최고 속도보다 문제가 생겼을 때 상태를 읽기 쉬운 구조를 만든다는 점이었습니다.

    그래서 이 글은 “ZFS가 좋다더라” 수준에서 끝내지 않겠습니다. ZFS 성능이 어떤 워크로드에서 살아나는지, ZFS 안정성이 왜 높게 평가되는지, 그리고 Proxmox 스토리지를 설계할 때 초기에 뭘 잘못 고르면 나중에 오래 고생하는지까지 실무 기준으로 정리해보겠습니다. 결론부터 말하면 이 조합은 만능은 아니지만, 설계를 제대로 하면 꽤 오래 편합니다.

    Proxmox ZFS 기반 홈랩 스토리지 아키텍처 개요

    Proxmox 호스트, ZFS 풀(pool), VM 디스크, 백업 스토리지가 한눈에 보이는 구조도입니다.

    왜 Proxmox ZFS를 많이 선택할까요

    제가 Proxmox에서 ZFS를 높게 보는 이유는 기능 수보다 운영 일관성 때문입니다. VM 디스크가 어느 풀에 있고, 스냅샷이 어디 계층에서 관리되고, 장애가 났을 때 어떤 명령으로 상태를 확인해야 하는지가 한 체계 안에 들어옵니다. RAID 컨트롤러, 파일시스템, 논리 볼륨을 따로따로 추적할 때보다 훨씬 덜 산만하죠.

    특히 Proxmox 같은 가상화 환경에서는 아래 세 가지가 크게 작용합니다.

    • 스냅샷과 복제 흐름이 자연스럽습니다. 작업 전 스냅샷, 테스트 후 롤백, 다른 노드로 복제까지 같은 철학으로 움직입니다.
    • 풀 상태를 읽기 쉽습니다. 디스크가 느린지, 깨졌는지, 일부만 이상한지 판단 포인트가 zpool status와 zpool iostat에 비교적 잘 드러납니다.
    • 설계 실수가 초기에 드러납니다. 이건 불편해 보여도 사실 장점입니다. ZFS는 “대충 붙여도 되겠지”를 잘 용서하지 않거든요.

    반대로 ZFS가 덜 맞는 환경도 분명합니다. 메모리 여유가 거의 없고, 디스크를 즉흥적으로 하나씩 늘려야 하고, 운영 점검을 거의 하지 않는 환경이라면 단순한 LVM 계열이 더 편할 때도 있습니다. 그래서 저는 Proxmox ZFS를 성능 기능이 아니라 운영 모델의 선택으로 보는 편입니다.

    Proxmox ZFS를 이해할 때 먼저 봐야 할 구조

    용어 정의보다 중요한 건 어느 계층이 성능과 장애 허용을 좌우하느냐입니다.

    1. pool(풀)은 관리 단위입니다

    여러 디스크 묶음 전체를 가리키는 가장 큰 저장소입니다. Proxmox에서는 여기 위에 VM 디스크, 컨테이너 루트 디스크, 스냅샷이 올라갑니다. 운영자가 보는 용량, 상태, scrub 대상도 이 계층입니다.

    2. vdev는 성격을 결정합니다

    실제로 성능과 복구 가능성은 pool보다 vdev 구조가 더 크게 좌우됩니다. mirror인지 RAIDZ1인지 RAIDZ2인지에 따라 랜덤 I/O 성격이 달라지고, 디스크 고장 시 복구 여유도 달라집니다. 같은 풀 이름이라도 내부 vdev 구성이 다르면 체감이 완전히 달라집니다.

    3. dataset과 zvol은 용도가 다릅니다

    파일 단위 관리에는 dataset이, 블록 디바이스처럼 쓰는 VM 디스크에는 zvol이 더 직접적입니다. Proxmox의 로컬 ZFS 스토리지는 VM 이미지와 컨테이너 데이터를 ZFS 계층에서 관리하며, VM 디스크는 보통 블록 볼륨 성격으로 다뤄집니다. 여기서 중요한 건 VM은 작은 랜덤 I/O가 많다는 점입니다. 그래서 파일 아카이브에 유리한 구성과 VM에 유리한 구성이 갈립니다.

    4. scrub는 “점검”이지 “백업”이 아닙니다

    scrub는 풀 데이터를 읽으면서 체크섬을 검증하고, 중복 데이터가 있는 구성에서는 손상 블록 복구에 도움을 줍니다. 이 기능이 강한 이유는 “데이터가 있다”와 “데이터가 멀쩡하다”를 구분해주기 때문입니다. 운영해보면 이 차이가 생각보다 큽니다.

    제가 실무에서 특히 중요하게 보는 포인트는 이겁니다. ZFS는 데이터를 저장하는 시스템이면서, 동시에 상태를 해석할 단서를 남기는 시스템입니다. 장애를 없애준다기보다, 장애를 더 빨리 좁혀가게 해주는 쪽에 가깝습니다.

    성능 관점에서 보면, Proxmox ZFS는 “빠르다”보다 “구조를 탄다”가 맞습니다

    ZFS 성능을 한 줄로 단정하면 거의 항상 틀립니다. 같은 SSD라도 mirror인지 RAIDZ인지, sync 쓰기가 많은지, 압축이 잘 먹는지에 따라 결과가 크게 달라집니다. 제가 체감한 기준은 단순했습니다. VM이 많이 붙는 Proxmox 스토리지는 랜덤 I/O 관점에서 봐야 한다는 점입니다.

    구성 어울리는 워크로드 강점 약점 제가 권하는 용도
    Single Disk 테스트, 임시 랩 구성 간단, 실험 빠름 장애 허용 없음, 운영 검증용으론 취약 학습용, 일회성 검증
    Mirror VM, DB, 잦은 랜덤 I/O 랜덤 읽기 IOPS에 유리, 복구 판단 쉬움, 교체 절차 단순 가용 용량 효율이 낮음 Proxmox VM 스토리지의 기본 후보
    RAIDZ1 백업 저장, 파일 공유 용량 효율이 좋음 작은 랜덤 쓰기 많은 VM엔 답답할 수 있음 VM보다 백업/아카이브 쪽
    RAIDZ2 대용량 장기보관, 안정성 우선 디스크 장애 허용 폭이 넓음 쓰기 특성이 무겁고 설계 판단을 더 보수적으로 해야 함 중요 백업 풀, 대용량 저장소

    VM 스토리지에 mirror를 자주 권하는 이유는 단순히 “더 빠르다”여서가 아닙니다. 랜덤 I/O, 장애 추적, 디스크 교체 절차, 성능 편차 예측 가능성까지 합치면 운영 총비용이 낮기 때문입니다. RAIDZ는 용량 효율은 좋지만, VM 여러 대가 동시에 작은 블록을 읽고 쓰는 환경에서는 생각보다 거칠게 느껴질 수 있습니다.

    그리고 실제로 많이 놓치는 설정이 몇 가지 있습니다.

    • ashift: 물리 섹터 특성과 맞지 않으면 쓰기 증폭과 성능 손해를 볼 수 있습니다.
    • compression=lz4: CPU 부담이 비교적 낮고 I/O를 줄여, 로그나 텍스트 비중이 있는 VM에서 체감이 좋아질 때가 많습니다.
    • atime=off: 읽을 때마다 메타데이터 쓰기를 줄여 불필요한 I/O를 덜 만듭니다.
    • autotrim=on: SSD 기반 풀이면 장기 운용 시 상태 유지에 도움이 됩니다.
    • sync 특성: 데이터베이스, NFS, 일부 애플리케이션은 동기식 쓰기 비중이 높아 체감 성능이 갑자기 달라질 수 있습니다.

    제 경험상 ZFS가 느리다고 말하는 사례 중 적지 않은 비중이, 사실은 RAIDZ를 VM 스토리지로 써서 랜덤 I/O가 막힌 경우이거나, 동기식 쓰기 워크로드를 일반 파일서버 감각으로 올린 경우였습니다. ZFS 자체보다 구조 선택이 원인인 경우가 많다는 얘기죠.

    안정성은 왜 평가가 높을까요

    ZFS 안정성이 높게 평가되는 이유는 “절대 안 깨진다”가 아니라, 깨졌을 때 조용히 넘어가지 않게 설계돼 있다는 데 있습니다. 체크섬 기반 검증, 중복 데이터에서의 복구 가능성, 풀 상태와 오류 카운트 노출이 합쳐지면서 운영자가 놓치기 쉬운 문제를 빨리 수면 위로 끌어올립니다.

    저는 이 점을 꽤 높게 봅니다. SSD 한 장이 완전히 죽는 고전적인 장애보다, 간헐적 읽기 오류, 케이블 접촉 불량, 특정 시간대만 치솟는 I/O 지연 같은 애매한 문제가 실제 운영에서는 더 귀찮더라고요. 이럴 때 VM 내부 오류만 보면 원인 추적이 길어지는데, ZFS는 적어도 스토리지 계층에서 “뭔가 이상하다”는 신호를 먼저 주는 편입니다.

    다만 여기에는 오해도 많습니다.

    • 스냅샷은 백업이 아닙니다. 같은 풀 안에 있으면 풀 자체 장애나 운영 실수에서 자유롭지 않습니다.
    • 구성이 잘못되면 보호도 없습니다. single disk 풀은 손상 감지는 해도, 복구할 다른 사본이 없으면 자동 복구를 기대하면 안 됩니다.
    • 메모리가 부족하면 운영 체감이 나빠질 수 있습니다. 안정성과는 별개로 캐시 여유가 없으면 답답하다는 느낌이 반복될 수 있습니다.

    그래서 저는 안정성을 이렇게 정의합니다. 장애를 막는 기술이라기보다, 장애를 설명하고 복구 경로를 남기는 기술입니다. 운영자 입장에서는 이 차이가 꽤 큽니다.

    Proxmox 스토리지를 실제로 구성할 때 먼저 정할 것들

    디스크를 꽂고 바로 zpool create부터 치면 나중에 되돌리기 정말 귀찮습니다. 저는 Proxmox ZFS를 만들기 전에 아래 세 가지부터 정합니다.

    1. 이 풀이 VM용인지, 백업용인지
    2. 확장을 같은 형태의 vdev 추가로 할 건지, 큰 디스크 교체 업그레이드로 갈 건지
    3. 주 저장 장치가 SSD인지 HDD인지

    이걸 먼저 정하면 mirror와 RAIDZ 판단이 훨씬 빨라집니다. 아래는 SSD 두 장을 VM용 mirror 풀로 만드는 예시입니다. 핵심은 /dev/sdX 대신 /dev/disk/by-id/를 쓰고, 필요한 속성을 생성 시점에 같이 넣는 겁니다.

    lsblk -o NAME,SIZE,TYPE,MODEL,SERIAL
    ls -l /dev/disk/by-id/ | grep -E 'ata|nvme'
    
    zpool create -f \
      -o ashift=12 \
      -o autotrim=on \
      -O compression=lz4 \
      -O atime=off \
      -O xattr=sa \
      tank mirror \
      /dev/disk/by-id/ata-Samsung_SSD_1 \
      /dev/disk/by-id/ata-Samsung_SSD_2
    
    zpool status tank
    zfs list

    왜 이렇게 하느냐고요? 이유는 단순합니다.

    • ashift=12: 4K 섹터 계열 장치에 무난하게 많이 쓰는 선택입니다.
    • autotrim=on: SSD 풀이라면 장기 운영 시 도움이 됩니다.
    • compression=lz4, atime=off: 실사용에서 무난한 기본값으로 많이 잡습니다.
    • xattr=sa: 구형 풀이나 호환성을 직접 관리하는 환경에서는 명시해두면 확인이 쉽습니다. 다만 최신 OpenZFS 계열에서는 이미 기본값인 경우도 있어요.
    • by-id 경로 사용: 재부팅이나 하드웨어 변경 후 /dev/sdX 순서 변동 리스크를 줄입니다.

    그 다음은 Proxmox에 스토리지를 등록합니다. 웹 UI로 해도 되지만, 저는 설정 확인이 편해서 CLI도 같이 봅니다.

    pvesm add zfspool tank-vm \
      -pool tank \
      -content images,rootdir \
      -sparse 1
    
    pvesm status
    cat /etc/pve/storage.cfg
    zfspool: tank-vm
        pool tank
        content images,rootdir
        sparse 1

    content images,rootdir는 VM 디스크와 컨테이너 루트 디스크를 저장하겠다는 의미고, sparse 1은 씬 프로비저닝과 연결됩니다. 저는 여기서 한 번 더 확인합니다. 이 풀이 VM용이면 images가 들어가 있는지, 백업용이면 아예 다른 저장소로 분리하는 게 맞는지를요.

    Proxmox ZFS 스토리지 설정과 미러 디스크 구성 이미지

    스토리지 등록 화면이나 디스크 두 개를 미러로 묶는 구성을 설명하는 이미지가 들어가면 이해가 빨라집니다.

    운영하면서 꼭 보는 명령어와 읽는 순서

    스토리지는 만드는 순간보다, 느려졌을 때 어디를 먼저 보느냐가 더 중요합니다. 저는 보통 아래 순서대로 봅니다.

    zpool status -v
    zpool iostat -v 1
    zfs get compression,atime,xattr,recordsize,volblocksize tank
    pvesm status
    journalctl -k -n 100 --no-pager

    명령마다 해석 포인트가 다릅니다.

    • zpool status -v: 첫 줄의 state를 봅니다. ONLINE이 아니면 성능 튜닝보다 상태 복구가 먼저입니다.
    • zpool iostat -v 1: vdev와 개별 디스크 편중을 봅니다. 특정 장치만 유독 바쁘거나 응답이 수상하면 병목 가능성이 큽니다.
    • zfs get ...: 의도한 속성이 실제로 적용됐는지 확인합니다. 생성 후 누락된 경우가 생각보다 흔합니다.
    • pvesm status: Proxmox가 해당 스토리지를 usable하게 보고 있는지 확인합니다. ZFS는 정상인데 Proxmox 등록이 꼬인 경우도 있거든요.
    • journalctl -k: 케이블, 컨트롤러, I/O 에러 같은 커널 레벨 힌트를 봅니다.

    판단 순서도 중요합니다. 저는 늘 1) ONLINE 여부, 2) 오류 증가 여부, 3) 특정 디스크 편중, 4) 워크로드 특성 순서로 봅니다. 이 순서를 지키면 “ZFS가 느린가?” 같은 뭉뚱그린 질문이 “특정 디스크가 느린가?”, “sync 쓰기 때문에 밀리는가?” 같은 실행 가능한 질문으로 바뀝니다.

    예를 들어 백업 시간대에 VM이 버벅인다면, CPU가 널널할 때 저는 먼저 zpool iostat -v 1를 켭니다. 여기서 디스크가 포화되면 원인은 거의 스토리지 계층입니다. 반대로 디스크가 한가하면 백업 방식, 네트워크, 게스트 내부 I/O 패턴을 봐야겠죠. 이거 진짜 편한 게, 잘못 의심할 대상을 빨리 지워준다는 점입니다.

    ⚠️ 제가 자주 본 주의사항과 트러블슈팅

    매뉴얼에는 적혀 있어도 운영하다 보면 왜 이게 문제인지 체감이 늦게 오는 포인트가 있습니다. 아래는 제가 특히 자주 본 실패 모드입니다.

    1. 디스크 이름만 믿고 작업하는 문제

    근본 원인은 단순합니다. Linux의 /dev/sdX 이름은 영구 식별자가 아니기 때문입니다. 리부팅, HBA 변경, 디스크 추가 후 순서가 바뀌면 같은 sdb라고 믿고 작업했다가 다른 디스크를 건드릴 수 있습니다.

    ls -l /dev/disk/by-id/ | grep -E 'ata|nvme'
    
    zpool create -f tank mirror \
      /dev/disk/by-id/ata-Samsung_SSD_xxx \
      /dev/disk/by-id/ata-Samsung_SSD_yyy

    이건 편의가 아니라 사고 방지 습관입니다. 저도 이 규칙을 안 지켰을 때 교체 작업에서 괜히 더 오래 붙잡힌 적이 있었습니다.

    2. 용량 확장을 RAID 카드 감각으로 생각하는 문제

    근본 원인은 vdev 구조를 나중에 자유롭게 바꿀 수 있을 거라는 기대입니다. ZFS는 하드웨어 RAID처럼 아무 디스크나 한 장씩 붙여 모양을 쉽게 바꾸는 방식과는 거리가 있습니다. 최근 OpenZFS에서는 RAIDZ 확장 기능이 들어왔지만, 여전히 시간도 걸리고 제약도 있어 처음 설계를 대충 해도 된다는 뜻은 아닙니다.

    제가 운영 기준으로 내리는 판단은 이렇습니다.

    상황 더 나은 선택 이유
    VM이 중심이고 반응성 중요 Mirror 랜덤 I/O 대응과 장애 처리 절차가 단순합니다
    백업 저장이 중심이고 용량 효율 중요 RAIDZ1/RAIDZ2 가용 용량 확보에 유리합니다
    앞으로 디스크를 같은 쌍으로 늘릴 수 있음 Mirror vdev 추가 확장 전략이 예측 가능합니다
    디스크 추가 계획이 불규칙하고 제각각 ZFS 신중 검토 구조 제약 때문에 중간에 답답해질 가능성이 큽니다

    3. 스냅샷을 백업처럼 쌓는 문제

    근본 원인은 스냅샷의 비용이 낮아 보여서입니다. 너무 쉽게 찍히다 보니 보존 정책 없이 쌓이기 쉽습니다. 그런데 스냅샷이 많아질수록 운영자는 “무엇을 남길지”보다 “무엇을 지워도 되는지” 판단하는 데 시간을 쓰게 됩니다.

    그래서 저는 스냅샷 규칙을 아주 단순하게 둡니다.

    • 수동 스냅샷은 작업 전후처럼 목적이 분명할 때만 만듭니다.
    • 자동 스냅샷은 보존 개수와 이름 규칙을 먼저 정합니다.
    • 장기 보존은 스냅샷이 아니라 별도 백업 저장소로 보냅니다.

    4. scrub를 안 돌려서 이상 징후를 늦게 보는 문제

    근본 원인은 당장 눈에 띄는 장애가 없으니 미루게 된다는 점입니다. 그런데 ZFS의 장점은 문제가 터진 뒤보다, 아직 큰 사고가 되기 전에 상태를 읽는 데 있습니다. scrub를 미루면 그 장점을 스스로 줄이는 셈이죠.

    zpool scrub tank
    zpool status tank

    scan: 항목에서 scrub 진행 여부와 마지막 완료 기록을 봅니다. 에러가 보이면 거기서 멈추지 말고, 디스크 SMART 정보와 커널 로그까지 같이 확인하는 게 좋습니다. 실제 원인이 ZFS보다 SSD 자체, 케이블, 전원, 컨트롤러인 경우도 꽤 많더라고요.

    5. 동기식 쓰기 워크로드를 가볍게 보는 문제

    근본 원인은 “일반 파일 복사도 괜찮았으니 서비스도 괜찮겠지”라는 추정입니다. 하지만 데이터베이스, NFS, 일부 애플리케이션은 sync 쓰기 비중이 높습니다. 이 경우 평소에는 조용하다가 특정 서비스만 유독 느려 보일 수 있습니다. 여기서 필요한 건 막연한 튜닝이 아니라, 그 서비스가 실제로 어떤 쓰기 패턴을 갖는지 확인하는 일입니다.

    Proxmox ZFS 운영 중 장애 디스크 점검과 교체 흐름

    풀 상태가 ONLINE, DEGRADED로 바뀌는 모습과 디스크 교체 절차를 설명하는 시각 자료 위치입니다.

    검증은 어떻게 해야 할까: “된다”보다 “운영 가능하다”를 확인해야 합니다

    구성을 마쳤다면 단순 마운트 확인에서 끝내지 않는 게 좋습니다. 저는 최소한 아래 순서로 검증합니다.

    1. Proxmox가 스토리지를 정상 인식하는지 확인합니다.
    2. 테스트 VM 하나를 만들어 해당 ZFS 풀에 디스크를 올립니다.
    3. 스냅샷 생성과 삭제가 정상 동작하는지 봅니다.
    4. 백업 작업 중 체감 성능이 무너지는지 확인합니다.
    5. zpool status와 zpool iostat로 상태와 편중을 읽습니다.
    qm create 9000 --name zfs-test --memory 2048 --net0 virtio,bridge=vmbr0
    qm set 9000 --scsi0 tank-vm:32
    qm start 9000
    qm snapshot 9000 baseline
    qm listsnapshot 9000
    vzdump 9000 --mode snapshot --storage <backup-storage-name>

    이 단계에서 제가 보는 기준은 속도 숫자보다 일관성입니다.

    • 스냅샷 생성이 안정적으로 되는지: 한 번 되고 한 번 실패하면 저장소 등록 방식이나 설정부터 다시 봐야 합니다.
    • 백업 시 전체 VM 반응성이 무너지는지: 백업 저장소 분리, 시간대 분산, VM용 풀 구조 재검토가 필요할 수 있습니다.
    • 장애 시 상태가 읽히는지: 홈랩이라면 테스트 디스크를 오프라인 처리해 출력이 어떻게 달라지는지 보는 공부가 꽤 도움이 됩니다.

    제가 중요하게 보는 시나리오 하나를 들자면, 백업은 성공하는데 특정 시간대마다 게스트 OS가 갑자기 느려지는 경우입니다. 이때 많은 분들이 Proxmox 전체 문제로 보는데, 실제로는 백업 I/O와 VM I/O가 같은 풀에서 경쟁하는 구조 문제인 경우가 적지 않습니다. 이런 상황에선 튜닝보다 역할 분리가 더 크게 먹힙니다.

    Proxmox ZFS 검증 결과와 상태 확인 대시보드

    가상머신이 ZFS 스토리지에서 동작하고, 상태 명령어 결과가 정상인 모습을 함께 보여주는 검증 이미지입니다.

    어떤 환경에 추천하고, 어디엔 덜 맞을까

    이쯤 되면 선택 기준이 꽤 선명해집니다.

    환경 추천도 이유
    홈랩에서 VM 여러 대 운영 높음 스냅샷, 복제, 상태 확인이 운영 학습과 실사용 모두에 유리합니다
    중소규모 Proxmox 가상화 서버 높음 스토리지 상태를 읽기 쉽고 장애 대응 절차를 표준화하기 좋습니다
    백업/아카이브 저장소 중간 이상 RAIDZ 계열로 용량 효율을 챙길 여지가 있습니다
    메모리 여유가 매우 적은 장비 신중 운영 체감이 떨어질 수 있어 더 단순한 구성이 나을 수 있습니다
    디스크를 아무 규칙 없이 자주 덧붙여야 하는 환경 신중 ZFS의 구조 제약이 장점보다 먼저 불편으로 느껴질 수 있습니다

    여기서 제가 실제로 가장 많이 권하는 구성은 이렇습니다.

    • VM 중심: SSD 2개 이상 mirror 기반 ZFS
    • 백업 중심: 별도 저장소, 필요하면 RAIDZ 계열 검토
    • 역할 분리: OS용, VM용, 백업용을 가능하면 나눔

    특히 “모든 걸 한 풀에 몰아넣는” 설계는 초반엔 단순해 보여도 운영 후반에는 원인 분리가 어려워집니다. 저도 결국은 VM 스토리지와 백업 스토리지를 분리했을 때 제일 편했습니다. 느려지는 이유를 읽기 쉬워졌거든요.

    마무리: 제가 실제로 추천하는 선택 기준

    Proxmox ZFS는 모든 서버에 자동 정답인 기술은 아닙니다. 그래도 VM 중심 운영, 스냅샷 활용, 상태 가시성, 장애 대응 속도를 중요하게 본다면 상당히 강한 선택지입니다. 현업과 홈랩에서 반복해서 느낀 건, ZFS는 초반 진입장벽 대신 장기 운영 편의성을 준다는 점이었어요.

    그래서 제 권고는 분명합니다.

    • VM 위주의 홈랩이나 소규모 가상화 서버라면, 먼저 mirror 기반 Proxmox ZFS를 검토하는 쪽이 무난합니다.
    • 백업/아카이브 비중이 크고 용량 효율이 중요하다면, VM용 풀과 분리한 뒤 RAIDZ 계열을 고려하는 편이 낫습니다.
    • 메모리 여유가 거의 없고 디스크 확장 계획이 자주 바뀌는 장비라면, ZFS를 억지로 넣기보다 더 단순한 스토리지 구성이 운영 비용이 낮습니다.

    한 문장으로 요약하면 이렇습니다. 성능 수치만 보면 판단이 흔들릴 수 있지만, 운영 피로도까지 넣어 보면 Proxmox ZFS의 장점은 꽤 선명합니다. 특히 “장애가 났을 때 내가 빨리 읽고 대응할 수 있는가”를 중요한 기준으로 두신다면, 이 조합은 생각보다 만족도가 오래 갑니다.

    Proxmox 스토리지 비교나 백업 분리 전략도 같이 보시면 판단이 더 쉬워집니다. 다음 글에서는 mirror와 RAIDZ를 실제 운영비 관점에서 더 세밀하게 비교해보겠습니다.

    어떤 환경에 ZFS가 잘 맞는지, 미러와 RAIDZ 중 무엇을 고를지 한눈에 정리하는 요약 이미지입니다.

    FAQ: 실무에서 자주 묻는 포인트

    Proxmox에서 ZFS면 무조건 빠른가요?

    아닙니다. 풀 구조, 디스크 종류, 워크로드 특성이 더 중요합니다. 특히 VM처럼 작은 랜덤 I/O가 많으면 mirror가 더 유리한 경우가 많습니다.

    스냅샷만 있으면 백업은 필요 없나요?

    아니요. 스냅샷은 같은 스토리지 안의 시점 보존이고, 백업은 별도 위치에 독립적으로 남겨두는 개념입니다. 둘은 대체 관계가 아닙니다.

    처음 시작한다면 가장 무난한 구성은 뭔가요?

    테스트와 실사용을 같이 염두에 둔다면, SSD 2개를 mirror로 묶은 ZFS 풀이 가장 이해하기 쉽고 운영 실수도 적습니다. 여기서 감을 잡고 역할 분리를 넓혀가는 편이 실패가 적더라고요.

    RAIDZ를 VM 스토리지로 쓰면 안 되나요?

    못 쓰는 건 아닙니다. 다만 VM 여러 대가 작은 블록을 자주 읽고 쓰는 환경에서는 기대한 체감이 안 나올 수 있습니다. 용량 효율보다 반응성이 중요하면 mirror 쪽이 대체로 덜 후회됩니다.

    문제가 생기면 제일 먼저 뭘 봐야 하나요?

    저는 zpool status -v로 상태를 먼저 보고, 그다음 zpool iostat -v 1로 병목과 편중을 확인합니다. 그 후에야 Proxmox 설정과 게스트 내부 문제를 의심합니다.

  • [Proxmox] Proxmox ZFS 스토리지, 흔한 문제와 해결책: 안정적인 운영 노하우

    [Proxmox] Proxmox ZFS 스토리지, 흔한 문제와 해결책: 안정적인 운영 노하우

    [가상화] Proxmox ZFS 스토리지, 흔한 문제와 해결책

    홈랩이나 사내 가상화 환경을 운영하다 보면 Proxmox ZFS 문제는 생각보다 빨리 한 번쯤 만나게 됩니다. 처음엔 VM만 잘 뜨면 끝인 줄 알았는데, 실제로 써보니까 스토리지가 흔들리면 전체 운영이 같이 흔들리더라고요. 특히 ZFS(File System, 체크섬과 복구 기능이 강한 파일 시스템) 기반으로 Proxmox VE(가상화 플랫폼)를 굴릴 때는 디스크 상태, 메모리 여유, 풀(pool) 구성, 스냅샷 관리가 다 연결되어 있습니다. 저도 처음엔 이게 뭔가 싶었는데, 에러 메시지는 짧고 증상은 묘하게 길게 이어져서 삽질 좀 했습니다 ㅎㅎ

    이번 글에서는 제가 홈랩과 테스트 서버에서 직접 부딪히며 정리한 Proxmox 스토리지 운영 팁을 기준으로, 자주 보이는 ZFS 에러, 성능 저하, 풀 손상 징후, 그리고 데이터 복구 접근 순서를 정리해보겠습니다. 단순히 명령어만 던지는 글이 아니라, 왜 이런 문제가 생기고 어떤 순서로 확인해야 덜 망가지는지까지 같이 보실 수 있게 구성했습니다.

    Proxmox 호스트, ZFS 풀, VM 디스크, 백업 저장소의 관계를 한눈에 보여주는 개요 이미지입니다.

    1. 왜 Proxmox ZFS 문제가 자주 체감될까요?

    쉽게 말해 ZFS는 그냥 디스크 묶음이 아니라, 스토리지 관리자 + 파일 시스템 + 무결성 검사기 역할을 같이 합니다. 그래서 장점이 큽니다. 체크섬(checksum, 데이터 변조나 손상 여부를 확인하는 값) 기반으로 데이터 무결성을 챙기고, 스냅샷(snapshot, 특정 시점 상태 저장)도 편하고, 미러(mirror)나 RAIDZ 같은 구성도 안정적으로 가져갈 수 있거든요.

    근데 여기서 중요한 포인트가 있습니다. ZFS는 문제를 숨기기보다 드러내는 편입니다. 디스크가 애매하게 고장 나기 시작하면 ext4 같은 단순 파일 시스템에서는 조용히 지나갈 수도 있는 이상 징후를 ZFS가 읽기/쓰기 오류로 먼저 드러내는 경우가 있었습니다. 운영자 입장에서는 무섭죠. 하지만 길게 보면 이게 오히려 안전합니다.

    • 디스크 자체 불량: SATA 케이블, HBA(Host Bus Adapter, 스토리지 연결 카드), SSD 펌웨어 문제까지 포함됩니다.
    • 메모리 부족: ARC(Adaptive Replacement Cache, ZFS 메모리 캐시)가 압박을 받으면 체감 성능이 떨어집니다.
    • 풀 용량 과다 사용: 여유 공간이 적으면 쓰기 성능이 급격히 흔들릴 수 있습니다.
    • 과도한 스냅샷: 삭제 정책 없이 쌓아두면 관리도 복잡해지고 공간 회수도 꼬입니다.
    • 불균형한 풀 설계: VM 랜덤 I/O와 백업 대용량 쓰기를 같은 풀에 몰아넣으면 병목이 생깁니다.

    저는 예전에 테스트한다고 VM 이미지, ISO, 백업, 템플릿을 한 풀에 다 넣었다가 야간 백업 시간만 되면 지연(latency, 응답 지연)이 튀는 걸 겪었습니다. 처음엔 네트워크 문제인 줄 알았는데, 결국 스토리지 쪽이더라고요.

    2. ZFS 핵심 개념, 운영자가 꼭 알아야 하는 것만

    2-1. pool, vdev, dataset 차이

    처음 ZFS를 접하면 용어부터 헷갈립니다. 저도 그랬습니다. 쉽게 말해 아래처럼 이해하시면 됩니다.

    용어 쉽게 설명 운영 포인트
    pool 전체 저장소 묶음 실제 사용량, 상태, 장애 여부를 먼저 보는 대상
    vdev 풀을 구성하는 디스크 그룹 미러, RAIDZ 구조에 따라 성능과 복구 특성이 달라짐
    dataset 풀 안의 논리 단위 파일 시스템 압축, 쿼터, 스냅샷 정책을 나눠 적용하기 좋음
    zvol 블록 디바이스처럼 쓰는 볼륨 VM 디스크 저장에 자주 사용

    2-2. scrub와 resilver는 다릅니다

    scrub은 전체 데이터를 읽으면서 손상 여부를 검사하는 작업이고, resilver는 디스크 교체 후 필요한 데이터를 다시 맞춰 넣는 작업입니다. 이름이 비슷해서 초반엔 헷갈리는데, 역할이 다릅니다. 운영 중에는 scrub 결과를 주기적으로 확인하는 습관이 정말 중요합니다.

    2-3. ZFS는 여유 공간이 성능입니다

    이 부분은 경험상 진짜 중요합니다. 풀 사용률이 높아질수록 메타데이터 처리와 쓰기 패턴이 불리해져서, 같은 SSD라도 체감이 확 달라집니다. 그래서 저는 실서비스든 홈랩이든 풀 여유 공간을 충분히 남겨두는 것을 우선 원칙으로 둡니다.

    3. 실전 점검: Proxmox 스토리지 기본 진단 순서

    Proxmox ZFS 문제가 생겼을 때 제일 위험한 건, 원인도 모른 채 디스크를 막 빼거나 재부팅부터 하는 겁니다. 실제로 써보니까 순서가 중요하더라고요. 저는 보통 아래 순서로 갑니다.

    1. 현재 풀 상태 확인
    2. 읽기/쓰기/체크섬 오류 확인
    3. 디스크 식별 정보와 SMART 상태 점검
    4. 용량, 압축, 스냅샷 과다 여부 확인
    5. Proxmox 작업 로그와 커널 메시지 확인
    6. 필요하면 scrub 또는 교체 작업 진행

    3-1. 가장 먼저 볼 명령어

    zpool status -v
    zpool list
    zfs list
    zfs get compressratio,used,available,mountpoint -r rpool
    

    zpool status -v는 거의 출발점입니다. 여기에 읽기 오류(read errors), 쓰기 오류(write errors), 체크섬 오류(checksum errors), DEGRADED 상태, OFFLINE 디스크, 최근 scrub 결과가 다 모여 있거든요.

    예를 들어 상태가 아래처럼 나오면 디스크 이상을 의심해볼 수 있습니다.

    pool: tank
    state: DEGRADED
    status: One or more devices could not be used because the label is missing or invalid.
    action: Replace the device using 'zpool replace'.
    scan: scrub repaired 0B in 02:11:00 with 0 errors on Sun Aug 10 02:11:00 2026
    config:
    
        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            sda     ONLINE       0     0     0
            sdb     UNAVAIL      0     0     0
    

    이런 경우 저는 먼저 “진짜 디스크 고장인가, 연결 문제인가”를 분리해서 봅니다. SATA 환경에서는 케이블 불량이 생각보다 자주 있습니다.

    3-2. 디스크 식별과 SMART 확인

    ls -l /dev/disk/by-id/
    smartctl -a /dev/sda
    smartctl -a /dev/sdb
    

    가능하면 /dev/sdX보다 /dev/disk/by-id/ 기준으로 실제 장치를 확인하는 게 좋습니다. 재부팅 후 장치명이 바뀌는 경우가 있거든요. 여기서 재할당 섹터, 미디어 오류, 인터페이스 오류, 온도 이상 같은 징후를 같이 봅니다.

    Proxmox ZFS 문제 점검을 위한 디스크 상태 확인 이미지

    ZFS 풀 상태 확인과 디스크 오류 진단 흐름을 보여주는 예시 이미지입니다.

    3-3. Proxmox 쪽 로그도 같이 봐야 합니다

    journalctl -b | grep -i zfs
    journalctl -b | grep -Ei 'ata|scsi|nvme|i/o error'
    dmesg | grep -Ei 'zfs|ata|nvme|reset|error'
    pvesm status
    

    여기서 ATA reset, I/O error, device timeout 같은 메시지가 보이면 ZFS 자체보다 하드웨어 경로 문제일 확률도 높습니다. 특히 HBA 패스스루(pass-through, 장치를 직접 넘기는 방식) 환경에서는 케이블, 백플레인(backplane), 전원 안정성까지 봐야 하더라고요.

    4. 흔한 ZFS 에러와 해결책

    4-1. 풀 상태가 DEGRADED로 바뀐 경우

    이건 가장 많이 보는 유형 중 하나입니다. 미러 구성에서는 한 디스크가 빠져도 서비스는 계속 돌아가지만, 그 상태로 오래 두면 다음 장애 때 복구 여지가 줄어듭니다.

    • 케이블 재장착 후 다시 인식되는지 확인
    • SMART 상태가 나쁘면 디스크 교체
    • 교체 후 zpool replace로 resilver 진행
    zpool replace tank old-disk-id new-disk-id
    zpool status -v
    

    처음엔 단순히 새 디스크만 꽂으면 끝나는 줄 알았는데, 실제로는 기존 디스크 식별자를 정확히 잡는 게 중요했습니다. 잘못 잡으면 엉뚱한 장치 건드릴 수 있으니 꼭 by-id 기준으로 확인하세요.

    4-2. checksum error가 누적되는 경우

    ZFS 에러 중에서 운영자를 가장 찝찝하게 만드는 게 체크섬 오류입니다. 데이터가 읽히긴 읽히는데 무결성 문제가 감지되는 거라서, 디스크 자체뿐 아니라 케이블이나 컨트롤러도 의심해봐야 합니다.

    • 특정 디스크에만 집중되는지 확인
    • scrub 실행 후 오류 증가 여부 확인
    • 다른 포트나 케이블로 바꿔서 재검증
    zpool scrub tank
    zpool status -v
    

    제 경험상 checksum error가 꾸준히 늘어나는데 SMART는 멀쩡한 경우, 케이블이나 포트 문제였던 적이 꽤 있었습니다. 디스크만 의심하면 오히려 늦어집니다.

    4-3. 성능 저하가 갑자기 심해진 경우

    성능 저하는 원인이 하나가 아닙니다. ZFS는 캐시, 압축, 동기식 쓰기, 스냅샷, 풀 사용률이 서로 영향을 줍니다.

    • 풀 사용률이 지나치게 높은지 확인
    • 백업 작업이나 scrub가 겹치는 시간인지 확인
    • 스냅샷이 과도하게 쌓였는지 확인
    • 랜덤 I/O가 많은 VM과 대용량 백업이 같은 풀인지 확인
    zfs list -t snapshot | wc -l
    zpool iostat -v 2
    

    zpool iostat -v 2는 체감이 안 좋을 때 꼭 한 번 보게 됩니다. 어느 vdev에서 병목이 걸리는지 흐름이 보이거든요. 드디어 원인 잡았을 때 그 시원함, 아시는 분은 아실 겁니다.

    4-4. 스냅샷 때문에 공간이 안 돌아오는 것처럼 보일 때

    삭제했는데도 공간이 안 늘어나는 경우가 있죠. 이건 대개 스냅샷이 이전 블록을 붙잡고 있어서 그렇습니다. VM 디스크를 자주 지우고 만들었다면 더 눈에 띕니다.

    zfs list -t snapshot -o name,used,creation -s creation
    zfs destroy tank/vmdata@old-snapshot
    

    다만 스냅샷은 복구 안전망이기도 하니까 무작정 지우면 안 됩니다. 저는 운영 환경에서는 보존 주기를 먼저 정하고 자동화하는 쪽을 권합니다.

    5. 데이터 복구 접근은 이렇게 하시는 게 안전합니다

    데이터 복구는 속도보다 순서가 중요합니다. 이건 정말 강조하고 싶습니다. 풀 상태가 불안정한데 이것저것 쓰기 작업부터 해버리면 상황이 더 꼬일 수 있거든요.

    1. 먼저 현재 상태를 기록합니다. zpool status -v, zpool history, SMART 출력 저장.
    2. 자동 작업을 잠시 멈춥니다. 대량 백업, 복제(replication), 불필요한 VM 작업 중지.
    3. 읽기 우선으로 접근합니다. 필요한 데이터부터 다른 저장소로 백업합니다.
    4. 하드웨어 문제와 논리 문제를 구분합니다.
    5. 교체 후 resilver, 또는 백업 복원 순서로 갑니다.
    zpool history tank
    zfs snapshot tank/vmdata@pre-recovery
    zfs send tank/vmdata@pre-recovery | mbuffer | zfs receive backup-pool/vmdata
    

    물론 위 전송 예시는 대상 풀과 네트워크 환경이 준비되어 있어야 합니다. 핵심은 “문제 풀이 아니라 데이터 보존이 먼저”라는 점입니다. 저도 예전에 에러 잡는다고 로그만 보다가, 정작 중요한 VM 백업을 늦게 떠서 식은땀 흘린 적이 있습니다.

    Proxmox ZFS 문제 발생 시 데이터 복구 흐름도 이미지

    장애 발생 후 점검, 백업, 교체, 복구 순서를 정리한 흐름도 이미지입니다.

    6. 운영하면서 미리 해두면 좋은 Proxmox ZFS 안정화 팁

    6-1. 역할이 다른 워크로드를 분리하세요

    가능하면 VM 운영 풀과 백업 저장소 성격을 분리하는 게 좋습니다. 같은 SSD 풀에 모든 걸 몰면 평소엔 괜찮아 보여도, 백업 시간이나 대량 복제 시간에 병목이 확 옵니다.

    6-2. scrub 주기와 결과 확인 습관

    scrub를 주기적으로 돌리고 결과를 눈으로 확인하세요. 자동으로 돌았다고 끝이 아닙니다. “repaired 0B with 0 errors” 같은 결과가 쌓이는 게 안심 포인트거든요.

    6-3. 스냅샷 정책은 짧고 명확하게

    스냅샷은 많다고 무조건 좋은 게 아닙니다. 운영 편의성과 공간 회수 사이 균형이 필요합니다. 저는 보통 아래처럼 생각합니다.

    대상 권장 방향 이유
    중요 VM 짧은 간격 + 짧은 보존 복구 시점 확보
    테스트 VM 작업 전 수동 스냅샷 위주 불필요한 누적 방지
    백업 데이터셋 정책 단순화 공간 추적 용이

    6-4. 모니터링 포인트를 정해두세요

    • 풀 상태 변화: ONLINE, DEGRADED, FAULTED
    • 읽기/쓰기/체크섬 오류 카운트
    • 사용률과 여유 공간
    • 디스크 온도와 SMART 경고
    • 백업 시간대 I/O 급증 여부

    여기서 중요한 포인트! 문제가 터진 뒤 로그를 모으는 것보다, 평소 정상 상태를 알고 있는 게 훨씬 강합니다.

    7. 검증: 문제 해결 후 무엇을 확인해야 할까요?

    조치가 끝났다고 바로 안심하긴 이릅니다. 저도 처음엔 디스크 교체 후 ONLINE만 보고 끝냈었는데, 실제로 써보니까 이후 검증이 더 중요했습니다.

    1. zpool status -v에서 모든 장치가 ONLINE인지 확인
    2. 최근 scrub 결과에 추가 오류가 없는지 확인
    3. VM 디스크 읽기/쓰기 테스트와 실제 부팅 확인
    4. 백업 작업을 한 번 수동 실행해 병목이 줄었는지 확인
    5. 이벤트 로그에 추가 I/O error가 없는지 재확인
    zpool status -v
    zpool iostat -v 2
    qm list
    pvesm status
    

    체감상 가장 좋은 검증은 “평소 하던 작업을 다시 돌려보는 것”입니다. VM 마이그레이션, 백업, 스냅샷 생성, 복원 테스트까지 한 번 해보면 진짜 안정화됐는지 감이 옵니다.

    Proxmox ZFS 문제 해결 후 정상 상태를 보여주는 검증 이미지

    복구 이후 ZFS 풀이 정상 ONLINE 상태로 돌아오고 성능 지표가 안정된 모습을 보여주는 이미지입니다.

    8. 자주 묻는 질문 정리

    Q1. scrub 중인데 서버가 느려졌습니다. 중단해야 할까요?

    상황에 따라 다릅니다. 서비스 영향이 크면 시간대를 조정하는 게 낫습니다. 다만 손상 의심 상황이라면 너무 오래 미루는 것도 좋지 않습니다.

    Q2. ZFS 에러가 0이어도 체감이 느릴 수 있나요?

    그렇습니다. 에러 카운트가 없어도 풀 사용률, 스냅샷 누적, 백업 동시 수행, 느린 디스크 혼합 구성 때문에 성능 저하는 충분히 생깁니다.

    Q3. 데이터 복구 전에 scrub부터 돌려도 되나요?

    무조건 그렇진 않습니다. 불안정한 하드웨어 상태에서는 먼저 중요한 데이터를 다른 곳으로 옮기는 쪽이 더 안전할 수 있습니다.

    Q4. Proxmox 스토리지는 ZFS 하나로 끝내도 될까요?

    작은 환경에서는 충분히 좋습니다. 다만 백업 저장소 성격까지 한 풀에 몰아넣기보다는, 역할 분리를 고민해보시는 게 운영이 편합니다.

    9. 마무리: 결국 안정성은 구조와 습관에서 나옵니다

    Proxmox ZFS 문제는 단순히 명령어 몇 줄로 끝나는 경우도 있지만, 실제로는 구조와 습관의 문제인 경우가 많습니다. 케이블 하나, 스냅샷 정책 하나, 여유 공간 관리 하나가 나중에 큰 차이를 만들더라고요. 저도 처음엔 ZFS가 너무 예민한 거 아닌가 싶었는데, 오래 운영해보니 예민한 게 아니라 정확한 쪽에 가깝다는 생각이 들었습니다.

    정리하면 이렇습니다. ZFS 에러는 메시지 자체보다 맥락을 봐야 하고, Proxmox 스토리지는 평소 설계가 반입니다. 그리고 데이터 복구는 원인 분석보다 보존이 먼저입니다. 이 세 가지만 잡아도 운영 안정성이 꽤 달라집니다.

    다음 글에서는 Proxmox 백업 저장소 분리 전략과 스냅샷/복제 운영 패턴도 다뤄볼 예정입니다. 이전 글에서 다뤘던 홈랩 네트워크 분리 구성과 함께 보시면 더 이해가 잘 되실 거예요.

    운영 전 점검, 장애 대응, 복구 후 검증까지 한 장으로 정리한 요약 인포그래픽 이미지입니다.

  • [Proxmox] Proxmox Ceph 스토리지 1년 실사용 후기: 장점, 단점, 비용 분석

    [Proxmox] Proxmox Ceph 스토리지 1년 실사용 후기: 장점, 단점, 비용 분석

    Proxmox Ceph 스토리지 1년 실사용 후기: 장점, 단점, 비용 분석

    안녕하세요, 13년차 서버실 지킴이입니다. 13년차 인프라 엔지니어로 홈랩을 운영하면서 가장 크게 느꼈던 부분 중 하나가 바로 스토리지거든요. 처음엔 NAS(Network Attached Storage) 하나로 버텨봤는데, VM(Virtual Machine)도 늘어나고 데이터도 중요해지면서 단일 스토리지의 한계에 부딪히더라고요.

    Proxmox VE(Virtual Environment)를 쓰면서 여러 노드를 묶는 건 좋았는데, 각 노드에 붙은 로컬 스토리지(Local Storage)만으로는 VM 마이그레이션(Live Migration)이나 고가용성(High Availability, HA)을 구현하기가 애매했어요. 그래서 결국 분산 스토리지(Distributed Storage), 그중에서도 Ceph를 선택하게 됐고, Proxmox와 Ceph의 조합이 꽤 괜찮다는 이야기를 듣고 직접 구축해서 1년 넘게 써봤습니다. 그 솔직한 후기를 여러분께 공유해볼까 합니다. 저의 삽질 경험과 해결 과정이 여러분의 홈랩 구축에 도움이 되기를 바랍니다!

    Proxmox와 Ceph를 활용한 홈랩 분산 스토리지의 일반적인 아키텍처 다이어그램입니다. 여러 노드가 Ceph 클러스터를 구성하고 Proxmox가 이를 스토리지로 활용하는 구조를 보여줍니다.

    개념 설명: Proxmox Ceph, 도대체 뭘까요?

    Ceph(세프)는 오픈소스 기반의 분산 스토리지 시스템(Distributed Storage System)이거든요. 쉽게 말해, 여러 대의 서버에 있는 하드디스크나 SSD(Solid State Drive)를 마치 하나의 거대한 저장 공간처럼 묶어서 쓸 수 있게 해주는 기술입니다. 이게 단순히 파일 공유를 넘어, 블록 스토리지(Block Storage)나 객체 스토리지(Object Storage)까지 다양한 인터페이스를 제공해서 VM 디스크나 컨테이너 볼륨으로 쓰기에 아주 적합하더라고요.

    Proxmox VE는 가상화 플랫폼인데, Ceph 클러스터를 직접 구성하고 관리할 수 있는 기능이 내장돼 있어요. 덕분에 별도의 스토리지 서버를 구축하지 않고도 기존 Proxmox 노드를 활용해서 분산 스토리지를 만들 수 있죠. 이게 바로 제가 Ceph를 선택한 결정적인 이유 중 하나입니다. 고가용성(High Availability)이나 실시간 마이그레이션(Live Migration) 같은 기능들을 Ceph 스토리지와 함께 쓰면 더욱 강력해지는 걸 경험할 수 있거든요.

    1년 실사용 후기: 장점은 확실하네요!

    제가 1년 동안 Proxmox Ceph를 쓰면서 가장 만족스러웠던 점들을 꼽아보자면 이렇습니다.

    • ✅ 데이터 안전성 및 고가용성(HA): Ceph는 데이터를 여러 노드에 복제(replication)해서 저장하거든요. 예를 들어, 제가 3개의 노드에 Ceph를 구성하고 복제본 3개(replica 3)로 설정했었는데, 어느 날 노드 하나가 갑자기 다운되어도 VM들은 아무 문제 없이 잘 돌아가는 걸 보고 감탄했습니다. 이게 바로 HA의 위력이죠. 데이터 손실 걱정 없이 안정적으로 서비스를 운영할 수 있다는 점이 가장 든든했어요.

    • ✅ 쉬운 확장성(Scalability): 스토리지 용량이 부족하면 그냥 새로운 노드를 추가하거나, 기존 노드에 디스크를 더 달아서 Ceph OSD(Object Storage Daemon)로 추가하면 돼요. Proxmox 웹 UI(User Interface)에서 몇 번 클릭만 해주면 Ceph 클러스터가 자동으로 재조정되면서 용량이 늘어나더군요. 이 확장성 덕분에 홈랩을 운영하면서 스토리지 용량 걱정을 덜었습니다. SSD 몇 개 더 달아서 Ceph OSD로 추가하면 끝! 정말 편하더라고요.

    • ✅ 준수한 성능(Performance): 제 홈랩에서는 SATA SSD와 HDD를 섞어 썼는데, SSD로 구성된 OSD에서는 VM 성능이 꽤 만족스러웠어요. 여러 OSD에 데이터가 분산되어 저장되니 병렬 처리 효과도 있어서 단일 디스크보다 빠릿한 느낌이었습니다. 물론 엔터프라이즈급 장비만큼은 아니지만, 홈랩에서는 차고 넘치는 성능이었어요.

    • ✅ Proxmox와의 긴밀한 통합 관리: Proxmox 웹 인터페이스에서 Ceph 클러스터의 상태를 한눈에 볼 수 있고, OSD 추가/삭제, 풀(Pool) 관리까지 대부분의 작업을 처리할 수 있어서 관리 편의성이 정말 좋았습니다. 처음엔 Ceph 명령어를 일일이 쳐야 하나 걱정했는데, 통합 관리(Integrated Management) 덕분에 삽질을 많이 줄일 수 있었죠. 이거 진짜 편하더라고요.

    Proxmox 웹 UI Ceph 클러스터 상태 대시보드 화면

    Proxmox 웹 UI에서 Ceph 클러스터의 전반적인 상태를 보여주는 대시보드 화면입니다. OSD 상태, Health, 용량 정보 등을 한눈에 확인할 수 있습니다.

    아쉬웠던 점: 단점과 삽질 경험

    물론 장점만 있었겠습니까? 1년 동안 쓰면서 아쉬웠던 점이나 삽질했던 경험들도 꽤 됩니다. 처음엔 이게 뭔가 싶었는데, 해결하고 나니 다 피가 되고 살이 되더군요. ㅎㅎ

    • ⚠️ 초기 설정 및 트러블슈팅의 복잡성: Proxmox UI가 많이 도와주긴 하지만, Ceph 클러스터의 기본적인 아키텍처(Mon, OSD, Mgr 등)를 이해하지 못하면 문제 발생 시 해결하기가 쉽지 않더라고요. 저는 처음에 Ceph Monitor(모니터)를 3개로 구성해야 안정적이라는 걸 모르고 1개로 시작했다가, 노드 하나가 다운되니 클러스터 헬스가 엉망이 되는 경험을 했습니다. 이럴 때 ceph status 명령어로 클러스터 상태를 확인해볼 수 있어요.

      ceph status

      이 명령어를 통해 Mon(모니터), OSD(오브젝트 스토리지 데몬) 등의 상태를 확인하고 문제점을 파악할 수 있었죠. 결국 Mon을 추가하고 안정화시키는 데 삽질 좀 했습니다.

    • ⚠️ 생각보다 높은 자원 소모: Ceph는 분산 스토리지다 보니 각 노드에서 OSD 프로세스가 계속 돌아갑니다. 특히 디스크 I/O가 많아지면 CPU 사용량도 꽤 올라가고, RAM도 OSD 하나당 최소 2~4GB 정도는 필요하다고 느껴졌어요. 홈랩에서 저사양 장비로 구성하려다 보니, VM 몇 개 돌리기도 전에 Ceph 자체가 자원을 너무 많이 먹어서 VM 성능이 저하되는 경험도 했었네요. 자원 계획(Resource Planning)이 정말 중요합니다. 이거 진짜 간과하기 쉬운 포인트예요!

    • ⚠️ 네트워크 대역폭의 중요성: Ceph는 노드 간에 데이터를 주고받는 통신이 매우 활발합니다. 처음엔 1GbE(기가비트 이더넷) 네트워크로 구성했다가 VM 성능이 영 시원찮아서 고생했어요. 데이터를 복제하고 재배치하는 과정에서 네트워크가 병목(bottleneck)이 되더군요. 결국 10GbE(텐 기가비트 이더넷) NIC(Network Interface Card)를 추가하고 스위치도 바꾸면서 해결했는데, 이 비용도 만만치 않았습니다. Ceph를 제대로 쓰려면 최소 10GbE 네트워크는 필수라고 생각해요.

    • ⚠️ 성능 튜닝의 어려움: Ceph의 성능을 최적화하려면 OSD 디스크의 종류(SSD vs HDD), 저널링(Journaling) 방식, 네트워크 구성, 풀(Pool) 설정 등 고려할 요소가 너무 많아요. 저도 여러 자료를 찾아보면서 이것저것 튜닝해봤지만, ‘이게 최적이다!’라고 딱 말하기가 어렵더라고요. 이 부분은 여전히 저에게 숙제로 남아있습니다.

    비용 분석: 홈랩에서 Ceph, 합리적일까요?

    그럼 이제 가장 궁금해하실 부분 중 하나, 비용 분석을 해볼 차례입니다. 홈랩에서 Proxmox Ceph를 구축하는 게 과연 합리적일까요? 저의 경우를 예로 들어볼게요. (대략적인 비용이며, 실제 제품명/가격은 언급하지 않습니다.)

    • 서버: 저는 기존에 가지고 있던 미니 PC 3대를 활용했습니다. (약 30만원 x 3대 = 90만원 상당)

    • 디스크: Ceph OSD용으로 SATA SSD 2TB 3개, HDD 4TB 3개를 추가 구매했습니다. (SSD 약 15만원 x 3개 = 45만원, HDD 약 10만원 x 3개 = 30만원)

    • 네트워크 장비: 10GbE NIC 3개와 10GbE 지원 스위치 1대를 구매했습니다. (NIC 약 8만원 x 3개 = 24만원, 스위치 약 20만원 = 20만원)

    • 전기 요금: 3대의 서버가 24시간 돌아가니 한 달에 대략 3~5만원 정도 추가 요금이 발생하더군요. (연간 36~60만원)

    초기 하드웨어 투자 비용만 대략 200만원 정도 들었습니다. 여기에 전기 요금까지 고려하면 꽤 부담될 수 있는 금액이죠. 하지만 이 비용으로 얻는 데이터 안전성, 고가용성, 확장성을 생각하면 충분히 가치 있는 투자라고 생각해요. 특히 소프트웨어 라이선스 비용이 없다는 점은 큰 장점입니다. 엔터프라이즈급 SDS(Software Defined Storage) 솔루션에 비하면 훨씬 저렴하게 동일한 수준의 분산 스토리지를 구축할 수 있거든요.

    하지만 삽질 비용(시간과 노력)은 계산하기 어렵습니다. 저처럼 직접 구성하고 문제를 해결하는 과정을 즐기는 분들에게는 더없이 좋은 경험이 되겠지만, 단순히 ‘편리한 스토리지’만을 원한다면 초기 진입 장벽이 높다고 느낄 수도 있어요. 이 부분은 스스로에게 질문을 던져봐야 합니다!

    Proxmox Ceph 스토리지 구축 및 운영 비용 분석 차트

    Proxmox Ceph 스토리지 구축 및 운영에 필요한 주요 비용 요소를 시각적으로 보여주는 원형 차트입니다. 하드웨어, 전기 요금, 소프트웨어(오픈소스), 그리고 시간/노력의 비율을 나타냅니다.

    결론: Proxmox Ceph, 당신에게 어울릴까요?

    자, 이제 1년 동안 Proxmox Ceph를 써본 저의 최종 결론을 말씀드릴 시간입니다.

    Proxmox Ceph 스토리지, 이런 분들께 강력 추천합니다!

    • 💡 고가용성(HA)과 데이터 안전성을 중요하게 생각하는 홈랩 사용자: 중요한 VM 데이터가 있다면 Ceph의 복제 기능은 정말 든든한 보험입니다.

    • 💡 분산 스토리지 기술을 깊이 있게 경험하고 싶은 인프라 엔지니어: 실제 환경에서 Ceph를 구축하고 운영해보는 것만큼 좋은 학습은 없어요. 저도 이 과정을 통해 많은 것을 배웠습니다.

    • 💡 확장성 있는 스토리지가 필요한 분: 나중에 용량이 부족해질까 걱정 없이, 필요할 때마다 노드나 디스크를 추가하여 유연하게 확장하고 싶은 분들께 아주 좋습니다.

    하지만 이런 분들께는 좀 더 고민해보시라고 말씀드리고 싶어요.

    • ❌ 단순히 저렴하고 빠른 스토리지만을 원하는 분: 초기 설정의 복잡성이나 자원 소모를 감당하기 어려울 수 있어요. 이 경우엔 그냥 단일 NAS나 로컬 SSD를 쓰는 게 더 나을 수도 있습니다.

    • ❌ 기술적인 삽질(?)을 즐기지 않는 분: 안정적인 운영을 위해서는 Ceph에 대한 기본적인 이해와 트러블슈팅 능력이 필요합니다. 그냥 설치만 하면 끝나는 게 아니거든요!

    Proxmox Ceph 스토리지 장점, 단점 및 추천 대상 요약 인포그래픽

    Proxmox Ceph 스토리지의 주요 장점과 단점을 요약하고, 어떤 사용자에게 적합한지 추천 대상을 시각적으로 정리한 인포그래픽입니다.

    마무리: 다음 여정은?

    1년 동안 Proxmox Ceph와 함께 하면서 정말 많은 것을 느끼고 배웠어요. 초반에는 삽질의 연속이었지만, 결국 안정적인 분산 스토리지를 구축하고 운영하게 되면서 인프라 엔지니어로서 한 단계 더 성장한 것 같습니다. 드디어 됐다! 하는 성취감도 있었고요.

    다음번에는 CephFS(Ceph File System)를 활용해서 여러 VM에서 공유 스토리지를 쓰는 방법에 대해서도 다뤄볼까 합니다. 아니면 Ceph 오브젝트 스토리지(Object Storage)를 연동해서 S3 호환 스토리지를 구축하는 이야기도 재미있겠네요. 이전 글에서 다뤘던 Proxmox 초기 설정 관련 내용도 함께 참고하시면 좋을 것 같아요.

    혹시 여러분도 Proxmox Ceph를 사용 중이시거나, 구축을 고민하고 계시다면 어떤 점이 가장 궁금하신가요? 댓글로 자유롭게 의견 남겨주세요! 저의 경험이 여러분의 홈랩 구축에 조금이나마 도움이 되었기를 바랍니다. 🎉

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

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