ZFS mirror로 Proxmox VE를 설치해 두면 부팅 디스크 하나에 문제가 생겨도 나머지 디스크로 시스템을 유지할 수 있습니다. 그런데 새 디스크를 넣고 zpool replace를 실행하는 것만으로 교체가 끝나는 것은 아닙니다. 데이터가 정상적으로 복제된 디스크와, 실제로 부팅할 수 있는 디스크는 확인할 항목이 다릅니다.
이 글에서는 ZFS 데이터 파티션을 교체하는 과정과 새 디스크의 부팅 환경을 준비하는 과정을 나누어 정리합니다. 명령어는 실제 장치 이름으로 바꿔야 하는 절차 예시이며, 특정 노드에서 실행한 로그를 그대로 옮긴 것은 아닙니다.

먼저 부팅 디스크와 Ceph 디스크를 구분하기
Proxmox와 Ceph를 함께 운영하면 같은 노드에 OS용 디스크와 OSD용 디스크가 섞여 있을 수 있습니다. 여기서 교체하는 대상은 Proxmox의 루트 풀을 구성하는 부팅 디스크입니다. Ceph OSD 교체 절차와 섞어서 진행하면 안 됩니다.
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
zpool status -P rpool
proxmox-boot-tool status
pvecm status
ceph -srpool은 흔히 쓰는 이름이지만 실제 풀 이름이 다르면 바꿔야 합니다. 장치를 고를 때는 /dev/nvme0n1 같은 순서 기반 이름만 보지 말고 모델·시리얼과 /dev/disk/by-id/를 대조합니다. 같은 256GB 제품이라도 실제 섹터 수는 다를 수 있으므로 새 디스크가 기존 파티션을 수용할 수 있는지도 확인합니다.
클러스터에서는 한 노드씩 작업합니다. 해당 노드의 VM·컨테이너를 어떻게 유지하거나 이동할지, 노드를 내려도 quorum과 Ceph 가용성이 유지되는지를 먼저 판단해야 합니다. Mirror는 디스크 고장에 대비하는 장치이며, 잘못된 디스크에 명령을 내리는 실수까지 되돌려 주지는 않습니다. 복구 가능한 백업도 별도로 확보합니다.
파티션 표를 복제한 뒤 GUID를 새로 만들기
Proxmox 설치 디스크에는 ZFS가 사용하는 영역 외에 부팅에 필요한 파티션이 있습니다. 정상인 부팅 디스크의 파티션 구성을 새 디스크로 복제하되, 새 디스크의 GUID는 다시 생성합니다. 아래의 SOURCE_DISK는 정상 디스크이고 NEW_DISK는 덮어써도 되는 교체용 디스크입니다. 두 방향을 바꾸면 정상 디스크를 손상시킬 수 있습니다.
# Bash 예시. 실제 by-id 경로를 확인해 지정합니다.
SOURCE_DISK=/dev/disk/by-id/REPLACE_WITH_HEALTHY_DISK
NEW_DISK=/dev/disk/by-id/REPLACE_WITH_NEW_DISK
# 복제 대상은 NEW_DISK입니다.
sgdisk "$SOURCE_DISK" -R "$NEW_DISK"
sgdisk -G "$NEW_DISK"
partprobe "$NEW_DISK"
udevadm settle
lsblk -o NAME,SIZE,FSTYPE,PARTUUID "$NEW_DISK"파티션 번호는 실제 구성을 보고 결정합니다. Proxmox 설치 프로그램이 만든 일반적인 구성에서 ESP가 2번인 경우가 많지만, 사용자 지정 설치까지 같은 번호라고 가정하지는 않습니다. ZFS가 디스크 전체를 사용하는지 파티션을 사용하는지도 zpool status -P로 확인해야 합니다.
ZFS 파티션 교체와 resilver 확인
파티션 준비가 끝나면 풀의 기존 구성원을 새 ZFS 파티션으로 교체합니다. 여기서 지정하는 새 대상은 앞 단계의 디스크 전체가 아니라 확인한 ZFS 파티션입니다.
POOL=rpool
OLD_ZFS=/dev/disk/by-id/REPLACE_WITH_OLD_DISK-part3
NEW_ZFS=/dev/disk/by-id/REPLACE_WITH_NEW_DISK-part3
zpool replace "$POOL" "$OLD_ZFS" "$NEW_ZFS"
zpool status -v "$POOL"위의 part3 역시 예시입니다. 기존 디스크가 사라져 경로를 사용할 수 없다면 zpool status에 표시된 기존 구성원 식별자를 확인합니다. 장치가 사용 중이라는 이유로 교체가 거절될 때는 바로 -f를 붙이지 말고, 새 대상에 다른 풀이나 필요한 데이터가 남아 있지 않은지부터 확인합니다.
Resilver는 정상 구성원을 바탕으로 새 디스크의 데이터를 맞추는 과정입니다. 진행 중에는 디스크 I/O가 늘 수 있습니다. 두 디스크를 모두 바꿀 계획이어도 첫 번째 교체와 resilver, 부팅 설정 확인을 마친 뒤 두 번째로 넘어갑니다. 한꺼번에 빼는 방식으로 mirror의 이점을 없앨 이유는 없습니다.
새 디스크의 부팅 환경도 따로 준비하기
이 단계에서 앞서 확인한 proxmox-boot-tool status가 기준이 됩니다. Proxmox가 어떤 부트로더를 사용하고 어떤 ESP를 관리하는지에 따라 명령이 달라집니다. Proxmox 공식 교체 절차도 이 부분을 별도 단계로 설명합니다.
# 새 디스크의 ESP만 지정합니다. 이 파티션은 포맷됩니다.
NEW_ESP=/dev/disk/by-id/REPLACE_WITH_NEW_DISK-part2
proxmox-boot-tool format "$NEW_ESP"
# 현재 구성이 systemd-boot인 경우
proxmox-boot-tool init "$NEW_ESP"
# 현재 구성이 GRUB인 경우에는 위 init 대신 사용
# proxmox-boot-tool init "$NEW_ESP" grub
proxmox-boot-tool refresh
proxmox-boot-tool status두 init 방식을 모두 실행하는 예제가 아닙니다. 특히 Secure Boot 환경을 포함해 기존 상태가 GRUB으로 표시되면 해당 모드를 맞춰야 합니다. proxmox-boot-tool로 관리하지 않는 구형 plain GRUB 설치라면 공식 문서의 grub-install 절차를 따라야 합니다. UEFI 부팅 항목은 efibootmgr -v로 확인할 수 있지만, 항목이 보이는 것만으로 새 디스크의 실제 부팅까지 검증되는 것은 아닙니다.
ONLINE 이후에 확인할 것
풀 상태가 ONLINE으로 돌아오면 데이터 복제가 정상화됐는지 확인할 수 있습니다. 여기에 부팅 가능 여부와 클러스터 복귀까지 확인해야 교체 작업이 끝납니다.
- Resilver가 완료됐고 READ·WRITE·CKSUM 오류가 증가하지 않는지 확인합니다.
- 새 ESP가 부팅 도구에 등록됐는지 확인합니다.
- 작업 시간을 잡고 새 디스크를 통한 부팅을 검증합니다. 콘솔과 복구 경로를 준비한 상태에서 진행합니다.
- 재부팅 뒤 풀 상태, quorum, Ceph 상태와 VM·컨테이너의 서비스를 확인합니다.
Scrub은 저장된 데이터의 무결성을 검사하는 별도 작업입니다. 필요하면 교체 후 여유 있는 시간에 수행하고, 시작했다는 사실보다 완료 결과를 남기는 것이 좋습니다. 교체 소요 시간과 검사 완료 결과를 함께 기록해 두면 다음 작업을 준비할 때 참고할 수 있습니다.
부팅 디스크 교체를 준비할 때 가장 먼저 메모할 것은 새 SSD의 모델보다도 현재 풀의 구성, 파티션 배치, 부트로더 종류입니다. 이 세 가지가 정리돼 있으면 교체 명령을 어느 대상에 적용해야 하는지 명확해집니다.

답글 남기기