Profile picture

[Linux] 실무형 RAID 구성 및 복구 실습

JaehyoJJAng2023년 06월 27일

개요

이전에 리눅스 레이드에 대해 알아보고 구성해보기 라는 포스팅을 작성했었다.

이번 게시글에서는 해당 게시글 내용을 참고하여 실무에서 자주 쓰이는 RAID 기법 두 가지를 구성해보고, RAID를 강제로 깨뜨린 후, 새로운 하드로 복구하는 방법까지 기록해보려고 한다.


준비물

  • VMware 설치 및 Ubuntu 22.04 이미지 준비
  • RAID 실습을 위한 하드디스크 할당
    • RAID 1: 2개
    • RAID 5: 3개
  • mdadm 패키지 설치

RAID 1 (미러링) 구성

  • 필요 하드디스크: 최소 2개
    • RAID 1 구성에는 하드디스크가 최소 2개는 필요하다.

구성 방법

1. 디스크 추가

VM에 두 개의 디스크를 장착해주자. 각 디스크는 실습을 위한 것이므로 10GB 정도로 설정하면 충분하다.
image


장착이 잘 되었는지 서버로 들어가 lsblk 명령어로 확인해보자.
image
sdb, sdc가 정상적으로 보인다.(사용자 환경에 따라 다른 이름으로 표시될 수 있음.)


2. RAID 패키지 설치

sudo apt update -y
sudo apt install mdadm -y

3. RAID 1 배열 생성

위에서 lsblk/dev/sdb/dev/sdc가 추가된 것을 확인하였으니, 아래 명령어를 실행하여 RAID 1 배열을 생성해주자.

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

image


  • --create /dev/md0: RAID 디바이스를 /dev/md0으로 생성
  • --level=1: 레이드 레벨을 1로 지정
  • --raid-devices=2: 레이드 디바이스를 2개로 지정
  • /dev/sdb /dev/sdc: RAID로 묶을 디스크 명시

* 여기서 말하는 레이드 배열은 다음과 같다.

RAID 배열은 RAID 시스템을 구성하는 논리적인 디스크 그룹을 의미한다.

물리적으로 여러 개의 하드디스크가 RAID 설정에 따라 하나의 단위로 묶이게 되는데, 이 묶인 디스크들의 집합을 RAID 배열(RAID Array) 라고 한다.


쉽게 말하면, 여러 개의 물리적인 디스크를 RAID 기술로 결합해 하나의 큰 가상 디스크처럼 다루는 것을 RAID 배열 이라고 생각하면 된다.


4. RAID 배열 확인

cat /proc/mdstat

image


여기서 각 항목이 나타내는 의미는 다음과 같다.

  • md0: 이 이름은 RAID 배열의 디바이스 이름을 나타낸다.
  • active: RAID 배열의 상태를 나타낸다. active는 해당 배열이 정상 동작 중인 것을 의미한다.
    • inactive: RAID 배열이 비활성 상태임을 나타냄. 이는 RAID 배열이 중지되었거나, 구성된 디스크가 모두 작동하지 않거나 RAID 배열이 제대로 인식되지 않았을 때 발생할 수 있음.
    • degraded: RAID 배열이 정상 동작하지만, 하나 이상의 디스크가 비정상 상태에 있음을 의미함. RAID 1이나 RAID 5의 경우 하나의 디스크가 실패해도 배열은 계속 동작하지만 성능 저하가 우려됨.
    • failed: RAID 배열에 포함된 디스크가 고장나거나 RAID 배열 자체가 실패했음을 의미함. 이 상태가 뜬다면 데이터를 복구하기 위한 조치가 신속하게 이루어져야 함.
    • rebuilding: RAID 배열이 현재 복구 중임을 의미함. 일반적으로 RAID 배열에 새로운 디스크를 추가하거나 고장난 디스크를 교체했을 때 나타나며, RAID 관리 소프트웨어가 데이터를 새 디스크에 동기화하고 있음.
    • suspended: RAID 배열이 일시 중지된 상태.
    • removed: RAID 배열에서 디스크가 제거된 상태
  • raid1: 사용된 RAID 레벨
  • sdc[1] sdb[0]: 배열에 포함된 디스크 이름과 인덱스
  • 10476544 blocks: 총 블록 수 (용량)
  • super 1.2: 메타데이터 형식
  • [2/2]: 총 디스크 수와 정상 디스크 수
  • [UU]: 디스크 상태 (모두 정상)

5. 파일시스템 생성 및 마운트

sudo mkfs.ext4 /dev/md0
sudo mkdir /mnt/raid1
sudo mount /dev/md0 /mnt/raid1

image



6. RAID 1 설정 파일 업데이트

RAID 설정을 영구화하기 위해 /etc/mdadm/mdadm.conf 파일을 다음과 같이 업데이트하자.

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

image


  • mdadm --detail --scan: 현재 시스템에서 사용 중인 RAID 배열의 정보 스캔하여 출력
  • update-initramfs -u: 부팅 과정에서 사용되는 initramfs(초기 램 디스크 이미지) 를 업데이트하는 명령어.
    • initramfs는 리눅스 커널이 파일 시스템을 마운트하기 전에 필요한 드라이버나 설정을 포함한 초기 파일 시스템이다.

복구 테스트

1. 디스크 장애 시뮬레이션

한 개의 디스크(/dev/sdc)를 장애 상태로 설정

sudo mdadm /dev/md0 --fail /dev/sdc

image


2. 장애 디스크(/dev/sdc) 제거

/dev/sdc를 RAID에서 제거해주자

sudo mdadm /dev/md0 --remove /dev/sdc

image


3. 새 디스크 추가 및 복구

새로운 디스크를 추가해줄거다.
image


추가된 디스크를 lsblk로 확인해보자.
image


마지막으로 추가한 디스크(/dev/sdd)를 RAID에 추가해주고 복구를 시작하자.

sudo mdadm /dev/md0 --add /dev/sdd

RAID 5 (스트라이핑 + 패리티) 구성

  • 필요한 하드디스크: 최소 3개

구성 방법

1. 디스크 추가

VM에 세 개의 디스크를 장착해주자. 각 디스크는 실습을 위한 것이므로 10GB 정도로 설정하면 충분하다.
image


장착이 잘 되었는지 서버로 들어가 lsblk 명령어로 확인해보자.
image
/dev/sdb, /dev/sdc, /devsdd가 정상적으로 보인다.(사용자 환경에 따라 다른 이름으로 표시될 수 있음.)


2. RAID 5 배열 생성

위에서 lsblk/dev/sdb/dev/sdc, /dev/sdd가 추가된 것을 확인하였으니,

아래 명령어를 실행하여 RAID 5 배열을 생성해주자.

sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

image


3. RAID 배열 확인

cat /proc/mdstat

image


4. 파일시스템 생성 및 마운트

sudo mkfs.ext4 /dev/md0
sudo mkdir /mnt/raid5
sudo mount /dev/md0 /mnt/raid5

5. RAID 5 설정 파일 업데이트

RAID 설정을 영구화하기 위해 /etc/mdadm/mdadm.conf 파일을 업데이트하자.

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

복구 테스트

1. 디스크 장애 시뮬레이션

한 개의 디스크(/dev/sdd)를 장애 상태로 설정

sudo mdadm /dev/md0 --fail /dev/sdd

image


2. 장애 디스크(/dev/sdd) 제거

/dev/sdd를 RAID에서 제거해주자

sudo mdadm /dev/md0 --remove /dev/sdd

image


3. 새 디스크 추가 및 복구

새로운 디스크를 추가해줄거다.
image


추가된 디스크를 lsblk로 확인해보자.
image


마지막으로 추가한 디스크(/dev/sde)를 RAID에 추가해주고 복구를 시작하자.

sudo mdadm /dev/md0 --add /dev/sde

RAID 클린 삭제

구성한 RAID를 클린 삭제해보자.

* RAID를 삭제하게 되면 데이터를 잃을 수 있으니 실습이 아닌 환경에서는 주의하자


1. RAID 배열 상태 확인

먼저 현재 구성된 RAID 배열의 상태와 사용 중인 디스크를 확인해야 한다. RAID 배열을 해제하기 전에 어느 디스크가 RAID에 포함되어 있는지 명확히 확인해야 한다.

cat /proc/mdstat

image


RAID 배열과 관련된 정보를 자세히 확인하려면 아래 명령어도 사용할 수 있다.

sudo mdadm --detail /dev/<raid>

image


2. 파일 시스템 마운트 해제

RAID 배열에 파일 시스템이 마운트되어 있는 경우, 이를 먼저 마운트 해제해야 한다.

RAID가 마운트된 위치를 확인하고, umount 명령어로 마운트를 해제하자.

sudo umount /mnt/raid1 # RAID가 마운트된 위치에 따라 경로를 변경

3. RAID 배열 중지

RAID 배열을 중지하기 위해 아래 명령어를 실행. 중지하는 과정은 RAID를 해제하는 첫 번째 단계이다.

sudo mdadm --stop /dev/md0 # /dev/md0은 RAID 장치 이름임

4. RAID 배열에서 디스크 제거

RAID에 추가한 각 디스크를 배열에서 제거해야 한다. 명령어 실행 시 RAID에 포함된 각 디스크를 순차적으로 제거한다.

sudo mdadm --remove /dev/md0

5. RAID 메타데이터 삭제 (superblock 삭제)

RAID 배열의 메타데이터는 디스크에 남아있으므로 이를 완전히 지우기 위해 superblock을 삭제해야 한다.

RAID에 사용된 각 디스크에서 superblock을 제거하자.

sudo mdadm --zero-superblock /dev/sd{b,c} # 각 디스크 이름으로 변경

/dev/sdb, /dev/sdc 디스크에 대해 실행하였다.


6. RAID 배열 정보 삭제

/etc/mdadm/mdadm.conf에 저장된 RAID 배열의 정보를 삭제해야 한다. 이 파일은 시스템 재부팅 시 RAID 배열을 다시 로드하므로, 더 이상 필요하지 않은 RAID 정보를 삭제해주자.

sudo vim /etc/mdadm/mdadm.conf

이 파일에서 삭제하려는 RAID 배열에 해당하는 줄을 찾아서 제거한 후, 파일을 저장하고 죵료하자.


7. initramfs 업데이트

RAID 배열 정보 삭제 후, 시스템이 이를 반영할 수 있도록 부팅 이미지를 업데이트해야 한다.

sudo update-initramfs -u

Loading script...