Infra

[Proxmox] ZFS RAID 복구 시나리오

jykim23 2025. 11. 29. 18:40
728x90

이 글은 아직 Proxmox 구축 전 단계에서 Gemini와 대화하며 구성된 자료입니다. 추후 테스트 후 수정 예정입니다.

준비 사항

  • 서버 상태: Proxmox가 SSD 2개에 ZFS RAID 1(Mirror)로 설치되어 있어야 합니다.
  • 마음가짐: "나는 지금 이 서버를 고장 낼 것이다."

1단계: 정상 상태 확인 (Baseline)

먼저 서버가 건강한지 확인하고, 디스크의 시리얼 넘버나 ID를 기록해둡니다.

  1. 상태 확인:
    • state: ONLINE 확인.
    • rpool 아래에 두 개의 디스크가 보일 것입니다.
  2. zpool status -v
  3. 디스크 ID 확인 (중요):
    • 어떤 게 sda이고 sdb인지, 실제 모델명과 시리얼 번호를 메모해둡니다.
  4. ls -l /dev/disk/by-id/

2단계: 장애 발생 시뮬레이션 (물리적 제거)

가장 확실한 훈련은 선을 뽑는 것입니다.

  1. 서버 종료: shutdown -h now
  2. 디스크 제거: 본체를 열고 두 번째 SSD (예: /dev/sdb)의 SATA/전원 케이블을 뽑습니다. (제거한 SSD는 잠시 옆에 둡니다.)
  3. 서버 부팅: 전원을 켭니다.
    • 체크 포인트: 서버가 남은 SSD 하나(sda)만으로 정상 부팅이 되는지 확인합니다.
    • 만약 부팅이 안 된다면? BIOS 부팅 순서(Boot Order)가 뽑아버린 SSD로만 잡혀 있었던 겁니다. BIOS에서 남은 SSD를 부팅 1순위로 잡아주세요. (이걸 미리 발견하는 것도 훈련의 성과입니다.)
  4. 장애 상황 확인:
    부팅 후 셸에서 명령어를 입력합니다.
    • 결과: state: DEGRADED 라고 빨간 글씨가 뜨고, 디스크 한 녀석이 UNAVAIL 또는 REMOVED로 표시됩니다.
    • 의미: "주인님, 디스크 하나가 죽었지만, 서비스는 살아있습니다."
  5. zpool status -v

3단계: 교체 상황 연출 (디스크 초기화)

이제 뽑아두었던 SSD를 다시 꽂을 겁니다. 하지만 그냥 꽂으면 Proxmox가 "어? 너 아까 나갔던 그 친구네?" 하고 그냥 다시 받아들일 수 있습니다.

"완전히 새로운 깡통 디스크를 사 왔다"고 가정하기 위해, 다시 꽂은 SSD를 초기화(Wipe)해야 합니다.

  1. 서버 종료 후 디스크 재장착: 아까 뽑았던 SSD를 다시 연결하고 부팅합니다.
  2. 디스크 식별: 다시 연결한 디스크가 /dev/sdb로 잡혔는지 확인합니다 (lsblk 명령 사용).
  3. 디스크 초기화 (Wipe):
    주의: 반드시 방금 꽂은(훈련용) 디스크인지 확인하세요! (살아있는 sda를 밀면 안 됩니다.)
    # sdb의 파티션 정보를 싹 날려서 '새 디스크'처럼 만듭니다.
    sgdisk --zap-all /dev/sdb
    wipefs -a /dev/sdb
    이제 /dev/sdb는 공장에서 막 나온 2TB짜리 깡통 디스크가 되었습니다.

4단계: 복구 작전 수행 (Recovery SOP)

이제 ISO 27001 매뉴얼에 들어갈 표준 복구 절차를 수행합니다.

1. 파티션 테이블 복제

살아있는 sda의 파티션 지도를 sdb에 그립니다.

# sda -> sdb 복제
sgdisk /dev/sda -R /dev/sdb

# sdb의 주민등록번호(UUID)를 새로 발급 (충돌 방지)
sgdisk -G /dev/sdb

2. ZFS 풀에 새 디스크 투입 (Resilvering)

Proxmox는 보통 파티션 3번을 ZFS 데이터용으로 씁니다. (lsblk로 확인 가능)

# 기존에 죽은(UNAVAIL) 디스크를 sdb3 파티션으로 교체
zpool replace rpool /dev/sdb3
# 만약 에러가 나면, 기존 고장난 디스크의 ID(긴 숫자)를 입력해야 할 수도 있습니다.
# 예: zpool replace rpool 1234567890 /dev/sdb3
  • 명령어를 치자마자 zpool status -v를 입력해보세요. resilvering 진행률이 올라가는 게 보일 겁니다.

3. 부트로더 심기 (필수)

나중에 sda가 죽었을 때 sdb로 부팅할 수 있게 만듭니다. (파티션 2번이 보통 EFI 부팅 영역입니다.)

proxmox-boot-tool format /dev/sdb2
proxmox-boot-tool init /dev/sdb2

5단계: 훈련 종료 및 문서화

  1. 최종 확인: zpool status -v 결과가 다시 ONLINE으로 돌아왔고, resilvered 완료 메시지가 떴는지 확인합니다.
  2. 부팅 테스트: (선택사항) 이번엔 반대로 sda를 뽑고, 방금 살려낸 sdb만으로 부팅이 잘 되는지 확인합니다. 이것까지 성공하면 완벽한 이중화가 증명된 것입니다.

💡 팁: ISO 27001 증빙 자료 만들기

훈련을 마치고 나면 다음 내용을 간단한 보고서로 남기세요. 심사관이 아주 좋아합니다.

  • 훈련 일시: 2025년 X월 X일
  • 훈련 시나리오: 운영 중 디스크 1개 물리적 파손 가정
  • 수행 결과:
    • 디스크 제거 시 서비스 중단 여부: 없음 (성공)
    • 복구 소요 시간: 약 15분 (성공)
    • 특이사항: BIOS 부팅 순서 재조정 필요했음 (조치 완료)
728x90