RAID로 부팅 가능 시스템 복제 및 fstab/GRUB 업데이트 가이드
개요
이 문서는 이미 RAID를 사용해 파일시스템을 복제한 후, 새 RAID 복사본으로부터 시스템을 부팅하도록 설정하고, 이후 오래된 디스크를 RAID 구성에 다시 추가하여 동기화하는 절차를 설명합니다. 주요 작업은 UUID 수집, /etc/fstab 업데이트, GRUB 설정 변경, 그리고 두 번째 디스크에 부트레코드를 설치하는 것입니다.
정의: UUID — 파일시스템을 고유하게 식별하는 문자열입니다.
중요: 모든 명령은 루트 권한으로 실행하세요. 실수로 잘못된 디스크에 조작하면 데이터 손실이 발생합니다.
단계별 절차
14. 새 콘솔에서 UUID 확인
새 콘솔 창을 열고 다음을 실행해 md 디바이스들의 UUID를 확인합니다.
blkid | grep /dev/md
여기서 각 md 타입 파일시스템의 UUID를 볼 수 있습니다. 예시 출력은 다음과 같습니다.
/dev/md0: UUID=”0b0fddf7-1160-4c70-8e76-5a5a5365e07d” TYPE=”ext2”
/dev/md1: LABEL=”/ROOT” UUID=”36d389c4-fc0f-4de7-a80b-40cc6dece66f” TYPE=”ext4”
/dev/md2: UUID=”47fbbe32-c756-4ea6-8fd6-b34867be0c84” TYPE=”ext4”
/dev/md3: LABEL=”/VAR” UUID=”f92cc249-c1af-456b-a291-ee1ea9ef8e22” TYPE=”ext4”
설명: 위 예시에서 /dev/md0와 /dev/md1 등의 UUID를 기억하거나 복사해둡니다.
다음으로 새로 만든 md 장치를 마운트합니다.
mount /dev/md1 /mnt/raid
/mnt/raid/etc/fstab 파일에서 /boot 마운트 지점이 위치한 줄을 찾아 새 /dev/md0 파일시스템의 UUID로 바꿉니다. 예:
UUID=0b0fddf7-1160-4c70-8e76-5a5a5365e07d /boot ext2 defaults 1 1
같은 방식으로 루트 파일시스템(/)의 UUID도 찾아서 /etc/fstab의 루트 항목에 붙여넣습니다.
UUID=36d389c4-fc0f-4de7-a80b-40cc6dece66f / ext4 defaults 1 1
참고: 추후에 사용할 UUID 줄은 잠시 주석 처리한 채로 두어도 됩니다.
/var와 /home의 기존 마운트 라인은 그대로 유지합니다. 새로 추가할 /var 및 /home 항목 예시는 아래와 같습니다.
/dev/sdb5 /var ext4 defaults 1 2
#UUID=47fbbe32-c756-4ea6-8fd6-b34867be0c84 /var ext4 defaults 1 2
/dev/sdb6 /home ext4 defaults 1 2
#UUID=f92cc249-c1af-456b-a291-ee1ea9ef8e22 /home ext4 defaults 1 2
수정이 끝나면 마운트를 해제합니다.
umount /mnt/raid
15. /dev/md0 재마운트 및 GRUB 설정 변경
/dev/md0를 다시 /mnt/raid에 마운트합니다.
/mnt/raid/grub/menu.lst 파일에서 커널 항목을 다음처럼 수정하세요.
kernel PATH-TO-KERNEL ro root=/dev/md1 SOME OPTIONS
중요: GRUB 설정에서 더 이상 md 디바이스를 제외(EXCLUDE)하도록 하는 옵션이 없어야 합니다.
시스템이 RAID 복사본으로부터 부팅되도록 다음 파일들을 복사합니다.
cp /mnt/raid/grub/menu.lst /boot/grub/menu.lst
cp /mnt/raid/etc/fstab /etc/fstab
참고: 안전을 위해 백업본을 만들어둘 수 있지만, 그 방법은 보수적인 접근입니다.
16. 재부팅 및 BIOS 설정
시스템을 재부팅합니다.
reboot
BIOS 설정에 들어가 새 디스크(복사본이 들어있는 디스크)를 부팅 디스크로 선택합니다. 변경사항을 저장하고 재부팅하세요.
17. 옛(구) 드라이브 파티션을 RAID 파티션으로 변경 및 추가
재부팅이 정상적으로 완료되었다면, 기존(구) 드라이브의 파티션을 RAID 파티션 타입으로 바꿉니다.
현재 디스크들을 확인하려면:
fdisk -l
출력에서 파티션 타입이 83(Linux)로 되어 있는 디스크가 기존 시스템 디스크입니다. 이 디스크(예시: /dev/sdb)의 sdb1, sdb2, sdb5, sdb6 파티션 타입을 0xfd(raid)로 변경합니다. fdisk, cfdisk 또는 parted를 사용하세요.
변경 후 파티션 정보를 커널에 알립니다.
partprobe
이제 수정한 파티션들을 RAID에 추가합니다. 예시(여기서도 옛 디스크가 /dev/sdb라고 가정):
mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb2
mdadm /dev/md2 -a /dev/sdb5
mdadm /dev/md3 -a /dev/sdb6
진행 상황을 모니터링하려면 새 콘솔 창에서 다음을 실행하세요.
watch -n 5 cat/proc/mdstat
예상되는 출력 예시는 다음과 같습니다.
Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
473792 blocks [2/2] [UU]
[===>……………..] recovery 25.0% (118448/473792) finish=2.4min speed=2412
md2 : active raid1 sdb5[1] sda5[0]
4980032 blocks [2/2] [UU]
resync=DELAYED
md3 : active raid1 sdb6[1] sda6[0]
3349440 blocks [2/2] [UU]
resync=DELAYED
md0 : active raid1 sdb1[1] sda1[0]
80192 blocks [2/2] [UU]
unused devices:
설명: 모든 md 디바이스의 리커버리가 완료되면 시스템은 RAID로 정상 동작합니다.
성능 및 중복성 향상 단계(권장)
리커버리 완료 후 다음을 고려하세요.
- /etc/fstab에서 noatime 옵션을 사용하는 것이 읽기 성능에 도움이 될 수 있습니다. 다만 애플리케이션 요구사항을 확인하세요.
- RAID1 읽기 성능을 더 활용하려면 mdadm과 읽기 밸런싱 설정을 검토하세요.
- 정기적인 mdadm –detail 및 SMART 검사로 디스크 상태를 모니터링하세요.
18. 두 번째 하드디스크에 부트 레코드 생성
목표: 첫 번째 하드디스크가 실패해도 시스템이 두 번째 하드디스크로부터 부팅되게 합니다.
중요: 아래 지침은 구형 GRUB(legacy/grub-legacy)를 사용하는 경우에 해당합니다. GRUB2인 경우 별도 절차가 필요합니다.
grub 셸을 시작합니다.
# grub
프롬프트가 뜹니다.
grub>
두 번째 디스크(예시: hd1)의 루트 파티션을 임시로 설정합니다.
grub> root (hd1,0)
다음과 유사한 메시지가 보일 수 있습니다.
Filesystem type is ext2fs, partition type is 0xfd
이제 부트레코드를 설치합니다.
grub> setup (hd1)
출력 예시는 다음과 같습니다(메시지는 시스템마다 다를 수 있습니다).
Checking if “/boot/grub/stage1” exists … no
Checking if “/grub/stage1” exists … yes
Checking if “/grub/stage2” exists … yes
Checking if “/grub/e2fs_stage1_5” exists … yes
Running “embed /grub/e2fs_stage1_5 (hd1)” … 16 sectors embedded.
succeeded
Running “install /grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/grub/stage2 /grub/grub.conf”… succeeded
Done.
첫 번째 디스크에도 반복합니다.
grub> root (hd0,0)
grub> setup (hd0)
설치가 끝나면 grub를 종료합니다.
grub> quit
시스템을 재부팅합니다.
reboot
부팅이 정상적으로 완료되는지 확인하세요. 정상이라면 첫 번째 디스크(sda)를 분리해 시도해보고, 다시 연결 후 두 번째 디스크(sdb)를 분리해 재부팅하여 두 디스크 각각에서 부팅되는지 확인합니다.
중요: 만약 한 디스크에서만 부팅이 되지 않는다면, 해당 디스크의 GRUB 설치, 파티션 유형, /boot 파티션의 존재 여부를 확인하세요.
점검 및 문제 해결 요약
- blkid로 UUID가 올바른지 확인하세요.
- /etc/fstab에 잘못된 UUID가 들어가면 부팅 실패가 발생합니다. 항상 복사/붙여넣기 후 다시 확인하세요.
- GRUB이 올바른 root= 옵션으로 커널을 가리키는지 점검하세요.
- 리커버리 진행 중이면 mdstat을 주시하세요.
중요: 부팅 관련 작업을 수행하기 전 전체 디스크 이미지 백업을 권장합니다. 라이브 시스템에서의 파티션/부트레코드 조작은 데이터 손실 위험이 있습니다.
빠른 점검 체크리스트
- blkid 출력에서 /dev/md* UUID 확보
- /mnt/raid/etc/fstab의 /boot 및 / 항목을 UUID로 수정
- /mnt/raid/grub/menu.lst의 kernel 라인 수정
- /boot/grub/menu.lst와 /etc/fstab에 복사
- BIOS 부팅 디스크 설정 변경 후 재부팅
- 옛 드라이브 파티션 타입을 0xfd로 변경
- mdadm로 파티션을 md 디바이스에 추가
- mdstat에서 리커버리 완료 확인
- grub를 사용해 두 디스크에 부트레코드 설치
테스트 케이스 및 수용 기준
- 부팅: BIOS에서 새 디스크로 부팅 시 시스템이 정상적으로 부팅되어야 함.
- 디스크 장애 시 부팅: 한 디스크를 물리적으로 분리해도 다른 디스크로부터 부팅되어야 함.
- RAID 동기화: mdstat에서 모든 md 디바이스가 [UU] 상태로 표시되어야 함.
- fstab 일관성: /etc/fstab의 UUID가 blkid 출력과 일치해야 함.
간단 복구/롤백 절차
- 부팅 불가시 라이브 미디어로 부팅합니다.
- /mnt/raid로 파일시스템을 마운트하고 /etc/fstab, /boot/grub/menu.lst 파일을 원래대로 복원합니다.
- grub 셸에서 문제가 되는 디스크에 setup을 다시 실행합니다.
의사결정 흐름: 부팅 실패 시 우선 점검 항목
flowchart TD
A[시스템 부팅 실패] --> B{BIOS 부팅 디스크 확인}
B -- 잘못됨 --> C[BIOS에서 올바른 디스크 선택 후 재부팅]
B -- 정상 --> D{GRUB 로더 문제 확인}
D -- GRUB 없음 --> E[grub 설치 및 setup 재실행]
D -- GRUB 있음 --> F{/etc/fstab UUID 일치 여부}
F -- 불일치 --> G[UUID 수정 후 재부팅]
F -- 일치 --> H[mdstat 확인 및 md 복구 상태 점검]
FAQ
Q: GRUB2를 사용하면 어떻게 해야 하나요?
A: GRUB2는 grub-install과 update-grub 명령을 사용합니다. 각 디스크에 grub-install /dev/sdX를 실행하여 부트레코드를 심고 update-grub로 설정을 갱신하세요.
Q: fstab에 UUID 대신 /dev/mdX를 사용해도 되나요?
A: 부트 시 장치 이름이 바뀔 위험을 줄이려면 UUID 사용을 권장합니다. /dev/mdX를 사용하면 md 디바이스 순서가 바뀌는 상황에서 문제가 생길 수 있습니다.
Q: 파티션 타입을 0xfd로 변경하면 데이터가 지워지나요?
A: 파티션 타입 변경 자체는 데이터에 영향을 주지 않으나, 이후 잘못된 조작으로 데이터가 손실될 수 있으므로 주의하세요.
요약
- RAID 복사본의 UUID를 fstab에 반영하고 GRUB 설정을 새로 구성해야 합니다.
- 옛 드라이브의 파티션을 RAID 파티션으로 바꾸고 mdadm으로 추가하면 동기화가 시작됩니다.
- 두 디스크에 부트레코드를 모두 설치해 디스크 장애에 대비합니다.
참고: GRUB 버전이 다르면 절차가 달라집니다. GRUB2 사용 환경이라면 별도 안내를 참고하세요.