참고

  • 이 글은 Rocky Linux 9 버전을 기준으로 작성됨
  • 다른 OS에서는 특정 명령어가 작동하지 않을 수 있음
  • 이전 글과 순서는 동일하게 가져왔으나 명령어와 참고 자료 (사진)이 다름

0. RAID 구성하기 전 점검할 것

같은 용량의 디스크를 최소 두 개 이상 (RAID 레벨에 따라 더 필요할 수 있음) 준비하기

  • 가상머신 설정에 들어가면 디바이스를 추가할 수 있음
  • 가상머신을 끄고 추가한 다음에, 재부팅해서 아래의 명령어를 쳐보기
lsblk
  • 만약에 OS를 설치한 디바이스를 제외하고, 총 세 개의 디바이스를 더 추가했다면 아래와 같이 나올 것

  • 참고로 sd 뒤에 a, b, c, d는 실제 물리적인 개별 디스크고, 그 뒤에 붙는 1, 2, 3은 파티션임
  • 현재 OS가 심어져있는 sda 를 제외하고, vdb, vdc, vdd 두 개가 존재하기 때문에 RAID를 설정할 수 있음

mdadm 패키지 설치하기

  • mdadm을 활용해서 RAID를 구성해볼 것이기 때문에 설치해야함
  • 일단 있는지부터 보기
  • 아래 명령어 쳤는데 그 밑에 사진처럼 나오면 깔린거임 (아니면 안깔린거)
mdadm --help

  • 안깔려있음 아래의 명령어를 통해 설치
dnf install mdadm

1. 디스크/파티션 상태 확인하기

lsblk
fdisk -l
mount | grep sd
  • 위 명령어의 의미를 알고싶다면 이전 02번 글 확인

체크리스트

  • OS 디스크(/dev/sda) 아닌지
  • RAID에 사용할 디스크들의 크기가 동일한지
  • 마운트된 파티션 없는지
  • LVM/PV로 사용 중 아닌지

1-2. 이전에 RAID 구성된게 있는지 확인하기

mdadm --examine /dev/vdb
  • 만약에 구성되어 있었다면 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/sdb

2. 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/vdb /dev/vdc /dev/vdd
  • RAID 5로 디바이스 3개 (vdb, vdc, vdd) 써서 md0이라는 논리 디스크 만들 것

  • 그러면 mdadm가 그거에 RAID 메타데이터를 만듬

3. RAID 구성 후 확인

3-1. 동기화 상태 확인

cat /proc/mdstat

출력 예시

  • raid 5로 구성된 vdd, vdc, vdb가 처음 생성되고 나서 패리티 초기 계산을 진행하고 있음

  • 초기 계산 끝남

3-2. RAID 상세 정보 확인

mdadm --detail /dev/md0

출력 예시

  • State : clean

    → 정상 (rebuild/resync 없음)

  • Active Devices : 2

    → 현재 사용 중 디스크 수

  • Failed Devices : 0

    → 장애 디스크 없음

  • Spare Devices : 0

    → 대기 디스크 없음

  • degraded / recovering / resyncing 상태면 즉시 원인 확인 필요

체크리스트

  • Stateclean 인가
  • Failed Devices0 인가
  • 모든 디스크가 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...

출력 에시

  • 현재 이 시스템 커널 레벨이 5.14.0-611.5.1.el9_7.aarch64 임

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마운트 옵션
5dump 백업 여부
6fsck 검사 순서

fstab 검증

  • 기본 명령어
mount -a
  • -a : fstab 읽어서 그 안에 있는거 전부 마운트함
    • 이 때 오류생기면 fstab 잘못되었다는 거니까 재부팅하면 일남

최종 확인

  • 한 번 재부팅 하고 lsblk 실행
  • 아래처럼 설정한 디스크들 밑에 생성한 RAID가 보이면 성공!

다음에 할 것

  • 가상머신의 디스크 하나를 고장내고 복구해보기