Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스에서 MDADM으로 소프트웨어 RAID 구성하기: 설치부터 복구까지 완벽 가이드

MDADM(multiple disks admin)은 리눅스에서 소프트웨어 RAID를 생성하고 관리할 수 있는 대표적인 도구입니다. 이 글에서는 mdadm을 활용해 RAID 어레이 스토리지를 만드는 방법, 디스크 추가 및 관리, 핫스페어(hot-spare) 구성 방법 등 실무에서 자주 사용되는 작업들을 단계별로 자세히 살펴보겠습니다.

mdadm 설치 방법

mdadm 설치는 배포판에 맞는 패키지 관리자 명령어로 간단히 진행할 수 있습니다.

  • CentOS/Red Hat 계열 (yum/dnf 사용): yum install mdadm
  • Ubuntu/Debian 계열: apt-get install mdadm

설치가 진행되면 mdadm과 의존성 라이브러리가 함께 설치됩니다.

Running transaction
Installing : libreport-filesystem-2.1.11-43.el7.centos.x86_64 1/2
Installing : mdadm-4.1-1.el7.x86_64 2/2
Verifying : mdadm-4.1-1.el7.x86_64 1/2
Verifying : libreport-filesystem-2.1.11-43.el7.centos.x86_64 2/2
Installed:
mdadm.x86_64 0:4.1-1.el7
Dependency Installed:
libreport-filesystem.x86_64 0:2.1.11-43.el7.centos
Complete!

리눅스에서 디스크 2개로 RAID 1(미러) 구성하기

리눅스 서버에 여분의 디스크 두 개가 장착되어 있고, 이 디스크들로 소프트웨어 미러(RAID 1)를 구성하려고 합니다. 디스크는 비어 있는 상태입니다. 먼저 RAID에 추가할 디스크의 모든 슈퍼블록(superblock)을 초기화해야 합니다.

# mdadm --zero-superblock --force /dev/vd{b,c}

여기서는 vdbvdc, 두 개의 깨끗한 디스크를 사용합니다.

mdadm: Unrecognised md component device - /dev/vdb
mdadm: Unrecognised md component device - /dev/vdc

이 메시지는 두 디스크 모두 이전에 RAID 어레이에 속한 적이 없다는 의미입니다.

이제 두 디스크로 소프트웨어 RAID 1을 생성하여 /dev/md0 장치로 만들어 보겠습니다. 다음 명령어를 사용합니다.

# mdadm --create --verbose /dev/md0 -l 1 -n 2 /dev/vd{b,c}

여기서 '-l 1'은 어레이 유형(이 경우 RAID 1)을, '-n 2'는 어레이에 추가할 디스크 수를 나타냅니다.

RAID 0 및 RAID 5 구성

여러 물리 디스크에 작업을 병렬 분산하여 읽기/쓰기 속도를 높이고 싶다면 RAID 0(스트라이핑)을 구성하면 됩니다.

# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/vdb /dev/vdc

디스크 3개 이상으로 RAID 5를 구성하려면 다음과 같이 입력합니다.

# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/vdb /dev/vdc /dev/vdd

명령어를 입력한 후 작업을 확인하면 소프트웨어 RAID가 생성됩니다.

디스크 정보를 조회하면 생성된 RAID 장치 md0를 확인할 수 있습니다.

# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 20G 0 disk
├─vda1 253:1 0 512M 0 part /boot
└─vda2 253:2 0 19.5G 0 part /
vdb 253:16 0 20G 0 disk
└─md0 9:0 0 20G 0 raid1
vdc 253:32 0 20G 0 disk
└─md0 9:0 0 20G 0 raid1

파일 시스템 생성 및 마운트

RAID 1 장치에 ext4 파일 시스템을 생성하려면 다음 명령어를 실행합니다.

# mkfs.ext4 /dev/md0

백업용 디렉터리를 만들고 RAID 장치를 마운트합니다.

# mkdir /backup
# mount /dev/md0 /backup/
# df -h

Filesystem Size Used Avail Use% Mounted on
.............
.............
/dev/md0 20G 45M 19G 1% /backup

어레이가 오류 없이 마운트되었습니다. 매번 수동으로 마운트하지 않으려면 fstab 파일에 다음 내용을 추가합니다.

# nano /etc/fstab

/dev/md0 /backup ext4 defaults 1 2

RAID 어레이 상태 확인 및 데이터 무결성 검사

어레이 내 데이터 무결성을 검사하려면 다음 명령어를 사용합니다.

# echo 'check' > /sys/block/md0/md/sync_action

검사가 완료되면 아래 파일의 출력 내용을 확인합니다.

# cat /sys/block/md0/md/mismatch_cnt

결과값이 0이면 어레이에 문제가 없는 것입니다.

검사를 중단하려면 다음 명령어를 실행합니다.

# echo 'idle' > /sys/block/md0/md/sync_action

서버에서 운영 중인 모든 RAID의 상태를 확인하려면 다음 명령어를 사용합니다.

# cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 vdc[1] vdb[0]
20954112 blocks super 1.2 [2/2] [UU]

특정 RAID에 대한 더 자세한 정보는 다음 명령어로 확인할 수 있습니다.

# mdadm -D /dev/md0

출력 결과의 주요 항목은 다음과 같습니다.

  • Version – 메타데이터 버전
  • Creation Time – RAID 생성 일시
  • Raid Level – RAID 어레이 레벨
  • Array Size – RAID 디스크 공간 크기
  • Used Dev Size – 장치가 사용 중인 공간 크기
  • Raid Device – RAID를 구성하는 디스크 수
  • Total Devices – RAID에 추가된 전체 디스크 수
  • State – 현재 상태(clean이면 정상)
  • Active Devices – RAID에서 활성 상태인 디스크 수
  • Working Devices – RAID에서 정상 작동 중인 디스크 수
  • Failed Devices – RAID에서 장애가 발생한 디스크 수
  • Spare Devices – RAID의 예비 디스크 수
  • Consistency Policy – 장애 발생 후 동기화 유형을 설정하는 파라미터. resync는 RAID 어레이 복구 후 전체 동기화를 의미하며(bitmap, journal, ppl 모드 사용 가능)
  • UUID – RAID 어레이 식별자

fdisk를 사용하면 간략한 정보를 확인할 수 있습니다.

# fdisk -l /dev/md0

Disk /dev/md0: 21.5 GB, 21457010688 bytes, 41908224 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

RAID 디스크 장애 복구 및 교체 방법

RAID를 구성한 디스크 중 하나에 장애가 발생하거나 손상된 경우, 다른 디스크로 교체할 수 있습니다. 먼저 해당 디스크가 실제로 손상되어 교체가 필요한지 확인해야 합니다.

# cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 vdb[0]
20954112 blocks super 1.2 [2/1] [U_]

위 출력에서 활성 디스크가 하나뿐인 것을 확인할 수 있습니다. [U_] 표시 역시 문제가 있음을 의미하며, 두 디스크 모두 정상일 때는 [UU]로 표시됩니다.

RAID의 상세 정보에서도 문제가 확인됩니다.

# mdadm -D /dev/md0

/dev/md0:
Version : 1.2
Creation Time : Tue Dec 31 12:39:22 2020
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Dec 31 14:41:13 2020
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
State : clean, degraded

마지막 줄의 'degraded' 상태는 RAID 내 한 개의 디스크가 손상되었음을 보여줍니다.

이 예제에서는 /dev/vdc를 교체해야 합니다. 어레이를 복구하려면 손상된 디스크를 제거하고 새 디스크를 추가해야 합니다.

장애가 발생한 드라이브를 제거합니다.

# mdadm /dev/md0 --remove /dev/vdc

새 디스크를 어레이에 추가합니다.

# mdadm /dev/md0 --add /dev/vdd

새 디스크를 추가하면 자동으로 복구(리빌드)가 시작됩니다.

# mdadm -D /dev/md0

/dev/md0:
Version : 1.2
Creation Time : Tue Dec 31 12:39:22 2020
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Dec 31 14:50:20 2020
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Rebuild Status : 48% complete
Name : host1:0 (local to host host1)
UUID : 9d59b1fb:7b0a7b6d:15a75459:8b1637a2
Events : 42
Number Major Minor RaidDevice State
0 253 16 0 active sync /dev/vdb
2 253 48 1 spare rebuilding /dev/vdd

'rebuild Status : 48% complete'는 현재 어레이 복구 진행 상태를, 'spare rebuilding /dev/vdd'는 어레이에 추가되고 있는 디스크를 나타냅니다.

리빌드가 완료된 후 어레이 상태를 확인하면 다음과 같이 정상 상태임을 알 수 있습니다.

State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

리눅스 소프트웨어 RAID에서 디스크 추가 및 제거하기

기존에 생성한 mdadm RAID 장치를 제거해야 하는 경우, 먼저 마운트를 해제합니다.

# umount /backup

그다음 다음 명령어를 실행합니다.

# mdadm -S /dev/md0

mdadm: stopped /dev/md0

RAID 어레이를 중지하면 더 이상 별도의 디스크 장치로 인식되지 않습니다.

# mdadm -S /dev/md0

mdadm: error opening /dev/md0: No such file or directory

연결된 모든 드라이브를 스캔하여 물리 디스크의 메타데이터를 기반으로 이전에 제거(중지)한 RAID 장치를 다시 조립할 수 있습니다.

# mdadm --assemble --scan

정상 작동 중인 드라이브를 어레이에서 제거하고 교체하려면, 먼저 해당 드라이브를 장애(fail) 상태로 표시해야 합니다.

# mdadm /dev/md0 --fail /dev/vdc

그다음 다음 명령어로 제거할 수 있습니다.

# mdadm /dev/md0 --remove /dev/vdc

새 디스크 추가는 장애 드라이브 교체 시와 동일한 방법으로 진행합니다.

# mdadm /dev/md0 --add /dev/vdd

MDADM 어레이에 핫스페어(Hot-Spare) 드라이브 추가하기

활성 디스크 중 하나에 장애가 발생했을 때 RAID 어레이를 신속하게 리빌드할 수 있도록 핫스페어(hot-spare) 드라이브를 추가로 구성할 수 있습니다. 사용하려는 md 장치에 여유 디스크를 추가합니다.

# mdadm /dev/md0 --add /dev/vdc

RAID 상태를 확인하면 해당 디스크가 스페어(spare)로 표시됩니다.

핫스페어가 정상 작동하는지 확인하려면 임의의 드라이브를 장애 상태로 표시한 후 RAID 상태를 점검합니다.

# mdadm /dev/md0 --fail /dev/vdb

확인 결과, 어레이 리빌드가 시작된 것을 볼 수 있습니다.

/dev/vdb 디스크가 장애로 표시되었고, 핫스페어 디스크가 활성 RAID 디스크 중 하나로 전환되어 리빌드 프로세스가 시작되었습니다.

추가로 정상 디스크를 RAID에 편입하려면 다음 두 단계를 거쳐야 합니다.

먼저 빈 드라이브를 어레이에 추가합니다.

# mdadm /dev/md0 --add /dev/vdb

이제 이 디스크는 핫스페어로 표시됩니다. 이 디스크를 활성화하려면 md RAID 장치를 확장합니다.

# mdadm -G /dev/md0 --raid-devices=3

그러면 어레이 리빌드가 진행됩니다.

리빌드가 완료되면 모든 디스크가 활성 상태로 전환됩니다.

Number Major Minor RaidDevice State
3 253 32 0 active sync /dev/vdc
2 253 48 1 active sync /dev/vdd
4 253 16 2 active sync /dev/vdb

MDADM RAID 어레이 완전히 제거하기

소프트웨어 RAID 장치를 영구적으로 제거하려면 다음 순서대로 진행합니다.

# umount /backup – 어레이를 디렉터리에서 마운트 해제

# mdadm -S /dev/md0 – RAID 장치 중지

그다음 RAID를 구성했던 디스크들의 모든 슈퍼블록을 초기화합니다.

# mdadm --zero-superblock /dev/vdb
# mdadm --zero-superblock /dev/vdc

Mdmonitor: RAID 상태 모니터링 및 이메일 알림 설정

mdmonitor 데몬을 사용하면 RAID 상태를 지속적으로 모니터링할 수 있습니다. 먼저 현재 어레이 구성 정보가 담긴 /etc/mdadm.conf 파일을 생성해야 합니다.

# mdadm --detail --scan > /etc/mdadm.conf

mdadm.conf 파일은 자동으로 생성되지 않으므로, 반드시 수동으로 생성하고 업데이트해야 합니다.

RAID에 문제가 발생했을 때 알림을 받을 관리자 이메일 주소를 /etc/mdadm.conf 파일 끝에 추가합니다.

MAILADDR raidadmin@example.com

그다음 systemctl을 사용해 mdmonitor 서비스를 재시작합니다.

# systemctl restart mdmonitor

이후 mdadm 오류나 디스크 장애가 발생하면 시스템이 이메일로 알려줍니다.

비활성(Inactive) 상태의 MDADM RAID 복구

하드웨어 장애나 비정상 종료가 발생하면 소프트웨어 RAID 어레이가 inactive(비활성) 상태가 될 수 있습니다. 모든 드라이브가 비활성으로 표시되지만 오류는 없는 경우입니다.

# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : inactive vdc[1] vdb[0]
20954112 blocks super
unused devices: <none>

이 경우 먼저 다음 명령어로 어레이를 중지합니다.

# mdadm --stop /dev/md0

그리고 다시 조립합니다.

# mdadm --assemble --scan --force

md 장치가 /etc/fstab에 등록되어 있다면 다음 명령어로 다시 마운트합니다.

# mount -a

이미 운영 체제가 설치된 환경에서 소프트웨어 RAID를 구성하는 것도 가능하지만, 이 경우 파티션 테이블을 새 디스크에 수동으로 복사하고, 시스템 디스크 내용을 단일 디스크로 구성된 RAID로 옮긴 뒤, 첫 번째 디스크를 초기화하여 RAID에 추가하고, initramfs와 GRUB 부트로더를 수정해야 하므로 작업이 복잡합니다. 따라서 서버 배포 단계에서 CentOS 설치 시 소프트웨어 RAID 모드를 선택하는 것이 훨씬 효율적입니다.

mdadm은 리눅스에서 소프트웨어 RAID 관리를 크게 간소화해 주는 도구입니다. 이 글에서는 mdadm을 활용한 기본적인 작업 방법을 설명하고, RAID 운영 시 자주 발생하는 질문들을 함께 다루었습니다. 이 가이드를 통해 안정적인 소프트웨어 RAID 환경을 구축하고 관리하시기 바랍니다.