개요
이 문서는 RAID1(미러링) 구성에서 실패한 하드디스크를 교체하고 복구하는 실무 가이드입니다. 실습은 /dev/hda가 살아있고 /dev/hdb를 교체하는 시나리오로 설명합니다. mdadm, sfdisk, grub 등 표준 도구를 사용합니다.
중요: 실제 서버에서 작업하기 전에 전체 백업을 꼭 확보하세요.
1. 실패 디스크 시뮬레이션
시스템에서 /dev/hdb가 실패했다고 가정합니다. 물리적으로 디스크를 제거하거나 소프트웨어적으로 다음 명령으로 실패 상태로 표시할 수 있습니다.
mdadm --manage /dev/md0 --fail /dev/hdb1
mdadm --manage /dev/md1 --fail /dev/hdb5
mdadm --manage /dev/md2 --fail /dev/hdb6실패 상태로 표시한 다음 어레이에서 제거합니다:
mdadm --manage /dev/md0 --remove /dev/hdb1
mdadm --manage /dev/md1 --remove /dev/hdb5
mdadm --manage /dev/md2 --remove /dev/hdb6시스템을 종료하고(halt) 디스크를 물리적으로 교체하거나, 시뮬레이션 목적이면 새 디스크를 연결합니다.
shutdown -h now교체 디스크를 장착하고 시스템을 부팅합니다. 부팅이 정상인지 확인합니다.
2. 어레이 상태 확인
부팅 후 손상된(감소된) 어레이 상태를 확인합니다.
cat /proc/mdstat예시 출력(감소 상태):
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda5[0]
417536 blocks [2/1] [U_]
md0 : active raid1 hda1[0]
176576 blocks [2/1] [U_]
md2 : active raid1 hda6[0]
4642688 blocks [2/1] [U_]
unused devices:
[root@server1 ~]# 파티션 테이블과 디스크 상태도 확인합니다:
fdisk -l(출력 예시는 원문과 동일하므로 생략하지 않고 그대로 참고하세요.)
3. 파티션 테이블 복사
살아있는 디스크(/dev/hda)의 파티션 테이블을 새 디스크(/dev/hdb)로 복사합니다. sfdisk를 사용합니다.
sfdisk -d /dev/hda | sfdisk --force /dev/hdb명령 실행 시 경고가 나타날 수 있으나, 메시지를 읽고 문제 없으면 진행합니다. 예시 출력:
[root@server1 #] sfdisk -d /dev/hda | sfdisk --force /dev/hdb
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Checking that no-one is using this disk right now ...
OK
Disk /dev/hdb: 10402 cylinders, 16 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/hdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/hdb1 * 63 353429 353367 fd Linux raid autodetect
/dev/hdb2 353430 10474379 10120950 5 Extended
/dev/hdb3 0 - 0 0 Empty
/dev/hdb4 0 - 0 0 Empty
/dev/hdb5 353493 1188809 835317 fd Linux raid autodetect
/dev/hdb6 1188873 10474379 9285507 fd Linux raid autodetect
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@server1 ~]#중요: sfdisk가 파티션 경계에 대해 경고를 낼 수 있지만, 원래 시스템에서 사용 중인 방식과 호환되는지 반드시 확인하세요.
4. 슈퍼블록 초기화 및 어레이에 추가
이전 RAID 흔적을 제거(슈퍼블록 제로화)하고 새 파티션을 어레이에 추가합니다.
mdadm --zero-superblock /dev/hdb1
mdadm --zero-superblock /dev/hdb5
mdadm --zero-superblock /dev/hdb6그다음 어레이에 추가합니다:
mdadm -a /dev/md0 /dev/hdb1
mdadm -a /dev/md1 /dev/hdb5
mdadm -a /dev/md2 /dev/hdb6추가 후 다시 상태를 확인:
cat /proc/mdstat예시 출력(동기화 진행 중):
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb5[2] hda5[0]
417536 blocks [2/1] [U_]
resync=DELAYED
md0 : active raid1 hdb1[1] hda1[0]
176576 blocks [2/2] [UU]
md2 : active raid1 hdb6[2] hda6[0]
4642688 blocks [2/1] [U_]
[===========>.........] recovery = 59.9% (2784512/4642688) finish=7.5min speed=4076K/sec
unused devices:
[root@server1 ~]# 동기화가 완료될 때까지 기다립니다. 완료되면 모든 어레이의 상태가 [UU]로 표시됩니다.
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb5[1] hda5[0]
417536 blocks [2/2] [UU]
md0 : active raid1 hdb1[1] hda1[0]
176576 blocks [2/2] [UU]
md2 : active raid1 hdb6[1] hda6[0]
4642688 blocks [2/2] [UU]
unused devices:
[root@server1 ~]# 5. 부트로더 설치
부트로더(grub)를 양쪽 디스크에 설치합니다. grub 프롬프트에서 다음을 실행하세요:
grubgrub 프롬프트 입력 예시:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit이제 RAID1 디스크 교체 및 복구가 완료되었습니다.
점검 목록(관리자용)
- 백업이 최신인지 확인
- 교체 디스크가 동일하거나 호환 가능한 모델인지 확인
- 파티션 테이블 복사 전/후 fdisk -l 출력 비교
- mdadm –detail /dev/mdX 로 상세 상태 확인
- 동기화가 완료될 때까지 모니터링
- 양쪽 디스크에 부트로더 설치 확인
문제 해결: 언제 복구가 실패하는가
- 파티션 오프셋이나 크기가 원본과 맞지 않으면 복구가 실패합니다. 이 경우 수동으로 파티션을 조정하세요.
- sfdisk가 섹터 0 서명을 찾지 못하면 파티션 테이블을 수동으로 생성해야 할 수 있습니다. 데이터 손실 위험이 있으니 주의.
- RAID 메타데이터 형식(mdadm 버전 차이 등)이 호환되지 않으면 슈퍼블록 제거/재작성 필요.
대안 접근법
- dd를 사용한 섹터 단위 복사: 완전 이미지 복사가 필요할 때 사용. 위험과 시간이 큼.
- 파티션 레이아웃이 복잡하면 parted를 사용하여 수동 맞춤.
- 디스크가 동일 모델이고 스마트 상태가 양호하면 하드웨어 RAID 기능 사용 고려.
핵심 수치 상자
- 일반 출력 예시: md2 크기 약 4.4GB(4642688 블록)
- 동기화 속도: 예시 4MB/s (환경에 따라 크게 다름)
참고 링크
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Mandriva: http://www.mandriva.com
요약: 이 가이드는 RAID1에서 실패한 디스크를 안전하게 교체하는 실무 절차를 제공합니다. 파티션 복사, 슈퍼블록 초기화, mdadm으로의 재추가, 동기화 완료 및 grub 재설치까지 포함합니다. 항상 백업을 확인하고, 동기화가 끝날 때까지 모니터링하세요.