RAID란?

음휘영·2023년 5월 2일
0

리눅스

목록 보기
1/2

RAID

RAID(Redundant Array of Independent)는 여러개의 하드 디스크가 있을 때 동일한 데이터를 다른 위치에 중복해서 저장하는 방법이다.
운영체제에서 하나의 RAID는 논리적으로 하나의 디스크로 인식하여 처리된다.

RAID는 초기에 저용량 하드디스크를 하나의 디스크로 확장하여 사용했으나, 현재는 백업을 가능하게 하고 안정적인 데이터의 보존과 유지 기능, 속도 향상등에 사용된다.

RAID에서 사용하는 기술

  • 스트라이핑(Striping)
    연속된 데이터를 여러 개의 디스크에 라운드로빈 방식으로 기록하는 기술이다.
    프로세서가 하나의 디스크에서 읽어들이는 것보다 더 빠르게 데이터를 읽거나 쓸 수 있다면 매우 유용하다.
    대표적으로 RAID-0에서 사용하는 기술이고, 최소 2개의 디스크가 필요하다.

  • 미러링(Mirroring)
    디스크에 에러가 발생 시 데이터의 손실을 막기 위해 추가로 하나 이상의 장치에 중복해서 저장하는 기술이다.
    두개의 디스크로 구현했을 경우, 하나의 디스크에 에러가 발생해도 다른 이스크의 데이터는 그대로 보존되기 때문에 결함허용(Fault-tolerance)라고도 부른다.

RAID의 종류

  • RAID-0
    스트라이핑 기술을 사용하여 빠른 입출력 속도를 제공한다.
    데이터를 ㅈ우복이나 패리티 없이 디스크에 분산하여 기록한다.
    규칙없이 저장하는 방식으로 구성된 디스크 중에 하나라도 오류가 발생하면 데이터 복구가 불가능하다.

  • RAID-1
    미러링 기술을 사용하여 두개의 디스크에 데이터를 동일하게 기록한다.
    디스크 오류 시 데이ㅣ터 복구 능력은 탁월하지만, 중복 저장으로 인한 디스크의 낭비가 50%에 이른다.

  • RAID-2
    디스크들은 스트라이핑 기술을 사용하여 구성하고, 디스크들의 에러를 감지하고 수정하기 위해 ECC(Error Check & Correction) 정보를 사용한다.

  • RAID-3
    스트라이핑 기술을 사용하며 디스크를 구성하고, 패리티 정보를 저장하기 위해 별도로 하나의 디스크를 사용한다.

  • RAID-4
    블록 형태의 스트라이핑 기술을 사용하여 디스크를 구성하는데, 이는 단일 디스크로부터 레코드를 읽을 수 있고 데이터를 읽을 때 중첩 입출력의 장점이 있다.
    쓰기 작업은 패리티와 같이 기록하기 때문에 시스템에 병목현상이 발생할 수 있다.

  • RAID-5
    패리티 정보를 이용하여 하나의 디스크가 고장이 발생할 경우에도 사용이 가능한 구성방식이다.
    패리티정보는 구성된 디스크에 분산하여 기록하지만, 데이터를 중복해서 저장하지는 않아 가장 보편적으로 사용된다.
    디스크의 구성이 3개일때 33.3%, 4개로 구성하면 25%, 5개로 구성하면 20%가 패리티 공간으로 사용된다.
    RAID-5는 최소 디스크 3개로 구성해야하고, 디스크 오류를 최대 1개 허용한다.

  • RAID-6
    전체적인 구성은 RAID-5와 비슷하지만, 디스크에 2차 패리티 구성을 포함함으로써 매우 높은 고장 대비 능력을 발휘한다.
    2개의 패리티를 사용하여 2개의 디스크 오류에도 데이터를 읽을 수 있지만, 디스크의 공간 효율성은 떨어진다.
    또한, 복잡한 알고리즘으로 인하여 처리속도는 떨어지나 데이터에 대한 신뢰도는 향상된다.
    디스크의 구성이 4개일 때 50%, 5개로 구성하면 40%, 6개로 구성하면 33.3%가 패리티 공간으로 사용된다.
    RAID-6는 최소 디스크 4개로 구성해야하고, 디스크 오류를 최대 1개 허용한다.

  • RAID 0+1
    디스크 2개를 RAID-0의 스트라이핑 기술로 구성하고, 다시 RAID-1의 미러링으로 구성하는 방식으로 최소 4개의 디스크가 필요하다.
  • RAID 1+0
    RAID 0+1의 반대의 개념으로 디스크 2개를 먼저 밀러링으로 구성하고 다시 스트라이핑 하는 방식이다.

RAID 구성하기

실습 환경은 rocky linux 8 에서 진행한다.

용량이 다른 하드디스크로 레이드 구성 시 높은 용량은 하위 호환되어 작동한다.
램의 경우에도 서로다른 용량의 램을 사용시 동작속도에 차이가 있어 발열이 생긴다.

raid 생성 명령어

mdadm --create [생성할 장치명] --level=[raid종류] --raid-devices=[raid 개수] [디스크1] [디스크 2] ...

RAID - 0
장치명 /dev/md0 -> /rdata0에 마운트

SCSI 10G 두개를 활용하여 레이드를 구성한다.
/dev/sdd1, /dev/sde1

mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1

이후 mount 로 자동등록

mkdir /rdata0
mkfs.xfs /dev/md0 //포맷 후에
mount -t xfs /dev/md0 /rdata0 //mount형식 지정 후 마운트

혹은 시스템 재부팅 시에도 계속 사용하기 위해 /etc/fstab에 등록

vi /etc/fstab 
/dev/md0        /rdata0 xfs     defaults        0       0

df -hT 명령어로 마운트 정보를 확인할 수 있다.

Linear Raid

장치명 /dev/md9 -> /rdata9
linear Raid는 결함 허용 불가능, 속도는 빠름
→ 여러개의 다른 용량의 디스크를 하나로 사용하고 싶을 때 사용하면 좋다.

/dev/sdb1(30G), /dev/sdc1(10G) → 연달아서 사용한다.

mdadm -C /dev/md9 -l linear -n 2 /dev/sdb1 /dev/sdc1

마운트하기

mkdir /rdata9
mkfs.xfs /dev/md9
mount -t xfs /dev/md9 /rdata9

자동 마운트 등록

vi /etc/fstab
/dev/md9        /rdata9 xfs     defaults        0       0

RAID-1
장치명 /dev/md1 -> /rdata1

RAID1은 결함 허용 가능하다.

sdf1(10G), sdg1(10G)로 구성하고 완성시 용량 10G이다. (50% 손실)

mdadm -C /dev/md1 -l 1 -n 2 /dev/sdf1 /dev/sdg1
mkdir /rdata1
mkfs.xfs /dev/md1
mount -t xfs /dev/md1 /rdata1

vi /etc/fstab
/dev/md1        /rdata1 xfs     defaults        0       0

생성을 하게 되면 다음과 같은 경고 문구가 떠오른다.

raid1의 경우 boot 디스크로 적합하지 않다는 내용이다.

mdadm --detail /dev/md1 으로 레이드의 상세 정보를 볼 수 있다.

raid array 확인시 state 부분이 clean 해야한다.

RAID-5
장치명 /dev/md5 -> /rdata5
RAID5는 결함 허용가능하다.
sdh1(10G), sdi1(10G), sdj1(10G) 세개의 디스크로 구성했을때 완성시 용량은 20G이다.

mdadm -C /dev/md5 -l 5 -n 3 /dev/sdh1 /dev/sdi1 /dev/sdj1
mkdir /rdata5
mkfs.xfs /dev/md5
mount -t xfs /dev/md5 /rdata5

vi /etc/fstab
/dev/md5        /rdata5 xfs     defaults        0       0

결함 허용 테스트

마운트한 모든 파티션에 파일을 하나씩 만들어놓고 디스크 결함 허용이 가능한지 테스트한다.

raid0 -> sdb 1, sdc 2(X)
linear -> sdd 3, sde 4(X)
raid1 -> sdf 5, sdg 6(X)
raid5 -> sdh 8, sdi 9, sdj 10(X)

현재 디스크의 상태는 위와 같다.

이후 다시 리눅스를 실행시키게 되면 raid에서 감지해야할 장비가 감지되지 않아 부팅이 느리다.
복구모드로 진입해서 디렉터리를 확인하면 복구되지 않는 파티션을 확인할 수 있다.

mdadm --detail --scan

각 디스크의 상태를 확인해보자

  • Raid-0
    mdadm --detail /dev/md0

    -> 결함 허용이 안되는 Raid0은 현재 inactive 상태인 것을 확인할 수 있다.

  • Raid-1

    Raid-1은 데이터 복구를 위한 디스크 하나가 남아있기 때문에 문제 없이 작동된다.

  • Raid-5

    Raid-5은 패리티 정보를 이용하여 하나의 디스크가 고장이 발생할 경우에도 사용이 가능한 것을 확인할 수 있다.

  • Linear-Raid

    -> linear raid 또한 inactive 상태인 것을 확인할 수 있다.

전체 디스크를 다시 확인해보자

→ 장치명은 디바이스마다 순차적으로 부여되기 때문에 처음 부여한 장치명과 다른 것을 확인할 수 있다.

결함 허용이 안되는 Raid인 0과 9는 데이터를 잃어버리게 된다.

Raid 복구하기

mdadm --stop /dev/md0
mdadm --stop /dev/md9

→ 결함허용이 안되는 raid를 멈춘다.

자동 마운트 해제

이후 재부팅을 하면 Raid 1, 5는 작동하기 때문에 리눅스가 켜진다.

하드 복구를 위해 10G 디스크 4개를 추가하고, 파티션을 다시 나눈다.
Raid 0, 9를 재 구축하게 되면 메타데이터가 덮어씌워진다.(데이터 복구는 못함, 디스크를 포맷하고 재구축한다.)

profile
꾸준하게

0개의 댓글