개요
이 문서는 소프트웨어 RAID1 환경에서 고장난 하드 드라이브를 교체하고 테스트하는 구체적 절차를 제공합니다. 예제에서는 /dev/sdb가 고장난 것으로 가정하지만, /dev/sda가 고장난 경우에도 동일한 절차로 진행하면 됩니다. 명령어, 예상 출력, 주의사항, 문제 해결 팁, 체크리스트와 의사결정 흐름도를 포함합니다.
Important: 실제 시스템에서 작업하기 전에 항상 전체 백업을 준비하세요. RAID는 가용성을 높이지만 백업을 대체하지 않습니다.
준비용어(한 줄 정의)
- mdadm: 리눅스 소프트웨어 RAID 관리를 위한 도구입니다.
- sfdisk: 파티션 테이블을 덤프하거나 쓰기 위한 유틸리티입니다.
- grub-install: GRUB 부트로더를 디스크에 설치하는 명령입니다.
1 단계 — 고장 시뮬레이션
고장 시뮬레이션은 물리적으로 드라이브를 제거하거나 소프트웨어로 드라이브를 실패 처리할 수 있습니다. 어느 디스크를 실패로 처리하든지, 나중에 동일한 논리적 절차로 교체하면 됩니다.
소프트웨어로 제거(예시: /dev/sdb가 실패한 경우):
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb5
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb5
그 다음 시스템을 종료합니다:
shutdown -h now
물리적인 교체를 시뮬레이션하는 경우, 시스템을 끄고 고장난 드라이브를 빼고 새 드라이브를 넣은 뒤 부팅합니다. 소프트 리무브(위 명령)로 시뮬레이트했다면 드라이브를 그대로 분리하거나 물리적으로 교체한 뒤 재부팅합니다.
중요: 고장난 드라이브가 /dev/sda인지 /dev/sdb인지에 따라 새 디스크를 어떤 장치로 연결할지 주의하십시오. 예: /dev/sda를 실패로 시뮬레이션했다면, 기존 /dev/sdb를 /dev/sda 자리로 옮기지 말고 새로운 디스크를 적절한 장치명으로 연결하세요.
2 단계 — 상태 확인
부팅 후 배열이 degraded(감소) 상태인지 확인합니다.
cat /proc/mdstat
예시 출력:
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[2]
248820 blocks super 1.2 [2/1] [U_]
unused devices:
root@server1:~#
또한 현재 디스크와 파티션 정보를 확인합니다:
fdisk -l
(원문 예시 출력이 길게 제공되어 있으므로 실제 시스템 출력과 비교하세요.)
Note: /proc/mdstat의 [U] 표시는 각 장치의 상태(UP 또는 실패)를 나타냅니다. [U]는 하나의 미러가 빠졌음을 의미합니다.
3 단계 — 파티션 테이블 복사
정상인 디스크(/dev/sda)의 파티션 테이블을 새 디스크(/dev/sdb)로 복사합니다. sfdisk를 사용하면 기존 파티션 레이아웃을 정확히 복제할 수 있습니다.
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
예시 상호작용:
root@server1:~# sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Checking that no-one is using this disk right now ...
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
OK
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: 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/sdb1 * 2048 499711 497664 fd Linux raid autodetect
/dev/sdb2 501758 10483711 9981954 5 Extended
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
/dev/sdb5 501760 10483711 9981952 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 경고 메시지가 보일 수 있으나, 출력에 따라 파티션이 정상적으로 쓰였는지 확인하세요. 새로운 디스크의 파티션 테이블이 정상적으로 작성되었는지 fdisk -l로 재확인합니다.
4 단계 — 이전 RAID 잔여 정보 제거
새 디스크에 이전 RAID 정보가 남아 있을 수 있으므로 슈퍼블록을 초기화합니다.
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5
이 단계는 mdadm이 해당 파티션을 새로운 구성요소로 인식하게 합니다.
5 단계 — 디스크를 RAID에 추가
초기화가 끝나면 새 파티션을 RAID에 추가합니다.
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb5
추가한 뒤 상태를 확인하세요:
cat /proc/mdstat
예시 동기화 중 출력:
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
[========>............] recovery = 44.7% (2233024/4989940) finish=0.2min speed=159501K/sec
md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
동기화가 완료될 때까지 기다리십시오. 완료 후 /proc/mdstat에는 [UU]로 표시됩니다.
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
6 단계 — 부트로더 재설치
마지막으로 두 물리 디스크 모두에 부트로더를 설치합니다. 이렇게 하면 한 디스크가 부트 불가 상태가 되어도 다른 디스크로 부팅할 수 있습니다.
grub-install /dev/sda
grub-install /dev/sdb
UEFI 시스템이나 특수한 파티션 레이아웃을 사용하는 경우에는 이 단계가 달라질 수 있습니다. UEFI 환경에서는 efibootmgr 등 추가 설정이 필요할 수 있으니 시스템 문서를 참조하세요.
확인 및 마무리
이제 RAID1 교체가 완료되었습니다. 다음을 확인하세요:
- cat /proc/mdstat에 모든 디스크가 정상([UU])으로 표시되는지
- fdisk -l, lsblk로 파티션과 장치명이 예상과 일치하는지
- 부팅 가능한 상태인지(재부팅 테스트 권장)
- /etc/mdadm/mdadm.conf(또는 배포판에 따른 구성 파일)에 변경사항을 반영하고 업데이트했는지
문제 해결(자주 발생하는 경우)
- 동기화가 매우 느린 경우: I/O 부하, 디스크 인터페이스(예: SATA 속도), 또는 RAID 비트맵 설정 여부를 점검합니다.
- sfdisk가 파티션을 쓰지 못하거나 오류를 반환하는 경우: 디스크가 잠겨 있거나 커널이 파티션 테이블을 다시 읽지 못할 수 있습니다. dmesg와 syslog를 확인하고 필요시 partprobe 또는 블록 장치 제거/재삽입(또는 시스템 재부팅)을 고려합니다.
- 부트로더 설치 후 부팅 불가: BIOS/UEFI 설정(부트 순서, 모드)을 확인하고, grub-install의 출력 오류를 점검합니다.
언제 이 방법이 실패하는가(예외 상황)
- 원본 디스크(/dev/sda)가 논리적/물리적 손상으로 파티션 테이블을 읽을 수 없는 경우: 파티션 복원 도구로 먼저 복구하거나 백업 파티션 레이아웃을 사용하세요.
- RAID 레벨이 RAID1이 아닌 경우: 다른 RAID 레벨(예: RAID5)에서는 파티션 복사 및 재동기화 절차가 다릅니다.
- 서로 다른 크기의 디스크를 사용할 때: 작은 디스크로 복사하면 일부 데이터/파티션이 손실될 수 있으니 주의하세요.
대안적 접근
- 파티션 테이블을 수동으로 생성하는 방법: sfdisk 대신 fdisk 또는 parted로 직접 파티션을 만들 수 있습니다.
- 디스크 전체 이미지를 복제하는 방법: ddrescue/dd를 이용해 섹터 단위 복제 후 필요한 파티션만 RAID에 추가할 수 있습니다(시간 소모적).
- 핫스왑 가능한 환경: 핫스왑 가능 하드웨어에서는 시스템 종료 없이 물리적 교체와 mdadm 추가가 가능합니다.
역할 기반 체크리스트
- 시스템 관리자(계획): 백업 확인, 유지보수 시간 예약, 새 디스크의 모델/용량 검증
- 운영자(실행): 고장 시뮬레이션, 파티션 복사, 슈퍼블록 초기화, mdadm으로 추가, 동기화 모니터링
- 보안 담당: 디스크 폐기 정책(고장난 드라이브의 데이터 파기) 확인
간단한 절차 요약
- 고장 처리(mdadm –fail / –remove) 또는 물리적 제거 후 재부팅
- cat /proc/mdstat로 degraded 확인
- sfdisk로 파티션 복사(sfdisk -d /dev/sda | sfdisk –force /dev/sdb)
- mdadm –zero-superblock로 초기화
- mdadm -a로 RAID에 추가
- 동기화 완료 확인
- grub-install로 부트로더 설치
의사결정 흐름도
flowchart TD
A[시스템 부팅] --> B{RAID 상태 정상?
'/proc/mdstat 확인'}
B -- Yes --> Z[작업 불필요]
B -- No --> C[고장 파티션 식별]
C --> D{디스크 물리적 교체 가능?
'핫스왑 환경'}
D -- Yes --> E[디스크 물리적 교체]
D -- No --> F[소프트웨어로 fail 및 remove]
E --> G[신규 디스크 연결]
F --> G
G --> H[파티션 복사: sfdisk]
H --> I[슈퍼블록 초기화]
I --> J[mdadm -a로 추가]
J --> K[동기화 모니터링]
K --> L{동기화 성공?}
L -- Yes --> M[grub-install로 부트로더 설치]
L -- No --> N[로그 확인 및 문제 해결]
M --> O[완료]
N --> O
짧은 용어집
- 슈퍼블록: mdadm이 각 파티션에 저장하는 RAID 메타데이터 블록
- degraded: RAID 구성에서 일부 미러가 빠진 상태
- 동기화(recovery): 미러 간 블록을 다시 복제하는 과정
체크포인트 템플릿
- 백업 존재 확인
- 고장 디스크 식별
- 파티션 테이블 복사 완료
- mdadm –zero-superblock 수행
- mdadm -a로 추가
- /proc/mdstat에 [UU]로 표시되는지 확인
- grub-install로 부트로더 설치
- 재부팅 테스트 성공
참고 링크
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Debian: http://www.debian.org/
요약: 위 절차를 따르면 RAID1 환경에서 고장난 하드 드라이브를 안전하게 교체하고 시스템 가용성을 유지할 수 있습니다. 각 단계에서 로그와 /proc/mdstat 출력을 꼼꼼히 확인하고, 부트로더 재설치까지 완료하는 것을 잊지 마세요.