기술 가이드

RAID 배열 생성 및 /boot 마이그레이션 (mdadm + LVM)

8 min read 시스템 관리 업데이트됨 11 Oct 2025
RAID 배열 생성 및 /boot 마이그레이션
RAID 배열 생성 및 /boot 마이그레이션

소개

이 문서는 두 개의 디스크를 사용해 RAID1(미러)을 구성하고 기존 디스크에서 RAID로 데이터를 옮기는 구체적 절차입니다. 목표는 /boot 파티션을 RAID1으로 만들고 LVM 볼륨을 RAID1 PV로 확장하여 디스크 중 하나가 고장나도 시스템 부팅과 데이터 접근이 유지되도록 하는 것입니다.

핵심 용어 한 줄 정의

  • RAID1: 두 개 이상의 디스크에 동일한 데이터를 저장해 하나가 고장나도 읽기/쓰기 가능한 미러 방식.
  • mdadm: 리눅스 소프트웨어 RAID 관리 도구.
  • LVM: 논리 볼륨 관리자(Logical Volume Manager).

사전 준비 체크리스트

  • 전체 시스템 백업(중요): 중요한 데이터를 offsite 또는 다른 안전한 매체에 백업합니다.
  • 루트 권한: 모든 명령은 루트 또는 sudo로 실행합니다.
  • 두 물리 디스크(/dev/sda, /dev/sdb)가 준비되어 있고 파티션 레이아웃을 확인했습니다.
  • 필요한 패키지 설치: mdadm, lvm2, grub2가 설치되어 있어야 합니다.
  • 현재 커널 버전과 GRUB 설정을 파악합니다: uname -r 및 /boot/grub/grub.cfg 확인.

Important: 작업 중 실수로 시스템이 부팅 불가 상태가 될 수 있으므로 콘솔 접속(또는 물리적 접근) 가능 상태에서 진행하십시오.

1. RAID 장치 생성: /dev/md0 및 /dev/md1

다음으로 RAID 배열 /dev/md0와 /dev/md1을 생성합니다. /dev/sdb1은 /dev/md0에 추가되고, /dev/sdb5는 /dev/md1에 추가됩니다. /dev/sda1과 /dev/sda5는 현재 시스템에서 사용 중이므로 바로 추가할 수 없어 placeholder로 missing를 사용합니다.

원본 명령(그대로):

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5

명령 실행 시 다음과 같은 메시지가 보일 수 있으며, 계속할지 묻는 경우 y를 눌러 진행합니다:

root@server1:~# mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb5 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store ‘/boot’ on this device please ensure that your boot-loader understands md/v1.x metadata, or use –metadata=0.90 Continue creating array? <– y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started. root@server1:~#

메시지 해설: mdadm은 기본으로 1.2 메타데이터 버전을 사용합니다. 1.2는 메타데이터가 파티션의 시작에 위치하므로 일부 부트로더가 이해하지 못할 수 있습니다. /boot를 RAID에 두려면 GRUB2가 mdadm 메타데이터를 읽을 수 있는 설정인지 확인하세요. 필요하면 –metadata=0.90 옵션을 고려합니다.

다음 명령으로 현재 RAID 상태를 확인합니다:

cat /proc/mdstat

정상적으로 실행되면 두 개의 degraded RAID가 보입니다. [U] 또는 [U]는 배열이 한쪽 디스크만 있어 degraded 상태임을 의미하고, [UU]는 배열이 정상임을 의미합니다.

예시 출력:

root@server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb5[1] 4989940 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1] 248820 blocks super 1.2 [2/1] [_U]

unused devices: root@server1:~#

2. 파일시스템 생성 및 LVM 준비

RAID /dev/md0(비-LVM)에는 ext2 파일시스템을 만듭니다:

mkfs.ext2 /dev/md0

LVM용 RAID /dev/md1을 LVM PV로 만들기 위해서는:

pvcreate /dev/md1

그 다음 /dev/md1을 볼륨 그룹 server1에 추가합니다:

vgextend server1 /dev/md1

설치 후 pvdisplay로 PV 상태를 확인합니다. 출력 예시(해석 포함):

root@server1:~# pvdisplay — Physical volume — PV Name /dev/sda5 VG Name server1 PV Size 4.76 GiB / not usable 2.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 1218 Free PE 0 Allocated PE 1218 PV UUID 8p9j8i-…

— Physical volume — PV Name /dev/md1 VG Name server1 PV Size 4.76 GiB / not usable 1012.00 KiB Allocatable yes PE Size 4.00 MiB Total PE 1218 Free PE 1218 Allocated PE 0 PV UUID W4I07I-…

해석: /dev/sda5는 이미 모두 할당되어 있고, /dev/md1은 비어 있어 pvmove로 데이터 이동 가능함을 의미합니다.

vgdisplay 출력 예시:

root@server1:~# vgdisplay — Volume group — VG Name server1 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable Cur LV 2 Open LV 2 Cur PV 2 Act PV 2 VG Size 9.52 GiB PE Size 4.00 MiB Total PE 2436 Alloc PE / Size 1218 / 4.76 GiB Free PE / Size 1218 / 4.76 GiB VG UUID m99fJX-…

해석: VG가 md1을 포함해 두 개의 PV를 가지며, 절반은 비어있습니다.

3. mdadm 및 fstab, mtab, GRUB 설정 업데이트

mdadm 설정 파일에 새 배열 정보를 추가합니다. 먼저 백업을 만들고 mdadm –examine –scan을 붙입니다:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

파일 내용을 확인합니다:

cat /etc/mdadm/mdadm.conf

파일 예시(주석 포함, 원본은 그대로 유지):

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST 

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Tue, 24 May 2011 21:11:37 +0200
# by mkconf 3.1.4-1+8efb9d1
ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1

다음으로 /etc/fstab을 적절히 수정합니다. 현재 /boot 항목은 주석 처리하고 /dev/md0로 덮어씁니다:

예시 편집:

vi /etc/fstab

파일 예시:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
proc            /proc           proc    defaults        0       0
/dev/mapper/server1-root /               ext3    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
#UUID=9b817b3e-2cea-4505-b1be-5ca9fd67f2ff /boot           ext2    defaults        0       2
/dev/md0 /boot           ext2    defaults        0       2
/dev/mapper/server1-swap_1 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

또한 런타임 마운트 테이블(/etc/mtab)에 /dev/md0로 /boot가 반영되도록 교체합니다:

vi /etc/mtab

예시:

/dev/mapper/server1-root / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md0 /boot ext2 rw 0 0

Important: /etc/mtab는 런타임 파일로 시스템 특정 상태를 반영합니다. 재부팅 후에는 /proc/mounts가 더 정확할 수 있습니다.

4. GRUB2 구성: RAID에서 부팅하도록 설정

GRUB2에 RAID 부팅 지원을 추가하려면 /etc/grub.d에 custom 스크립트를 추가합니다. 40_custom을 복사해 09_swraid1_setup으로 생성합니다:

cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setup

파일 내용 예시(원문 보존):

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
        insmod raid
        insmod mdraid
        insmod part_msdos
        insmod ext2
        set root='(md/0)'
        echo    'Loading Linux 2.6.32-5-amd64 ...'
        linux   /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/server1-root ro  quiet
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-2.6.32-5-amd64
}

주의: linux와 initrd 라인에 나오는 커널 버전은 uname -r로 확인하거나 /boot/grub/grub.cfg의 기존 menuentry를 참고해 정확한 파일명을 사용해야 합니다. 또한 root=/dev/mapper/server1-root 부분에서 볼륨 그룹 이름이 다르면 해당 이름으로 바꿔야 합니다.

중요한 줄은 set root=’(md/0)’입니다. 이는 GRUB에게 /boot가 위치한 RAID 디바이스(md0)에서 부팅하도록 지시해 디스크 하나가 실패해도 부팅을 가능하게 합니다.

다음으로 /etc/default/grub에서 UUID 전달을 비활성화합니다(우리 예제는 UUID를 사용하지 않음):

vi /etc/default/grub

파일에서 GRUB_DISABLE_LINUX_UUID=true 라인을 주석 해제합니다. 예시:

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true

마지막으로 update-grub을 실행하기 전에 /boot/grub/device.map에 /dev/sdb를 추가해야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다:

root@server1:~# update-grub Generating grub.cfg … /usr/sbin/grub-probe: error: Couldn’t find PV pv1. Check your device.map. root@server1:~#

device.map 편집:

vi /boot/grub/device.map

예시 내용:

(hd0)   /dev/sda
(hd1)   /dev/sdb

그 다음 GRUB 구성 업데이트 및 initramfs 갱신:

update-grub
update-initramfs -u

Note: 일부 배포판에서는 grub-install을 두 디스크에 각각 실행해 부트로더를 두 디스크에 설치해두는 것이 안전합니다. 예: grub-install /dev/sda && grub-install /dev/sdb

5. 데이터 이동: LVM PV 마이그레이션 및 RAID 동기화

설정 파일을 모두 수정한 후, /dev/sda의 내용을 /dev/sdb로 복사하고 LVM 볼륨을 RAID로 이동합니다.

LVM PV를 /dev/sda5에서 /dev/md1로 이동하는 명령은 다음과 같습니다:

pvmove -i 2 /dev/sda5 /dev/md1

-i 2는 이동 중 진행 메시지 빈도를 조정하는 옵션입니다(인터벌). 이 과정은 시간이 걸릴 수 있으므로 인내심을 가지십시오.

이동이 완료되면 /dev/sda5를 VG에서 제거하고 PV 정보를 삭제합니다:

vgreduce server1 /dev/sda5
pvremove /dev/sda5

pvdisplay 출력 예시:

root@server1:~# pvdisplay — Physical volume — PV Name /dev/md1 VG Name server1 PV Size 4.76 GiB / not usable 1012.00 KiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 1218 Free PE 0 Allocated PE 1218 PV UUID W4I07I-…

이제 /dev/sda5의 파티션 타입을 Linux raid autodetect로 변경하고 /dev/sda5를 /dev/md1에 추가합니다. fdisk로 파티션 타입을 변경합니다:

fdisk /dev/sda

세부 상호작용 예시(프롬프트 응답 포함):

root@server1:~# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to switch off the mode (command ‘c’) and change display units to sectors (command ‘u’).

Command (m for help): <– t Partition number (1-5): <– 5 Hex code (type L to list codes): <– fd Changed system type of partition 5 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 or after you run partprobe(8) or kpartx(8) Syncing disks. root@server1:~#

그 다음 /dev/sda5를 md1에 추가합니다:

mdadm --add /dev/md1 /dev/sda5

동기화 진행 상태는 /proc/mdstat에서 확인할 수 있습니다:

cat /proc/mdstat

동기화 예시:

root@server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sda5[2] sdb5[1] 4989940 blocks super 1.2 [2/1] [_U] [====>…………….] recovery = 22.5% (1127872/4989940) finish=0.3min speed=161124K/sec

md0 : active raid1 sdb1[1] 248820 blocks super 1.2 [2/1] [_U]

unused devices: root@server1:~#

진행을 지속적으로 모니터하려면 watch 명령을 사용합니다:

watch cat /proc/mdstat

동기화가 완료되면 출력은 [UU]로 바뀝니다.

6. /dev/md0 마운트 및 /boot 복사

동기화가 끝나면 /dev/md0을 마운트하고 /boot 내용을 복사합니다:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

mount 명령으로 확인:

mount

예시 출력에서 /dev/md0가 /boot와 /mnt/md0에 마운트된 것을 확인할 수 있습니다.

마지막으로 /boot의 내용을 복사합니다:

cd /boot
cp -dpRx . /mnt/md0

옵션 해설: -d 보관 링크, -p 권한 유지, -R 재귀, -x 파일시스템 경계 미만복사.

Important: 복사 후 /mnt/md0의 파일들이 올바른지 확인하고, GRUB 설정이 /mnt/md0에도 반영되어 있는지 확인하십시오. 필요한 경우 grub-install을 /dev/sda와 /dev/sdb에 각각 실행해 두 디스크에 부트섹터를 설치합니다.

검증 및 테스트

  • /proc/mdstat에서 두 RAID가 [UU] 상태인지 확인합니다.
  • 재부팅 테스트: 한 디스크를 물리적으로 분리하거나 GRUB에서 다른 디스크로 부팅해도 시스템이 정상 부팅되는지 확인합니다.
  • vgdisplay/pvdisplay로 LVM이 올바른 PV를 사용하고 있는지 확인합니다.
  • blkid 또는 lsblk로 /boot와 LVM 장치 UUID/마운트 포인트를 확인합니다.

문제 해결 가이드

  • update-grub 오류 “Couldn’t find PV pv1”: /boot/grub/device.map에 모든 부트 가능한 디바이스가 매핑되어 있는지 확인합니다.
  • mdadm이 배열을 시작하지 않음: mdadm –examine –scan 출력과 /etc/mdadm/mdadm.conf의 UUID가 일치하는지 확인합니다.
  • 파티션 테이블 재읽기 실패(디바이스 busy): partprobe 또는 재부팅 후 파티션 변경 사항을 적용합니다.
  • GRUB가 RAID 메타데이터를 읽지 못함: metadata 버전을 –metadata=0.90로 재생성하거나 grub-install을 각 디스크에 실행하여 MBR/EFI에 직접 설치합니다.

역할 기반 체크리스트

시스템 관리자:

  • 백업 확인
  • 콘솔/물리 접근 확보
  • mdadm, lvm2, grub2 설치
  • 모든 변경 이전에 /etc 파일 백업

운영 엔지니어:

  • 롤백 계획 준비(백업에서 복원 절차 문서화)
  • 재부팅 스케줄링(유휴 시간 권장)

보안 담당자:

  • /boot의 무결성 검사(파일 권한 및 서명 관리)
  • 복사된 initrd 및 커널 파일의 서명 확인

체크포인트 및 수락 기준

  • /dev/md0가 /boot로 마운트되어 있으며 파일 목록이 원본과 동일함
  • /dev/md1가 LVM PV로 추가되어 VG에 반영됨
  • mdadm.conf에 배열 정보가 기록되어 재부팅 후 자동 조립 가능함
  • update-grub 및 update-initramfs를 성공적으로 실행함
  • 한 디스크를 제거해도 시스템이 부팅되는 것을 확인함

대안 및 확장 아이디어

  • 메타데이터 버전을 0.90으로 사용하면 일부 구형 부트로더와의 호환성이 좋아집니다(단 0.90은 메타데이터가 디스크 끝에 위치).
  • 소프트웨어 RAID 대신 하드웨어 RAID 컨트롤러 사용 시 부트로더/OS 구성 방법이 달라집니다.
  • 엔터프라이즈 환경에서는 ZFS 또는 btrfs의 내장 복제 기능을 검토할 수 있습니다.

간단한 활동 흐름(mermaid)

flowchart TD
  A[시작: 백업 확인] --> B{디스크 두 개 존재?}
  B -- 예 --> C[mdadm로 degraded RAID 생성]
  B -- 아니요 --> Z[중단: 디스크 준비]
  C --> D[pvcreate /dev/md1]
  D --> E[vgextend server1 /dev/md1]
  E --> F[pvmove /dev/sda5 /dev/md1]
  F --> G[파티션 타입 변경 및 mdadm --add]
  G --> H[동기화 완료 확인]
  H --> I[mkfs.ext2 /dev/md0 및 /boot 복사]
  I --> J[GRUB 설정 업데이트 및 update-grub]
  J --> K[검증: 재부팅 테스트]

간단 용어집(한 줄)

  • mdadm: Linux 소프트웨어 RAID 관리 유틸리티.
  • pvmove: LVM에서 PV간에 데이터 이동하는 명령.
  • vgextend/vgreduce: 볼륨 그룹에 PV를 추가/제거하는 명령.

요약

  • degraded 상태로 RAID를 생성한 뒤 LVM PV로 추가하고 pvmove로 데이터를 이동합니다.
  • /etc/mdadm/mdadm.conf, /etc/fstab, /etc/mtab, /etc/default/grub 및 GRUB 스크립트를 업데이트해야 합니다.
  • update-grub와 update-initramfs를 실행한 뒤 동기화 및 부팅 테스트를 통해 성공 여부를 확인합니다.

마지막으로: 계획과 백업이 최우선입니다. RAID는 가용성을 높여주지만 백업을 대체하지 않습니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Squid 및 DansGuardian 투명 프록시 구성 가이드
네트워킹

Squid 및 DansGuardian 투명 프록시 구성 가이드

Windows에서 VHD 생성 및 사용 가이드
가이드

Windows에서 VHD 생성 및 사용 가이드

모든 Android 기기에서 슬로우 모션 활성화 방법
모바일 가이드

모든 Android 기기에서 슬로우 모션 활성화 방법

Windows 10 INET_E_RESOURCE_NOT_FOUND 오류 해결 가이드
문제해결

Windows 10 INET_E_RESOURCE_NOT_FOUND 오류 해결 가이드

Windows 10에서 휴지통 자동 비우기 단계별 가이드
Windows

Windows 10에서 휴지통 자동 비우기 단계별 가이드

Vivaldi 스피드 다이얼 크기 변경 방법
브라우저 팁

Vivaldi 스피드 다이얼 크기 변경 방법