Proxmox ZFS에서 부팅 가능한 미러 구성하기 [완전 가이드]

SB신범
5분 읽기
조회수 로딩 중...

요즘 홈 서버나 개인 클라우드 환경으로 Proxmox VE를 구축하는 분들이 많아지고 있습니다. 저도 최근 Proxmox 서버를 구축하면서 디스크 이중화에 대한 고민이 있었는데요. 특히 OS가 설치된 ZFS 디스크를 미러(mirror)로 구성하면서 생각보다 많은 난관에 부딪혔습니다. 이번 글에서는 Proxmox ZFS 시스템에 새 디스크를 추가하여 부팅까지 가능한 미러 구성을 만드는 과정을 공유하려 합니다.

왜 ZFS 미러와 부팅 이중화가 필요할까?

본격적인 설정에 앞서, ZFS 미러와 부팅 이중화가 왜 중요한지 이야기해볼게요. ZFS는 강력한 데이터 보호와 무결성 기능을 제공하는 파일 시스템이지만, 디스크 자체가 물리적으로 망가지면 복구가 어렵습니다.

특히 OS가 설치된 디스크에 문제가 생기면:

  • 서버 부팅 불가능
  • 데이터 복구 어려움
  • 전체 시스템 재설치 필요

이러한 위험을 방지하기 위해 ZFS 미러 구성을 통해 동일한 데이터를 두 디스크에 실시간으로 복제하고, 양쪽 모두에서 부팅이 가능하게 만들면 한쪽 디스크에 문제가 생겨도 시스템을 계속 운영할 수 있습니다.

그런데 이 설정이 생각보다 까다로웠습니다. 특히 기존에 이미 단일 디스크로 설치된 Proxmox ZFS 시스템에 미러를 추가하는 과정에서 여러 문제에 부딪혔습니다.

환경과 목표

현재 환경

  • Proxmox VE 8.0
  • OS 설치 디스크: NVMe SSD (465.8GB, /dev/nvme0n1)
  • ZFS 단일 디스크로 OS 설치됨 (rpool)
  • 추가할 디스크: SATA SSD (465.8GB, /dev/sdd)
  • 기존 Ceph 스토리지 서비스 실행 중 (sda, sdb, sdc)

목표

  1. rpool을 미러 구성으로 확장 (NVMe + SATA SSD)
  2. 두 디스크 모두에서 부팅 가능하도록 설정
  3. 기존 시스템 운영/데이터에 영향 없이 작업

진행 과정과 직면한 문제들

처음에는 단순히 zpool attach 명령어로 새 디스크를 추가하면 될 것으로 생각했지만, 실제로는 몇 가지 중요한 문제들에 직면했습니다.

문제 1: 디스크에 이미 파티션이 존재

/dev/sdd에 이미 기존 파티션이 있어 바로 ZFS 미러로 추가할 수 없었습니다.

root@proxmox-1:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sdd 8:48 0 465.8G 0 disk └─sdd1 8:49 0 465.8G 0 part ... nvme0n1 259:0 0 465.8G 0 disk ├─nvme0n1p1 259:1 0 1007K 0 part ├─nvme0n1p2 259:2 0 1G 0 part └─nvme0n1p3 259:3 0 464.8G 0 part

문제 2: proxmox-boot-tool 오류

부팅 가능한 디스크로 구성하려고 했을 때 다음과 같은 오류가 발생했습니다:

root@proxmox-1:~# proxmox-boot-tool init /dev/sdd E: block device '/dev/sdd' has children!

이 오류는 디스크에 이미 파티션이 있거나 ZFS 풀에 포함된 경우 발생합니다.

문제 3: ZFS 디바이스 이름 불일치

ZFS 미러 구성을 시도했을 때 디바이스 이름 불일치 문제가 발생했습니다:

root@proxmox-1:~# zpool attach rpool nvme0n1p3 /dev/sdd3 cannot attach /dev/sdd3 to nvme0n1p3: no such device in pool

실제 ZFS에서는 /dev/nvme0n1p3 대신 nvme-eui.[일련번호]-part3 형식의 이름을 사용하고 있었기 때문입니다.

해결 방법: 단계별 접근

이러한 문제들을 해결하기 위해 단계별로 접근했습니다.

1. 현재 ZFS 풀 상태 확인

bash
1zpool status

출력:

pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:38 with 0 errors on Sun May 11 00:24:39 2025 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 nvme-eui.e8238fa6bf530001001b444a485bfbd9-part3 ONLINE 0 0 0 errors: No known data errors

2. 새 디스크의 기존 파티션 제거

bash
1# fdisk로 제거해도 되지만, sgdisk로 전체 삭제가 더 깔끔합니다 2sgdisk --zap-all /dev/sdd

3. 부팅에 필요한 파티션 구조 생성

bash
1# 1MiB BIOS 부트 파티션 2sgdisk -n 1:1M:+1M -t 1:ef02 /dev/sdd 3 4# 512MiB EFI 시스템 파티션 5sgdisk -n 2:2M:+512M -t 2:ef00 /dev/sdd 6 7# 나머지 공간은 ZFS용 파티션 8sgdisk -n 3:0:0 -t 3:bf01 /dev/sdd

4. EFI 파티션 포맷

bash
1mkfs.vfat -F32 /dev/sdd2

5. 부트 구성 초기화

부트 파티션을 초기화할 때는 디스크 전체가 아닌 EFI 파티션을 지정해야 합니다:

bash
1proxmox-boot-tool init /dev/sdd2

이전에 자주 실패하던 이유는 /dev/sdd 전체에 대해 명령을 시도했기 때문이었습니다.

6. ZFS 미러 구성

ZFS 미러 구성 시 정확한 디바이스 이름을 지정해야 합니다:

bash
1# zpool status에서 확인한 정확한 디바이스 이름 사용 2zpool attach rpool nvme-eui.e8238fa6bf530001001b444a485bfbd9-part3 /dev/sdd3

7. 리실버링 및 상태 확인

bash
1# 진행 상황 확인 2zpool status

출력 예시:

pool: rpool state: ONLINE scan: resilver in progress since Wed May 11 12:32:17 2025 201G scanned at 127M/s, 102G issued at 64.2M/s, 201G total 0B resilvered, 50.76% done, 0 days 00:26:12 to go config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 nvme-eui.e8238fa6bf530001001b444a485bfbd9-part3 ONLINE 0 0 0 sdd3 ONLINE 0 0 0 (resilvering)

리실버링이 완료되면 두 디스크 간에 데이터가 완전히 동기화됩니다.

8. 부트 상태 최종 확인

bash
1proxmox-boot-tool status

출력:

System currently booted with legacy bios 31A2-2AFB is configured with: grub (versions: 6.8.12-10-pve, 6.8.12-9-pve) A70D-BCF6 is configured with: grub (versions: 6.8.12-10-pve, 6.8.12-9-pve)

31A2-2AFB(새 디스크의 EFI 파티션)과 A70D-BCF6(기존 부트 디스크) 모두 부팅 가능한 상태로 설정되었습니다.

가장 어려웠던 부분과 해결책

이 과정에서 가장 어려웠던 부분들과 그 해결책을 정리해보았습니다.

1. proxmox-boot-tool과 디스크 파티셔닝

문제: proxmox-boot-tool은 기본적으로 디스크 전체를 재구성하려고 합니다. 하지만 이미 파티션이 있거나 ZFS로 사용 중인 디스크에서는 "has children" 오류가 발생합니다.

해결책:

  • 파티션을 수동으로 생성하고
  • EFI 파티션에 직접 init 명령을 적용
  • 예: proxmox-boot-tool init /dev/sdd2 (전체 디스크가 아닌 EFI 파티션을 대상으로)

2. ZFS 디바이스 이름 참조

문제: ZFS는 /dev/nvme0n1p3 같은 기본 경로 대신 nvme-eui.[일련번호]-part3와 같은 고유 ID 경로를 사용합니다.

해결책:

  • zpool status로 정확한 디바이스 이름 확인
  • 해당 이름을 zpool attach 명령에 정확히 사용

3. 부팅 구성 순서

문제: 부팅 가능한 ZFS 미러를 구성하기 위한 명확한 순서가 중요합니다.

해결책:

  1. 파티션 구조 생성
  2. 부트 파티션 초기화
  3. ZFS 미러 구성
  4. 부트 상태 확인

이 순서를 지키면 문제 없이 부팅 가능한 ZFS 미러를 구성할 수 있습니다.

이점과 주의사항

🟢 이점

  1. 하드웨어 장애에 대한 완벽한 이중화 제공
  2. 한 디스크에 문제가 생겨도 시스템 계속 운영 가능
  3. ZFS의 무결성 검사로 데이터 손상 위험 최소화

🟡 취향 요소

  1. 미러 vs RAIDZ - 두 개의 디스크만 있다면 미러 구성이 더 적합
  2. SSD vs HDD - OS 디스크는 SSD 사용이 권장됨

🔴 주의사항

  1. 미러 구성 후 디스크 공간은 절반으로 줄어듦
  2. 리실버링 과정은 시스템 부하를 발생시킬 수 있음
  3. 부팅 테스트는 반드시 실제 환경에서 확인 필요

실제 적용 후기

두 디스크를 미러로 구성한 후 테스트를 위해 실제로 NVMe 디스크를 분리하고 SATA SSD만으로 부팅을 시도했습니다. 몇 초 정도 부팅 시간이 더 걸렸지만, 시스템은 문제없이 정상적으로 부팅되었습니다.

또한, 이중화 덕분에 NVMe 디스크를 새 모델로 교체하는 작업도 서버를 장시간 중단하지 않고 수행할 수 있었습니다. 디스크 하나를 분리하고 새 디스크를 연결한 후 다시 ZFS 풀에 추가하면, 자동으로 데이터가 동기화되어 이중화가 복원됩니다.

이 구성은 특히 24/7 운영이 필요한 홈 서버나 소규모 비즈니스 환경에서 다운타임을 최소화하는 데 큰 도움이 됩니다.

마무리

Proxmox에서 ZFS 미러 구성은 단순한 데이터 이중화를 넘어 시스템 전체의 가용성을 높이는 중요한 작업입니다. 비록 설정 과정이 다소 복잡하고 여러 문제에 부딪힐 수 있지만, 적절한 단계를 따르면 안정적이고 신뢰할 수 있는 서버 환경을 구축할 수 있습니다.

이 글이 Proxmox ZFS 환경에서 미러 구성을 고민하는 분들에게 도움이 되길 바랍니다. 추가 질문이나 다른 Proxmox 관련 팁이 필요하시면 댓글로 남겨주세요! 🙌

다음 글에서는 Proxmox에서 Ceph 스토리지 클러스터를 구성하는 방법에 대해 다뤄보겠습니다.