이 문서는 mdadm으로 RAID1 배열(/dev/md0, /dev/md1)을 만들고, 비- LVM 파티션을 /dev/md0에, LVM을 /dev/md1으로 이전하는 전체 절차를 설명합니다. GRUB과 initrd를 조정해 디스크 장애 시 부팅이 유지되도록 하고, pvmove로 데이터 이동 후 파티션 타입을 변경해 RAID에 추가합니다. 주요 명령어와 검증 방법, 롤백 체크리스트도 포함합니다.
개요
이 안내서는 다음 작업을 단계별로 다룹니다.
- RAID 배열 생성 (degraded 상태로 시작)
- 비-LVM 파일시스템 생성 및 마운트
- mdadm 설정 파일(/etc/mdadm.conf) 생성
- LVM PV 생성 및 VG에 확장
- /etc/fstab, /etc/mtab, GRUB(menu.lst) 수정
- initrd 재생성
- pvmove로 LVM 데이터 이동, 기존 디스크 제거
- 파티션 타입 변경 및 RAID 동기화
- /boot 내용 복사 및 최종 검증
중요: 실제 운영 환경에서는 전체 백업을 먼저 수행하고, 가능한 경우 유지보수 시간에 작업하세요.
전제 조건
- mdadm, lvm2, grub 도구들이 설치되어 있어야 합니다.
- /dev/sdb는 새 디스크(또는 목표 디스크)로서 이미 파티션 /dev/sdb1, /dev/sdb2가 준비되어 있다고 가정합니다.
- 시스템이 현재 /dev/sda(예: /dev/sda1, /dev/sda2)에서 부팅 중이므로 해당 파티션은 즉시 RAID에 추가할 수 없습니다.
Important: 명령어는 루트로 실행해야 합니다.
RAID 배열 생성
현재 시스템이 /dev/sda의 파티션으로 부팅 중이므로, 우선 placeholder를 사용해 /dev/md0와 /dev/md1을 degraded 상태로 생성합니다. /dev/sdb1은 /dev/md0에, /dev/sdb2는 /dev/md1에 추가합니다:
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
생성 후 상태 확인:
cat /proc/mdstat
예시 출력 (degraded 상태):
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
5036288 blocks [2/1] [_U]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
참고: [U] 또는 [U]는 배열이 degraded 상태임을 의미합니다. [UU]는 정상 상태입니다.
비-LVM 파일시스템 생성 (/dev/md0)
비-LVM RAID 배열인 /dev/md0에 ext3 파일시스템을 만듭니다:
mkfs.ext3 /dev/md0
LVM용 준비 (/dev/md1)
LVM에서 사용할 RAID 장치 /dev/md1을 물리볼륨으로 초기화하고, 기존 볼륨 그룹 VolGroup00에 추가합니다:
pvcreate /dev/md1
vgextend VolGroup00 /dev/md1
pvdisplay로 확인하면 /dev/md1이 VolGroup00에 추가된 것을 볼 수 있습니다. 예시 출력:
[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.34 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID op2n3N-rck1-Pywc-9wTY-EUxQ-KUcr-2YeRJ0
--- 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 153
Allocated PE 0
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 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 9.56 GB
PE Size 32.00 MB
Total PE 306
Alloc PE / Size 152 / 4.75 GB
Free PE / Size 154 / 4.81 GB
VG UUID jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1
[root@server1 ~]#
/etc/mdadm.conf 생성
현재 구성된 RAID 배열 정보를 파일로 저장합니다:
mdadm --examine --scan > /etc/mdadm.conf
cat /etc/mdadm.conf
파일에는 다음과 유사한 ARRAY 항목들이 들어 있습니다:
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
중요: mdadm.conf는 부팅 시 RAID 배열을 자동 인식하게 하는 데 필요합니다.
/etc/fstab 및 /etc/mtab 수정
부팅 시 /boot이 RAID 장치(/dev/md0)를 사용하도록 /etc/fstab의 LABEL=/boot 항목을 /dev/md0으로 교체합니다:
vi /etc/fstab
파일 예시:
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
/dev/md0 /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
또한 /etc/mtab에서 /dev/sda1 대신 /dev/md0으로 변경합니다:
vi /etc/mtab
예시 /etc/mtab:
/dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
참고: /etc/mtab는 런타임 마운트 정보를 담고 있으므로 파일을 수동으로 수정할 때 주의를 기울이세요.
GRUB 설정: fallback 및 부팅 디스크 순서
/boot/grub/menu.lst(또는 grub.conf)에 fallback=1을 추가해 첫 번째 커널로 부팅 실패 시 두 번째 커널로 넘어가게 합니다:
vi /boot/grub/menu.lst
default=0
fallback=1
그 다음 kernel stanza를 복사해 첫 항목 바로 위에 붙여 넣고 root(hd0,0) 대신 root(hd1,0)로 변경합니다. 예:
[...]
title Fedora (2.6.23.1-42.fc8)
root (hd1,0)
kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.23.1-42.fc8.img
title Fedora (2.6.23.1-42.fc8)
root (hd0,0)
kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.23.1-42.fc8.img
설명: root(hd1,0)은 /dev/sdb의 부트 파티션을 가리킵니다. 시스템이 degraded 상태의 RAID에서 부팅을 시도하고 실패하면, fallback=1 설정에 의해 /dev/sda로 다시 시도합니다.
initrd 재생성
현재 사용 중인 initrd 이미지를 백업하고 새로 생성합니다:
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
이 단계는 RAID 및 LVM 관련 모듈이 initramfs에 포함되도록 하기 위해 필요합니다.
LVM 데이터 이동 (/dev/sda2 → /dev/md1)
구성 파일 수정이 완료되면 pvmove로 /dev/sda2의 LVM 데이터를 /dev/md1로 옮깁니다:
pvmove /dev/sda2 /dev/md1
이 명령은 데이터 양에 따라 시간이 걸립니다. 완료 후 /dev/sda2를 VG에서 제거합니다:
vgreduce VolGroup00 /dev/sda2
LVM이 더 이상 /dev/sda2를 사용하지 않도록 표시합니다:
pvremove /dev/sda2
pvdisplay로 확인하면 /dev/md1만 남아 있는 것을 볼 수 있습니다. 예시:
[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 ~]#
파티션 타입 변경 및 /dev/sda2를 RAID에 추가
이제 /dev/sda2 파티션 타입을 Linux raid autodetect(fd)로 변경하고 /dev/md1에 추가합니다:
fdisk /dev/sda
세션 예시:
[root@server1 ~]# fdisk /dev/sda
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): <- 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/sda2를 /dev/md1에 추가합니다:
mdadm --add /dev/md1 /dev/sda2
진행 상황 확인:
cat /proc/mdstat
동기화 중 예시:
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
5036288 blocks [2/1] [_U]
[=====>...............] recovery = 28.8% (1454272/5036288) finish=2.8min speed=21132K/sec
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
watch 명령으로 실시간 모니터링 가능:
watch cat /proc/mdstat
동기화가 완료되면 상태는 [UU]로 바뀝니다.
/dev/md0 마운트 및 /boot 내용 복사
먼저 마운트 지점을 만들고 /dev/md0을 마운트합니다:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
mount 명령 출력에서 /dev/md0가 /boot와 /mnt/md0에 마운트된 것을 확인합니다. 예시:
[root@server1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
[root@server1 ~]#
이제 /boot의 내용을 /dev/md0에 복사합니다:
cd /boot
cp -dpRx . /mnt/md0
옵션 설명: -d(심볼릭 링크 유지), -p(퍼미션 유지), -R(재귀), -x(다른 파일시스템 미포함)
검증 및 테스트
- /proc/mdstat에서 모든 RAID 디바이스가 [UU]인지 확인합니다.
- /etc/mdadm.conf에 ARRAY 항목이 있는지 확인합니다.
- /etc/fstab와 /etc/mtab에서 /boot가 /dev/md0로 바뀌었는지 확인합니다.
- GRUB 설정(menu.lst)에 fallback=1과 root(hd1,0) 항목이 있는지 확인합니다.
- initrd가 재생성되었는지 확인합니다.
- 재부팅 테스트: 하나의 디스크를 분리한 상태로 부팅해보세요.
중요: 재부팅 전 모든 변경 사항을 다시 검토하고, 가능하면 콘솔 접근(리모트 KVM 등)을 확보하세요.
운영자 체크리스트
- 전체 백업 수행
- 필요한 패키지(mdadm, lvm2) 설치
- /etc/mdadm.conf 생성 및 확인
- /etc/fstab, /etc/mtab 변경 및 저장
- GRUB menu.lst 수정 및 initrd 재생성
- pvmove 완료 및 vgreduce/pvremove 실행
- fdisk로 파티션 타입 변경 후 mdadm –add 실행
- /proc/mdstat 동기화 완료 확인
- /boot 복사 및 권한 확인
- 재부팅 및 장애 시 fallback 동작 확인
롤백 및 장애 대응 절차
- RAID 생성 이전으로 되돌려야 한다면, /etc/fstab과 /etc/mtab을 원래 값으로 복원합니다.
- /etc/mdadm.conf에서 삭제한 ARRAY 항목을 복원하지 않았다면 복원합니다.
- pvremove를 이미 실행했다면 물리 디스크에서 데이터를 복구하는 것은 어렵습니다. 따라서 롤백은 주로 구성파일 복원과 재부팅 검증으로 제한됩니다.
- GRUB이 부팅하지 않으면, 라이브 미디어로 부팅해 /boot 파티션을 점검하고 grub-install로 복구합니다.
참고: 영구적인 데이터 손실을 막기 위해 작업 전 전체 백업이 필수입니다.
테스트 케이스(권장)
- 정상 동작: 모든 RAID 디스크가 연결된 상태에서 부팅 성공
- 디스크 단일 장애: /dev/sda 제거(또는 차단) 후 /dev/sdb로 부팅 성공
- 동기화 테스트: mdadm –add 후 /proc/mdstat가 동기화 진행을 보여주는지
- LVM 이동 확인: pvmove 후 vgs, pvs 출력에서 /dev/md1이 할당된 상태인지
명령어 치트시트
- RAID 생성: mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
- RAID 상태: cat /proc/mdstat
- mdadm 설정 저장: mdadm –examine –scan > /etc/mdadm.conf
- PV 생성: pvcreate /dev/md1
- VG 확장: vgextend VolGroup00 /dev/md1
- 데이터 이동: pvmove /dev/sda2 /dev/md1
- PV 제거: pvremove /dev/sda2
- 파티션 타입 변경: fdisk /dev/sda (type fd)
- RAID에 파티션 추가: mdadm –add /dev/md1 /dev/sda2
- initrd 재생성: mkinitrd /boot/initrd-
uname -r
.imguname -r
요약
이 가이드는 두 개의 RAID1 배열을 생성하고 LVM을 포함한 시스템을 RAID로 이전하는 전체 절차를 제공합니다. mdadm을 사용해 degraded 상태로 RAID를 만들고, LVM을 /dev/md1으로 확장한 뒤 pvmove로 데이터 이전을 수행합니다. GRUB과 initrd를 조정해 장애 발생 시 부팅 가용성을 확보합니다.
주요 테이크어웨이:
- 항상 백업을 먼저 수행하세요.
- mdadm.conf와 fstab, GRUB 설정을 정확히 적용해야 합니다.
- pvmove와 mdadm 동기화는 시간이 걸리므로 모니터링이 필요합니다.
끝까지 확인하세요: /proc/mdstat, pvs, vgs, mount 출력이 목표 상태와 일치하는지 확인하는 것이 최종 검증입니다.