본문 바로가기
IT/Proxmox

[Proxmox] ZFS RAIDZ 디스크 추가 확장 방법 - Proxmox VE 9 zpool attach 실전 가이드

by 수누다 2026. 3. 21.

테스트 서버 스토리지가 꽉 찬 날

사무실에서 Proxmox 기반 테스트 환경을 운영하다 보면 VM 이미지, 스냅샷, 백업 데이터가 생각보다 빠르게 쌓입니다. 개발팀 테스트 VM과 스테이징 환경을 함께 돌리고 있었는데, 어느 날 zpool list 출력의 ALLOC 수치가 90%를 넘어가고 있었습니다.

예전 같으면 선택지가 딱 두 가지였습니다. 새로운 RAIDZ vdev를 통째로 추가하거나(디스크가 배로 필요), pool을 아예 날리고 더 큰 디스크로 재구성하거나. 테스트 환경이라 구매 품의 올리기도 애매한 디스크 수량이고, pool 재구성은 백업-복원 시간이 하루 넘게 걸려서 업무 시간에 진행하기 부담스럽습니다.

그런데 Proxmox VE 9(ZFS 2.3.x)부터 상황이 완전히 달라졌습니다. 기존 RAIDZ vdev에 디스크를 한 개씩 추가해서 용량을 늘릴 수 있게 된 겁니다. OpenZFS 2.3에서 도입된 raidz_expansion feature 덕분입니다.


환경 정보

항목
Proxmox VE 9.x
커널 6.8.x (Proxmox 기본 커널)
ZFS 2.3.3 (OpenZFS)
기존 pool 구성 raidz1-0: 4x 4TB HDD
추가 디스크 4TB HDD 1개
확장 후 구성 raidz1-0: 5x 4TB HDD

1. RAIDZ Expansion이 뭔가요?

기존 방식 vs 신방식 비교

방식 설명 단점
vdev 추가 (zpool add) 새로운 RAIDZ vdev를 pool에 추가 (stripe) 디스크가 2배 이상 필요, 한 vdev 장애 시 pool 전체 손실
pool 재구성 pool 삭제 → 더 많은 디스크로 재생성 풀 백업/복원 필요, 다운타임 큼
RAIDZ Expansion (zpool attach) 기존 vdev에 디스크 한 개씩 추가 확장 중 I/O 부하, feature flag 비가역적

동작 원리

zpool attach으로 기존 RAIDZ vdev에 새 디스크를 붙이면, ZFS는 기존 디스크의 모든 할당된 블록을 읽어서 새 디스크를 포함한 전체 RAIDZ 그룹에 재기록합니다. resilvering과 비슷한 과정인데, 단순히 미러를 맞추는 게 아니라 stripe width 자체를 넓히는 작업입니다.

확장이 진행되는 동안에도 pool은 정상적으로 읽기/쓰기가 가능하고, 데이터 이중화도 유지됩니다. 재부팅하거나 pool을 export/import해도 중단된 지점부터 확장이 재개됩니다. 확장이 완료되면 자동으로 pool 전체 scrub이 실행되어 복사된 블록의 체크섬을 검증합니다.

주의: feature flag는 되돌릴 수 없다

raidz_expansion feature가 활성화되면 이 기능을 지원하지 않는 구버전 ZFS로는 해당 pool을 임포트할 수 없습니다. PVE 8이나 ZFS 2.2 이하 환경으로 롤백할 계획이 있다면 이 점을 반드시 고려해야 합니다.


2. 사전 준비

2-1. Proxmox VE 및 ZFS 버전 확인

pveversion
zfs --version

출력 예시:

pve-manager/9.x.x/xxxxxxxxx (running kernel: 6.8.x-x-pve)
zfs-2.3.3-pve1
zfs-kmod-2.3.3-pve1

ZFS 버전이 2.3.0 이상인지 확인합니다. PVE 9이면 기본적으로 충족합니다.

2-2. 반드시 백업 먼저

RAIDZ Expansion은 pool의 모든 데이터를 재배치하는 대규모 작업입니다. 시작 전에 반드시 백업을 확보하세요.

# PBS(Proxmox Backup Server)가 있다면 전체 백업 실행
# 또는 중요 데이터를 외부 디스크로 복사
rsync -avP /mnt/pool/important-data/ /mnt/external-backup/

직접 해보니 확장 자체는 안정적이었지만, 디스크 하나가 확장 중에 죽으면 상황이 복잡해질 수 있습니다. 테스트 환경이라고 백업 없이 진행했다가 개발팀 VM 이미지 날리면 원망 사는 건 순식간이니까, 백업은 선택이 아닙니다.

2-3. feature flag 활성화

먼저 pool을 업그레이드해서 raidz_expansion feature를 사용 가능 상태로 만듭니다.

# pool 업그레이드 (feature flag 활성화)
zpool upgrade POOLNAME

활성화 여부 확인:

zpool get all POOLNAME | grep expansion

출력 예시:

POOLNAME  feature@raidz_expansion  enabled   local

enabled로 표시되면 준비 완료입니다.

2-4. 추가할 디스크 ID 확인

/dev/sda 같은 장치명은 재부팅 시 바뀔 수 있으므로, 반드시 disk-by-id 경로를 사용합니다.

ls -l /dev/disk/by-id/ | grep -v part

출력에서 추가할 디스크의 ID를 확인합니다. 예를 들어:

ata-ST4000VN008-2DR166_XXXXXXXX -> ../../sde

2-5. 현재 pool 상태 확인

zpool status POOLNAME
zpool list -v POOLNAME

RAIDZ vdev 이름(예: raidz1-0)을 확인해둡니다.


3. 실전: RAIDZ에 디스크 추가하기

3-1. zpool attach 실행

핵심 명령어는 한 줄입니다:

zpool attach POOLNAME raidz1-0 /dev/disk/by-id/ata-ST4000VN008-2DR166_XXXXXXXX

각 인자 설명:

  • POOLNAME: 대상 pool 이름
  • raidz1-0: 확장할 vdev 이름 (zpool status에서 확인)
  • /dev/disk/by-id/...: 추가할 새 디스크

실행하면 즉시 확장이 시작됩니다. 별도의 확인 프롬프트 없이 바로 진행되니 명령어를 실행하기 전에 디스크 ID를 다시 한번 확인하세요.

3-2. 확장 진행 상태 확인

zpool status POOLNAME

확장 중 출력 예시:

  pool: POOLNAME
 state: ONLINE
status: One or more devices is currently being resilvered. The pool will
        continue to function in a degraded state.
action: Wait for the resilver to complete.
  scan: raidz expansion in progress since Fri Mar 21 14:30:00 2026
        2.50T / 8.20T done, 0 errors
        12h30m to go
config:

        NAME                                     STATE     READ WRITE CKSUM
        POOLNAME                                 ONLINE       0     0     0
          raidz1-0                               ONLINE       0     0     0
            ata-ST4000VN008-2DR166_XXXXXXX1      ONLINE       0     0     0
            ata-ST4000VN008-2DR166_XXXXXXX2      ONLINE       0     0     0
            ata-ST4000VN008-2DR166_XXXXXXX3      ONLINE       0     0     0
            ata-ST4000VN008-2DR166_XXXXXXX4      ONLINE       0     0     0
            ata-ST4000VN008-2DR166_XXXXXXX5      ONLINE       0     0     0  (expanding)

(expanding) 표시가 새로 추가된 디스크에 붙어있고, 진행률과 예상 잔여 시간을 확인할 수 있습니다.

3-3. 완료 확인

확장이 끝나면 자동으로 scrub이 시작됩니다. 모두 완료된 후 용량을 확인합니다:

zpool list -v POOLNAME

확장 전후 비교 예시:

# 확장 전 (4디스크 raidz1)
POOLNAME  14.5T  12.0T  2.50T   82%  1.00x  ONLINE

# 확장 후 (5디스크 raidz1)
POOLNAME  18.2T  12.0T  6.20T   65%  1.00x  ONLINE

RAIDZ1 기준으로, 4디스크(유효 3디스크분)에서 5디스크(유효 4디스크분)로 약 33% 용량이 증가한 것을 확인할 수 있습니다.

3-4. 디스크를 여러 개 추가하려면

한 번에 하나씩만 추가할 수 있습니다. 첫 번째 확장이 완료된 후에 다음 디스크를 추가하세요.

# 1번째 디스크 확장 완료 확인
zpool status POOLNAME

# 확장 완료 확인 후 2번째 디스크 추가
zpool attach POOLNAME raidz1-0 /dev/disk/by-id/ata-NEXT_DISK_ID

4. 한계와 주의할 점

확장 중 성능 저하

확장 과정은 resilvering과 유사한 I/O 부하가 발생합니다. pool의 모든 할당된 블록을 읽고 다시 쓰는 작업이기 때문에, 확장 중에는 VM이나 컨테이너의 디스크 성능이 체감될 수 있습니다. 사무실 테스트 서버라면 퇴근 후나 주말 등 부하가 적은 시간대에 시작하는 것을 권장합니다.

확장 중 디스크 장애 시

확장 도중 기존 디스크 중 하나가 실패하면, 확장이 일시 중지됩니다. 장애 디스크를 교체하고 resilver가 완료된 후에 확장이 재개됩니다. RAIDZ1이라면 1개, RAIDZ2라면 2개까지의 장애는 데이터 손실 없이 견딜 수 있습니다.

vdev가 너무 넓어지면(wide vdev)

디스크를 계속 추가해서 vdev 하나에 12개 이상의 디스크가 포함되면, 오히려 성능 측면에서 불리해질 수 있습니다. 디스크 수가 많아질수록 stripe width가 넓어져 IOPS 측면에서 비효율적이 됩니다. 이 경우에는 새로운 vdev를 추가(zpool add)하는 방식이 더 나을 수 있습니다.

구버전 롤백 불가

zpool upgrade 후에는 PVE 8이나 ZFS 2.2 이하 환경으로 해당 pool을 가져갈 수 없습니다. 특히 rpool(루트 pool)에 이 작업을 적용할 때는 더욱 신중해야 합니다. rpool을 확장한 후 PVE 8로 다운그레이드하면 부팅 자체가 불가능해질 수 있습니다.

parity 수준은 변하지 않는다

RAIDZ1에 디스크를 추가해도 여전히 RAIDZ1입니다. 즉, 허용 가능한 동시 디스크 장애 수는 변하지 않습니다. 용량만 늘어날 뿐, 내결함성이 강화되는 것은 아닙니다.


5. zpool add vs zpool attach 차이 정리

구분 zpool add zpool attach
동작 pool에 새로운 vdev를 추가 기존 vdev에 디스크를 추가
구조 변화 pool = 기존 vdev + 새 vdev (stripe) 기존 vdev의 width가 넓어짐
필요 디스크 수 새 vdev 구성에 필요한 수 (최소 2~3개) 1개부터 가능
IOPS vdev가 늘어나 IOPS 향상 vdev 수 변화 없음 (IOPS 동일)
용량 효율 새 vdev의 parity 오버헤드 추가 발생 기존 vdev의 parity 비율 개선
최소 ZFS 버전 제한 없음 ZFS 2.3.0 이상 필요
feature flag 불필요 raidz_expansion 필수 (비가역적)
적합한 상황 디스크 여유분이 많을 때, IOPS 중시 디스크 1~2개만 추가할 때, 테스트 환경

테스트 서버에서 여분 디스크 한두 개만 꽂아서 용량을 늘리고 싶다면 zpool attach(RAIDZ Expansion)가 훨씬 현실적인 선택입니다. 반면 프로덕션 환경에서 성능을 중시한다면 zpool add로 vdev를 추가하는 방식이 유리합니다.


마무리

사무실 테스트 서버에서 직접 해보고 나니, 이게 왜 ZFS 커뮤니티에서 10년 넘게 요청해왔던 기능인지 실감했습니다. 디스크 하나 추가하는 데 pool을 날리고 백업-복원에 하루씩 쓰던 시절이 끝났습니다.

정리하면:

  • Proxmox VE 9 + ZFS 2.3 이상이면 바로 사용 가능
  • zpool upgradezpool attach 한 줄로 끝
  • 확장 중에도 pool 정상 운영 가능
  • 단, feature flag는 되돌릴 수 없으니 업그레이드 전 꼭 확인

다음 편에서는 Proxmox PBS 백업 자동화 전략이나 ZFS 스냅샷을 활용한 데이터 보호 방법을 다뤄볼 예정입니다.


참고 링크