CentOS 5.3: /dev/sda로 RAID1 추가 및 GRUB 설정
개요
이 문서는 이미 /dev/sdb에 기반한 RAID1(소프트웨어 RAID)이 동작 중인 시스템에 두 번째 디스크 /dev/sda를 추가하여 완전한 미러 상태로 만드는 절차를 다룹니다. 주요 단계는 다음과 같습니다.
- 현재 RAID 상태 확인
- /dev/sda의 파티션 타입을 RAID로 변경 (fdisk)
- 각 파티션을 mdadm으로 해당 md 디바이스에 추가
- RAID 동기화 상태 모니터링
- /etc/mdadm.conf 갱신
- GRUB 설정 복제 및 initrd 갱신
- 재부팅 및 검증
중요: 프로덕션 시스템에서 수행하기 전에 전체 백업을 권장합니다. 또한 명령어는 루트 권한으로 실행해야 합니다.
사전 확인
- mdadm 및 grub이 설치되어 있어야 합니다.
- /dev/sdb에 이미 동작 중인 RAID 어레이(md0, md1, md2)가 있어야 합니다.
- /dev/sda는 빈 디스크이거나 덮어써도 되는 디스크여야 합니다.
7 Preparing /dev/sda
먼저 df -h로 파일시스템이 /dev/md0, /dev/md2로 마운트된 것을 확인합니다.
df -h
[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md2 9.2G 1.1G 7.7G 12% /
/dev/md0 190M 14M 167M 8% /boot
tmpfs 252M 0 252M 0% /dev/shm
[root@server1 ~]#
또한 /proc/mdstat의 출력으로 md 디바이스 상태를 확인합니다.
cat /proc/mdstat
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
md1 : active raid1 sdb2[1]
522048 blocks [2/1] [_U]
md2 : active raid1 sdb3[1]
9759360 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
위와 같이 현재 /dev/sdb 쪽만 포함되어 있다면 /dev/sda의 파티션 타입을 RAID autodetect로 변경해야 합니다. fdisk를 사용해 /dev/sda를 편집합니다:
fdisk /dev/sda
아래는 대화형 fdisk 세션의 예입니다. (명령과 프롬프트는 그대로 보존되어 있습니다.)
[root@server1 ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): <-- t
Partition number (1-4): <-- 1
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): <-- t
Partition number (1-4): <-- 3
Hex code (type L to list codes): <-- fd
Changed system type of partition 3 to fd (Linux raid autodetect)
Command (m for help): <-- w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@server1 ~]#
참고: 파티션 테이블 재읽기에 실패하며 경고가 뜰 수 있습니다. (오류 16) 이는 곧바로 커널이 새 파티션을 사용하지 않는다는 뜻이며, 보통 다음 재부팅 시 반영됩니다. 그러나 RAID 어레이에 파티션을 추가하는 것은 가능합니다.
이제 각 파티션을 기존 RAID 어레이에 추가합니다:
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3
추가 후 /proc/mdstat를 보면 어레이가 동기화(리커버리) 되는 것을 볼 수 있습니다:
cat /proc/mdstat
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]
md2 : active raid1 sda3[2] sdb3[1]
9759360 blocks [2/1] [_U]
[====>................] recovery = 22.8% (2232576/9759360) finish=2.4min speed=50816K/sec
unused devices:
[root@server1 ~]#
동기화 진행 상황을 지속적으로 보려면 다음을 사용합니다:
watch cat /proc/mdstat
시그널로 나가려면 Ctrl+C를 누릅니다. 동기화가 끝나면 mdstat의 상태가 모두 [UU]로 표시됩니다:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]
md2 : active raid1 sda3[0] sdb3[1]
9759360 blocks [2/2] [UU]
unused devices:
[root@server1 ~]#
동기화 완료 후에는 현재 어레이 정보를 /etc/mdadm.conf로 내보냅니다:
mdadm --examine --scan > /etc/mdadm.conf
/etc/mdadm.conf는 다음과 비슷하게 보일 것입니다:
cat /etc/mdadm.conf
| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=78d582f0:940fabb5:f1c1092a:04a55452 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8db8f7e1:f2a64674:d22afece:4a539aa7 ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1baf282d:17c58efd:a8de6947:b0af9792
|
중요: mdadm.conf에 올바른 UUID가 등록되어 있어야 부팅 시 어레이가 자동으로 조립됩니다.
8 Preparing GRUB
이제 /boot/grub/menu.lst(또는 grub.conf)를 편집해 부트로더가 /dev/sda에서도 부팅되도록 만듭니다. 현재 설정은 /dev/sdb(hd1,0)를 가리키고 있으므로 동일한 커널 stanza를 복사해 hd1을 hd0으로 바꿉니다. 또한 나머지 불필요한 커널 stanza들은 주석 처리합니다.
vi /boot/grub/menu.lst
아래는 예시 menu.lst입니다.
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#boot=/dev/sda
default=0
fallback=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.el5)
root (hd1,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
initrd /initrd-2.6.18-128.el5.img
#title CentOS (2.6.18-128.el5)
# root (hd0,0)
# kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/
# initrd /initrd-2.6.18-128.el5.img
다음으로 initrd 이미지를 갱신합니다. 현재 커널 버전을 uname -r로 확인하여 기존 이미지를 백업한 뒤 새 이미지를 생성합니다:
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig2
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
이후 시스템을 재부팅합니다:
reboot
재부팅 후 문제가 없다면 /dev/sda가 RAID 미러로 잘 동작하고 있으며 GRUB도 두 디스크에서 부팅 가능한 상태가 되었습니다.
검증 체크리스트
- cat /proc/mdstat의 모든 어레이가 [UU] 상태인지 확인
- /etc/mdadm.conf에 ARRAY 라인이 있고 UUID가 올바른지 확인
- /boot/grub/menu.lst에 hd0/h d1에 대한 엔트리가 있는지 확인
- initrd가 새로 생성되었는지 확인
- 한 디스크를 물리적으로 제거하거나 부팅 디스크를 바꿔 부팅 테스트 (비다운타임이 보장되지 않는 환경에서는 주의)
문제 발생 시 점검 및 해결 방법 (사례별)
- 동기화가 시작되지 않음
- mdadm –detail /dev/mdX로 상태 확인
- /dev/sdaX 파티션이 올바르게 생성되고 타입이 fd인지 확인(fdisk -l /dev/sda)
- 재부팅 후 어레이가 조립되지 않음
- /etc/mdadm.conf의 UUID가 /dev/mdX와 일치하는지 확인
- grub에서 root와 kernel 라인이 올바른 장치를 가리키는지 확인
- kernel 또는 initrd가 누락되어 부팅 불가
- Live CD로 부팅 후 /boot 내용을 점검하고 mkinitrd로 initrd를 다시 생성
- fdisk에서 파티션 테이블 재읽기 실패(오류 16)
- 그 상태로도 작업 가능하지만 안전을 위해 비운시간에 시스템 재부팅을 계획하세요.
관리자 역할별 체크리스트
- 시스템 관리자
- mdadm 패키지 설치 및 버전 확인
- /etc/mdadm.conf 백업 및 갱신
- 스토리지 관리자
- 물리적 디스크 식별 및 케이블/전원 상태 확인
- RAID 성능 및 동기화 속도 모니터링
- 운영팀
- 재부팅 계획 및 롤백 절차 문서화
- 장애 시 연락체계 확인
간단 실행 플레이북 (SOP)
- 현재 상태 스냅샷 생성: df -h, cat /proc/mdstat, fdisk -l
- /dev/sda 파티션 타입을 fd로 변경(fdisk)
- mdadm –add로 각 파티션 추가
- watch로 동기화 모니터링
- mdadm –examine –scan > /etc/mdadm.conf
- /boot/grub/menu.lst 수정(복제된 커널 stanza에 hd0 추가)
- initrd 갱신 및 재부팅
- 재부팅 후 mdstat 및 부팅 로그 확인
의사결정 흐름도
flowchart TD
A[시작: /dev/sdb에 RAID 동작 중] --> B{ /dev/sda 파티션 상태 }
B -- 빈 디스크 --> C[파티션 생성 및 타입 fd로 변경]
B -- 기존 파티션 있음 --> D[데이터 확인 후 덮어쓰기 동의 필요]
C --> E[mdadm --add로 각 파티션 추가]
E --> F[동기화 진행 모니터링]
F --> G{동기화 성공?}
G -- 예 --> H[mdadm.conf 갱신 및 GRUB 수정]
G -- 아니오 --> I[로그 확인 및 재시도]
H --> J[initrd 갱신 및 재부팅]
J --> K[부팅 검증 완료]
수락 기준
- 모든 md 디바이스가 [UU] 상태여야 합니다.
- /etc/mdadm.conf에 모든 ARRAY UUID가 존재해야 합니다.
- GRUB 설정에 hd0용 엔트리가 있어 /dev/sda로도 부팅 가능해야 합니다.
- 재부팅 후 시스템이 정상적으로 기동되어야 합니다.
요약 및 마무리
이제 /dev/sda가 기존 /dev/sdb를 완전하게 미러하도록 구성되었습니다. 핵심은 파티션 타입을 fd로 바꾸고 mdadm으로 파티션을 추가한 뒤 동기화가 끝날 때까지 기다리는 것입니다. 또한 /etc/mdadm.conf와 GRUB을 업데이트해 향후 디스크 장애 시에도 시스템이 정상 부팅되도록 준비하는 것이 중요합니다.
요약: 파티션 타입 변경 → mdadm –add → 동기화 모니터링 → mdadm.conf 갱신 → GRUB 및 initrd 갱신 → 재부팅 및 검증