참고
- 이 글은 CentOS 7 버전을 기준으로 작성됨
- 다른 OS에서는 특정 명령어가 작동하지 않을 수 있음
0. RAID 구성하기 전 점검할 것
같은 용량의 디스크를 최소 두 개 이상 (RAID 레벨에 따라 더 필요할 수 있음) 준비하기
- 가상머신 설정에 들어가면 디바이스를 추가할 수 있음
- 가상머신을 끄고 추가한 다음에, 재부팅해서 아래의 명령어를 쳐보기
ls -l /dev/sd*- 만약에 OS를 설치한 디바이스를 제외하고, 총 세 개의 디바이스를 더 추가했다면 아래와 같이 나올 것

- 참고로 sd 뒤에 a, b, c, d는 실제 물리적인 개별 디스크고, 그 뒤에 붙는 1, 2, 3은 파티션임
- 현재 OS가 심어져있는 sda 를 제외하고, sdb, sdc, sdd 두 개가 존재하기 때문에 RAID를 설정할 수 있음
mdadm 패키지 설치하기
- mdadm을 활용해서 RAID를 구성해볼 것이기 때문에 설치해야함
- 일단 있는지부터 보기
- 아래 명령어 쳤는데 그 밑에 사진처럼 나오면 안깔린거고, 버전이 뜨면 깔려있는거임
mdadm --version
- 패키지 매니저(yum)를 통해 mdadm을 설치함
yum install mdadm- 잘 깔리면 좋겠지만 아래와 같은 문제가 발생함

- 사유 : CentOS 7이 지원을 종료했기 때문임…
- 그래서 데이터를 받아올 장소를 다시 지정해줘야함
vi /etc/yum.repos.d/CentOS-Base.repo- 기존의 mirrorlist를 주석처리 함
- 그리고 밑에 있는 baseurl의 주석처리를 푼 다음에, mirrorlist.centos… 이거를 vault.centos… 로 바꿈

- 저장하고 나옴
- 아래의 명령어를 실행해서 업데이트한 yum 설정 파일을 인식하게 함
yum clean all
yum makecache- 그리고 다시 설치를 시도하면 뭐라뭐라 막 뜸
- 중간중간 y 입력 해주고
- 잘 설치되면 아래와 같이 뜸

1. 디스크/파티션 상태 확인하기
ls -l /dev/sd*
lsblk
fdisk -l
mount | grep sd- 위 명령어의 의미를 알고싶다면 이전 02번 글 확인
체크리스트
- OS 디스크(
/dev/sda) 아닌지 - RAID에 사용할 디스크들의 크기가 동일한지
- 마운트된 파티션 없는지
- LVM/PV로 사용 중 아닌지
1-2. 이전에 RAID 구성된게 있는지 확인하기
mdadm --examine /dev/sdb- 만약에 구성되어 있었다면 RAID Superblock (RAID 메타데이터) 정보가 나옴
예시 출력
- 있을 경우
/dev/sdb:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID : 3c9e1b6e:7a4d9c21:8f2d7a13:91c4e5ab
Name : server01:0
Creation Time : Wed Jan 10 14:22:31 2024
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 209612800 sectors (100.00 GiB)
Array Size : 104806400 sectors (50.00 GiB)
Used Dev Size : 104806400 sectors (50.00 GiB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
State : clean
Device UUID : d2bfa33a:1e3c1a21:9fcae122:7c1d9b33
Update Time : Thu Jan 11 09:10:12 2024
Bad Block Log : 512 entries available at offset 72 sectors- 없을 경우
mdadm: No md superblock detected on /dev/sdb.만약에 메타데이터 있을 때 지우는 방법
mdadm --zero-superblock /dev/sdb2. RAID 구성하기
기본 명령어
mdadm --create /dev/md0 \\
--level=<RAID_LEVEL> \\
--raid-devices=<N> \\
/dev/sdX /dev/sdY [...]- —create /dev/md0 : /dev에 md0이라는 이름으로 구성할 것
- —level= : RAID 레벨 설정
- 설정 가능한 레벨 : 0, 1, 5, 6, 1+0
- —raid-devices= : RAID로 쓸 디바이스 개수
- /dev/sdX /dev/sdY … : RAID로 쓸 디바이스 지정
예시 (RAID 5)
mdadm --create /dev/md0 \\
--level=5 --raid-devices=3 \\
/dev/sdb /dev/sdc /dev/sdd-
RAID 5로 디바이스 3개 (sdb, sdc, sdd) 써서 md0이라는 논리 디스크 만들 것
-
그러면 mdadm가 그거에 RAID 메타데이터를 만듬

3. RAID 구성 후 확인
3-1. 동기화 상태 확인
cat /proc/mdstat출력 예시

- raid 5로 구성된 sdd, sdc, sdb가 처음 생성되고 나서 패리티 초기 계산을 진행하고 있음

- 초기 계산 끝남
3-2. RAID 상세 정보 확인
mdadm --detail /dev/md0출력 예시

-
State : clean→ 정상 (rebuild/resync 없음)
-
Active Devices : 2→ 현재 사용 중 디스크 수
-
Failed Devices : 0→ 장애 디스크 없음
-
Spare Devices : 0→ 대기 디스크 없음
-
degraded/recovering/resyncing상태면 즉시 원인 확인 필요
체크리스트
-
State가 clean 인가 -
Failed Devices가 0 인가 - 모든 디스크가 active sync 상태인가
-
/proc/mdstat와 상태가 일치하는가
4. 파일 시스템 생성하기
- RAID 디스크는 일반 디스크처럼 취급함
기본 명령어
mkfs.<파일시스템이름> 디스크위치예시
mkfs.xfs /dev/md0
# 또는
mkfs.ext4 /dev/md0-
여기서는 xfs 방법으로 만들어 볼 예정
-
실행 결과

mkfs로 생성 가능한 파일 시스템 확인 방법
ls /sbin/mkfs.*- 실행 결과

4-2. 파일 시스템 점검하기
파일 시스템 타입 확인
blkid /dev/md0- 예시 출력

- UUID랑 TYPE 있으면 OK
마운트 전 점검
cat /proc/mdstat
mdadm --detail /dev/md0- 체크리스트
-
State : clean -
Failed Devices : 0 - rebuild/resync X
5. 마운트
- 마운트 명령
mkdir /data
mount /dev/md0 /data- 확인용 명령
df -h
lsblk예시
- df -h 출력 예시

| 컬럼 | 의미 |
|---|---|
| Filesystem | 디바이스 또는 논리 볼륨 |
| Size | 전체 파일시스템 크기 |
| Used | 사용 중 공간 |
| Avail | 사용 가능한 공간 |
| Use% | 사용률 |
| Mounted on | 마운트 포인트 |
6. 부팅 후 RAID 자동 인식 설정
참고 : 부팅의 과정
BIOS/UEFI
→ kernel
→ initramfs (초기 루트 환경)
→ 실제 루트 파일시스템
→ systemd
→ /etc/fstab 기반 마운트- 따라서 RAID를 인식하려면 initramfs 에 관련 정보가 있어야 한다.
mdadm 설정 저장
기본 명령어
mdadm --detail --scan >> /etc/mdadm.conf-
mdadm —defail —scan : 현재 시스템에 존재하는 RAID 정보를 스캔함
-
: 왼쪽의 출력을 오른쪽으로 전달함
-
/etc/mdadm.conf : 스캔한 RAID 정보를 /etc/mdadm.conf 에 저장함
-
예시

- 이런식으로 생김
dracut으로 initramfs 파일 수정
- dracut은 현재 시스템 설정과 /etc 폴더 안에 있는 일부 내용을 가지고 initramfs 이미지를 생성한다.
기본 명령어
dracut [옵션] <initramfs_이미지_경로> <커널_버전>예시
dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)- -H : Host Only. 현재 시스템에 필요한 드라이버만 포함
- -f : force. 기존 내용 덮어쓰기
- /boot/initramfs-(uname -r)
- uname -r : 현재 커널 버전 정보 출력
- $(명령) : 명령 결과를 텍스트로 치환
- 예를 들어 커널 버전이 5.xx… 일 때, 위의 예시 명령은 아래로 치환된다.
dracut -H -f /boot/initramfs-5.xx....img 5.xx...출력 에시

- 현재 이 시스템 커널 레벨이 3.10.0-1160.e17.x86_64 임
fstab (파일 시스템 테이블) 수정
파일 시스템 UUID 조회
- 기본 명령어
blkid /dev/md0- 예시

/etc/fstab 수정
- 기본 명령어
vi /etc/fstab-
텍스트 편집기로 fstab 들어가서 밑에다가 위에서 확인한 UUID랑 이것저것 쓰면 됨
-
예시

- 의미
<장치> <마운트포인트> <FS> <옵션> <dump> <fsck>
UUID=... /data xfs defaults 0 0| 필드 | 의미 |
|---|---|
| 1 | 장치 (UUID 권장) |
| 2 | 마운트 디렉터리 |
| 3 | 파일시스템 |
| 4 | 마운트 옵션 |
| 5 | dump 백업 여부 |
| 6 | fsck 검사 순서 |
fstab 검증
- 기본 명령어
mount -a- -a : fstab 읽어서 그 안에 있는거 전부 마운트함
- 이 때 오류생기면 fstab 잘못되었다는 거니까 재부팅하면 일남
최종 확인
- 한 번 재부팅 하고 lsblk 실행
- 아래처럼 설정한 디스크들 밑에 생성한 RAID가 보이면 성공!
