GRUB 설치 및 /dev/sda RAID1 설정 가이드
정의: RAID1 — 두 개의 디스크에 동일한 데이터를 복제해 가용성과 내구성을 높이는 미러링 방식.
6 GRUB 준비
이제 두 번째 하드디스크 (/dev/sdb)에 GRUB 부트로더를 설치해야 합니다. GRUB 셸에서 아래 명령들을 입력합니다.
grub
GRUB 셸에서 다음을 입력:
root (hd0,0)
다음과 같은 응답을 볼 수 있습니다:
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub>
GRUB에 부트로더를 설치합니다:
setup (hd0)
출력 예시:
grub> setup (hd0)
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 (hd0)"... 16 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub>
같은 절차를 두 번째 디스크에 대해 반복합니다:
root (hd1,0)
응답 예시:
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub>
그리고:
setup (hd1)
출력 예시:
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 are embedded.
succeeded
Running "install /grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub>
마지막으로 GRUB 셸을 종료합니다:
quit
정상 셸로 돌아와 시스템을 재부팅합니다. RAID 배열에서 정상적으로 부팅되는지 확인하세요.
reboot
중요: 시스템이 제대로 부팅되지 않으면 복구 콘솔로 들어가 GRUB 설정과 /boot 파티션의 무결성을 먼저 확인하세요.
7 /dev/sda 준비
정상적으로 진행되었다면, 아래 명령으로 /dev/md0가 생성되어 마운트되었는지 확인합니다.
df -h
출력 예시:
[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
4.1G 2.0G 1.9G 51% /
/dev/md0 190M 16M 165M 9% /boot
tmpfs 151M 0 151M 0% /dev/shm
[root@server1 ~]#
/proc/mdstat 출력은 다음과 유사해야 합니다:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
md1 : active raid1 sda2[0] sdb2[1]
5036288 blocks [2/2] [UU]
unused devices:
[root@server1 ~]#
그리고 pvdisplay, vgdisplay, lvdisplay의 출력도 아래 예시와 비슷해야 합니다 (원본 출력 보존):
pvdisplay
[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.25 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg
[root@server1 ~]#
vgdisplay
[root@server1 ~]# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.78 GB
PE Size 32.00 MB
Total PE 153
Alloc PE / Size 152 / 4.75 GB
Free PE / Size 1 / 32.00 MB
VG UUID jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1
[root@server1 ~]#
lvdisplay
[root@server1 ~]# lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID yt5b4f-m2XC-F3aP-032r-ulAT-Re5P-lmh6hy
LV Write Access read/write
LV Status available
# open 1
LV Size 4.16 GB
Current LE 133
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID VrPqpP-40ym-55Gs-ShVm-Hlzs-Jzot-oYnonY
LV Write Access read/write
LV Status available
# open 1
LV Size 608.00 MB
Current LE 19
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
[root@server1 ~]#
다음으로 /dev/sda1의 파티션 타입을 Linux raid autodetect로 변경합니다:
fdisk /dev/sda
예시 상호작용(원본 그대로):
[root@server1 ~]# fdisk /dev/sda
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): <- 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 ~]#
이제 /dev/sda1을 /dev/md0 RAID 배열에 추가합니다:
mdadm --add /dev/md0 /dev/sda1
상태를 다시 확인합니다:
cat /proc/mdstat
정상 상태라면 아래와 같은 출력이 나타납니다:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
5036288 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=7d2bf9c3:7cd9df21:f782dab8:9212d7cb ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d93a2387:6355b5c5:25ed3e50:2a0e4f96
|
시스템을 재부팅합니다:
reboot
문제가 없다면 이제 RAID1 위에 LVM을 가진 시스템에서 두 디스크에 GRUB를 설치해, 어느 쪽에서든 부팅이 가능해졌습니다.
체크리스트 (실무용)
- /dev/md0가 /boot로 올바르게 마운트되었는가?
- pvdisplay, vgdisplay, lvdisplay 출력이 정상적인가?
- /dev/sda 파티션 타입이 fd로 변경되었는가?
- mdadm –add로 디스크를 추가했는가?
- /etc/mdadm.conf를 갱신했는가?
- 두 디스크에 모두 GRUB를 설치했는가?
대안 접근법
- GRUB2를 사용하는 경우 명령과 경로가 다릅니다(예: grub-install). GRUB1(grub) 예시는 레거시 환경에 해당합니다.
- UEFI 시스템이면 efibootmgr와 ESP(EFI System Partition)를 사용해야 합니다.
- 하드웨어 RAID가 가능하면 소프트웨어 RAID 대신 하드웨어 RAID를 고려하세요.
문제 발생 시(언제 실패하는가)
- 재부팅 후 부팅이 되지 않으면 먼저 라이브CD 또는 복구 모드로 부팅해 /boot 파티션과 GRUB 설치를 확인하세요.
- fdisk 재읽기 실패(error 16)는 파티션 테이블이 커널에서 사용 중이기 때문에 재부팅 후 반영됩니다.
- mdadm 배열이 재동기화 중이면 완전히 복구될 때까지 기다리세요.
간단한 방법론(요약 단계)
- 두 디스크에 동일한 파티션 레이아웃을 만드세요.
- mdadm으로 RAID1 디바이스를 생성하세요 (/dev/md0 등).
- /boot를 md0에 옮기고 /etc/fstab을 점검하세요.
- 각 디스크에 GRUB를 설치하세요(grub 셸 또는 grub-install).
- /dev/sda 파티션 타입을 fd로 변경하고 mdadm –add로 추가하세요.
- /etc/mdadm.conf를 갱신하고 재부팅하세요.
요약
- 이 가이드는 동작 중인 LVM 시스템에 소프트웨어 RAID1을 적용하고, 두 디스크에 GRUB를 설치해 어느 디스크로도 부팅 가능하게 만드는 절차를 다룹니다. 주요 명령과 출력은 원본 상태로 보존되어 있으므로, 단계별로 실행하면 안전하게 구성할 수 있습니다.
요약 핵심: /dev/md0가 /boot로 마운트되어야 하고, 각 디스크에 GRUB를 설치한 후 /dev/sda를 RAID에 추가하면 부팅 이중화가 완성됩니다.