개요
이 문서는 RAID1(미러) 배열에서 하드디스크 고장을 시뮬레이션하고, 새 드라이브로 교체하여 정상 상태로 복구하는 과정을 설명합니다. 정의: RAID1 — 두 개 이상의 디스크에 데이터를 동일하게 저장해 한 디스크가 고장나도 시스템이 동작하도록 하는 미러링 방식.
중요: 본 예제에서는 /dev/sdb가 고장난 것으로 가정합니다. 실제 환경에서는 대상 디스크 이름(/dev/sda 또는 /dev/sdb 등)을 정확히 확인한 후 명령을 실행하세요.
준비: 무엇을 확인해야 하나요
- 현재 RAID 상태 확인: cat /proc/mdstat
- 파티션 정보 확인: fdisk -l
- 관리자 권한(root) 필요
- 새 물리 디스크는 빈 상태여야 하며 기존 디스크와 동일하거나 더 큰 용량 권장
중요: 잘못된 디스크에 명령을 실행하면 데이터가 손실될 수 있습니다. 항상 디스크 식별자(dev path)를 두 번 확인하세요.
1단계 — 고장 시뮬레이션
디스크를 물리적으로 제거하거나 소프트웨어적으로 제거(fail + remove)할 수 있습니다. 아래 예시는 소프트 제거 방법입니다. 대상이 /dev/sdb인 경우:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3
시스템을 종료하려면:
shutdown -h now
물리 디스크를 교체한 후 시스템을 부팅하면 정상적으로 시작해야 합니다.
2단계 — 디스크 제거 후 상태 확인
부팅 후 RAID 상태 확인:
cat /proc/mdstat
예상되는 degraded(저하) 상태 출력 예시:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
200704 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
522048 blocks [2/1] [U_]
md2 : active raid1 sda3[0]
9759360 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
파티션 정보 확인:
fdisk -l
(원본 예시 출력을 참조하여 /dev/sdb에 파티션 테이블이 없는 상태를 확인합니다.)
3단계 — 파티션 테이블 복사
정상 디스크(/dev/sda)의 파티션 테이블을 새 디스크(/dev/sdb)로 복사합니다.
sfdisk -d /dev/sda | sfdisk /dev/sdb
에러가 발생하면 –force 옵션을 시도할 수 있습니다:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
성공 시 출력 예시:
Successfully wrote the new partition table
Re-reading the partition table ...
참고: sfdisk가 섹터 서명(msdos signature) 관련 경고를 낼 수 있으나, 파티션이 정상적으로 생성되면 다음 단계로 진행합니다.
4단계 — 이전 RAID 잔재 제거
이전 RAID 슈퍼블록이 남아 있을 수 있으므로 새 파티션에서 제거합니다:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3
5단계 — 새 디스크를 RAID에 추가하고 동기화 시작
파티션을 RAID 장치에 추가합니다:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3
동기화(리빌드)가 자동으로 시작됩니다. 상태 확인:
cat /proc/mdstat
동기화 진행 예시:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
200704 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
522048 blocks [2/2] [UU]
md2 : active raid1 sdb3[2] sda3[0]
9759360 blocks [2/1] [U_]
[=======>.............] recovery = 39.4% (3846400/9759360) finish=1.7min speed=55890K/sec
unused devices:
[root@server1 ~]#
완료되면 모든 mdX 라인에서 [UU] 상태가 되어야 합니다.
6단계 — 부트로더 설치
GRUB을 실행하여 두 하드디스크(예: hd0, hd1)에 부트로더를 설치합니다.
grub
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
이로써 RAID1에서 실패한 드라이브를 교체하고 시스템을 정상 상태로 복구했습니다.
검증 기준
- /proc/mdstat에서 모든 배열이 [UU]로 표시되고 recovery가 없음
- fdisk -l에서 두 물리 디스크의 파티션 테이블이 동일함
- 시스템 재부팅 후 OS가 정상적으로 기동됨
- 부트로더가 양쪽 디스크에 설치되어 한 디스크가 사라져도 부팅 가능
운영자용 단계별 체크리스트
- (사전) 중요 데이터 백업 및 스냅샷 생성
- RAID 상태 확인: cat /proc/mdstat
- 실패 디스크 확인: lsblk, fdisk -l
- 실패 시 물리/소프트 제거: mdadm –manage … –fail/–remove
- 시스템 종료(필요 시) 및 디스크 교체
- sfdisk로 파티션 복사
- mdadm –zero-superblock로 슈퍼블록 정리
- mdadm -a로 디스크 추가 및 동기화 확인
- grub으로 부트로더 설치
- 복구 완료 후 롤백/문서화 (교체 일자, 시리얼, 원인 분석)
문제 해결: 흔한 오류와 해결 방법
sfdisk: ERROR: sector 0 does not have an msdos signature
- 설명: 대상 디스크에 파티션 테이블이 없거나 손상됨. 보통 –force 옵션으로 덮어 쓸 수 있음.
- 조치: sfdisk -d /dev/sda | sfdisk –force /dev/sdb
mdadm이 디스크를 추가하지 않음
- 설명: 파티션 유형(Id)이 올바르게 설정되지 않았거나 슈퍼블록 잔여물이 있음.
- 조치: fdisk로 파티션 타입(fd) 확인, mdadm –zero-superblock으로 잔여 슈퍼블록 제거
동기화 속도가 매우 느림
- 설명: I/O 부하 또는 sysctl의 RAID 속도 제한
- 조치: /proc/sys/dev/raid/speed_limit_min 및 speed_limit_max 조정(신중히)
부팅 불가(한 디스크만으로 부팅 시)
- 설명: 부트로더가 다른 디스크에 설치되지 않았음.
- 조치: grub으로 양쪽 디스크에 setup 수행
롤백/인시던트 기록 권장 항목
- 교체 일시(UTC 또는 로컬 시간)
- 실패한 디스크 장치명 및 시리얼
- 교체한 새 디스크 장치명 및 시리얼
- mdadm 및 sfdisk 출력 로그(명령과 결과)
- 동기화 소요 시간 및 평균 속도
- 재부팅 여부 및 결과
의사결정 흐름(간단한 플로우)
flowchart TD
A[디스크 장애 탐지] --> B{디스크 완전 고장?}
B -- 예 --> C[시스템 종료 후 물리 교체]
B -- 아니오 --> D[소프트 제거'fail/remove']
C --> E[새 디스크 삽입]
D --> E
E --> F[파티션 복사'sfdisk']
F --> G[슈퍼블록 제거'mdadm --zero-superblock']
G --> H[디스크 추가'mdadm -a']
H --> I[동기화 모니터링'cat /proc/mdstat']
I --> J[부트로더 설치 및 검증]
J --> K[완료 및 문서화]
검토: 언제 이 방법이 실패할 수 있나
- 원본 디스크(/dev/sda)가 손상되어 파티션 테이블을 읽을 수 없는 경우 파티션 복사가 불가능합니다. 이때는 백업에서 복원하거나 수동으로 파티션을 생성하고 파일시스템을 복원해야 합니다.
- 두 디스크가 동시에 손상되는 경우 RAID1로도 데이터 복구가 불가능할 수 있습니다.
보안 및 개인정보 주의
- 실환경에서 디스크를 조작할 때는 민감한 로그나 키파일이 포함되어 있지 않은지 확인하세요. 디스크를 폐기할 때는 안전하게 Wipe(초기화) 처리해야 합니다.
1줄 용어집
- mdadm: 리눅스 소프트웨어 RAID 관리 도구
- /proc/mdstat: 커널이 보고하는 RAID 상태 파일
- sfdisk: 파티션 테이블을 덤프/복원하는 도구
- superblock(슈퍼블록): mdadm이 파티션에 쓰는 RAID 메타데이터
링크
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- CentOS: http://www.centos.org/
요약
- RAID1에서 디스크 고장을 시뮬레이션하고 새 디스크를 추가하려면, 파티션 테이블 복사 -> 슈퍼블록 제거 -> mdadm으로 재추가 -> 동기화 모니터링 -> 부트로더 재설치 순으로 진행합니다.
- 각 단계에서 출력과 상태를 확인하고, 모든 배열이 [UU]로 표시되는지 검증해야 합니다.
- 교체 작업 후 반드시 문서화하여 향후 문제 분석에 활용하세요.