리눅스 - RAID (Redundant Array of Inexpensive Disks)

OS/Linux 2016. 2. 15. 07:30

<RAID?>

여러 개의 하드디스크를 하나의 디스크처럼 사용하도록 하는 것인데, 비용을 절감하면서 더욱 신뢰성을 높이며 성능까지 향상시키기 위한 저장 장치를 의미한다.

 



<RAID 레벨>

RAIDRAID 0, RAID 1, RAID 5, RAID 6, RAID10까지 5개로 분류되고 각각 레벨마다 특징적인 저장방법을 의미한다.

 

1. RAID 0

모든 디스크를 동시에 사용하는 방법으로 하드A와 하드BRAID 0으로 만들었다고 가정해보자. 그럼 이 RAID 0은 저장할 때 하드 A와 하드 B에 동시에 골고루 저장한다. (마치 하나의 하드디스크 처럼 사용한다는 맥락 속에서 말이다.)

"안녕하세요? IT깝구"에요 라고 문장을 저장한다면... A에는 "안녕하세요? IT"까지 저장하고, B에는 "깝구에요"를 저장한다. 쉽게 예를 들기위해 이렇게 설명한것으로 실제로 이렇게 딱딱 떨어지게 저장되지는 않지만, 취지는 골고루 저장된다는 것!

RAID 0LVM의 차이점은 무엇일까? 이 두가지를 볼 경우 별 차이가 없지만, 저장하는 방식에 차이가 있다.

LVM으로 구성한 시스템에 저장하게 되면, 똑같이 예를 들기 위해 하드A와 하드BLVM을 만들었다고 가정해보자.

"안녕하세요? IT깝구"라고 저장한다면 하드 A에 모두 다 "안녕하세요? IT깝구"를 저장하고, 하드A가 모두 차면 B로 넘어간다.

RAID 0과 같이 모든 하드디스크에 동시에 골고루 저장하는 방법을 스트라이핑

(Stripping) 방식이라고 부른다. 그러므로 하드A가 맛이 간다면 RAID 0으로 구성한 전체 데이터 복구가 힘들것이다. RAID0 빠른 성능을 요구하면서, 전부 잃어버려도 큰 문제가 되지 않는 자료를 저장하는데 적절한 방식이다.

 

2. RAID 1

이 방식은 미러링(Mirroring)방식으로 불리우는데, 똑같은 데이터를 한 번 더 저장하도록 하는 방법이다하드A와 하드 B를 묶어서 RAID 1방식으로 구성했다고 가정하자. 그렇다면 하드A "안녕하세요? IT깝구"를 저장한다면, 하드 B에는 똑같은 데이터인 "안녕하세요? IT깝구"를 한 번더 저장하는 셈이다. 장점은 두 개의 디스크 중 하나가 고장나더라도 데이터는 손상되지 않는 장점이 있지만, 데이터를 저장하는 효율이 1/2로 줄어든다. 한마디로 공간효율이 떨어지지만 안전하다는 의미이다.

 

3. RAID 5

RAID1처럼 데이터의 안전성도 어느 정도 고려하고, RAID0처럼 공간 효율성도 고려한 방법이다. RAID5를 구성할 때는 최소 3개 이상의 하드디스크가 있어야만 구성이 가능하며, 하드디스크에 오류가 발생할 경우 패리티를 이용하여 복구한다.

하드디스크 4개를 이용하여 RAID5를 구성했다고 가정하자. 여기에 000 111 010 011(12bit)의 데이터를 저장하였다.



맨 처음 행의 줄을 보자. 0+0+0+parity = 짝수여야한다. 그렇기 때문에 parity0이 된다.

두번째 줄을 보자. 1+1+1+parity = 짝수여야한다. 그렇기 때문에 패리티는 1이 된다.

세번째 줄을 보자. 0+1+0+parity = 짝수여야한다. 그렇기 때문에 패리티는 0이 된다.

마지막 줄을 보자. 0+0+1+parity = 짝수여야한다. 그렇기 때문에 패리티는 1이 된다.

각각 네모칸이 패리티 비트 값을 나타낸다. 각 하드디스크 장치에 골고루 패리티 비트값을 넣어놓은 것이다.

예를 들어 sdb의 하드가 손상되어 사용할 수 없다고 가정해보자.



 

아까 우리가 보았던 패리티비트값을 이용해 찾아낼 수있다.

처음 0+알수없음+0+0 = 짝수여야한다. 알수없음은 당연히 0이된다.

1+알수없음+1+1 = 짝수여야한다. 알수없음은 1이된다.

이렇게 하나씩 하나씩 모두 복구가 가능하게 된다.

대신 두개이상의 하드디스크가 손상되면 찾을수 없지만 어느정도의 결함은 해결해 줄 수 있는 방법이 RAID 5이다.

 

4. RAID 6

RAID 5방식을 이용하면 디스크 1개가 고장나도 데이터에는 이상이 없는 것을 확인했다. 극단적인 예로 20개의 디스크로 RAID 5를 구성했다고 가정할 때 하드디스크가 2개 손상된다면 아쉽게도 모두 복구를 못하고 말 것이다.

RAID 6RAID 5의 방식을 개선시킨 방법이다.

공간효율은 RAID 5보다는 약간 떨어지지만 신뢰도는 좀 더 높인 방법이 RAID 6 방법이다.

 

5. RAID 10

RAID1에서 한 미러링 방법을 이용해 데이터를 다시 내부적으로 RAID 0방식의 스트라이핑하는 방법이다. 신뢰성과 성능이 동시에 뛰어난 방법이다.

 

<실습>

RAID0, 1, 5를 실습해보자.

실습에 앞서 하드디스크 준비가 필요하다.

8개의 하드디스크를 만들어야 하며, RAID 0(/dev/sdb, /dev/sdc)로 실습하고, RAID 1(/dev/sdd, /dev/sde), RAID 5(/dev/sdf, /dev/sdg, /dev/sdh)를 실습할 것이다.



다음과 같이 8개의 하드디스크를 만들도록 하자.

/dev/sdb, /dev/sdc... ~ /dev/sdi까지 모두 fdisk를 사용하여 파티션을 만들고 파일시스템 유형은 fd로하자. fdLinux raid autodetect유형으로 raid를 사용하고자 할 때 사용하는 파일시스템 유형이다.




간단하게 맨앞의 /dev/sdb와 맨끝의 /dev/sdi만 출력했다. 모두 다 만들면 준비가 끝난것이다.

 

다음과 같이 이렇게 뜨면 정상이다.




 

<실습 1 - RAID 0구축>



/dev/md0가 있는지 없는지 확인하고 없으면 만들어준다.

여기서 잠깐! md0는 왜만들어줄까? 우리는 지금 /dev/sdb1/dev/sdc1을 합쳐서 하나로 만들어야 한다. 그렇다면 그 하나로 합친 장치의 이름은 뭐로할것이냐... 바로 합친 장치를 만들어주고 정의하기 위해 md0를 만든것이다!

mknodbBlock device를 의미, 9md장치의 주 번호가, 00번째 장치라는 의미이다.

 

이제, mdadm 명령을 이용해 실제 RAID를 구성해보자.



mdadm 명령어의 옵션들을 해석해보자.

--create /dev/md0 : 우리가 만든 md0장치에 RAID를 생성하겠다는 의미이다.

--level=0 : RAID 0으로 하겠다.

--raid-devices=2 /dev/sdb1 /dev/sdc1 : 2개 하드디스크를 사용하며, 그 두개의 장치 이름은 /dev/sdb1/dev/sdc1이다.

그 후, scan옵션으로 잘 생성되었는지 확인하였다.

 

이번에는 파티션 장치를 포맷해보자.

mkfs 명령어로 포맷하였다. -> 파일시스템을 생성함 뭐로? ext4



 

 

마지막으로 마운트해보자!



마운트 후에 df명령어로 잘 생성되었는지 확인하였다.

이렇게 RAID 0의 구성이 끝이났다!

 

<실습2 - RAID 1 구축>

md0를 만든것 처럼 RAID 1을 구축할 때도 md1을 만들것이다.



 

 

자 이번에는 포맷을 해보자.



 

 

마지막! 마운트하면 끝이다.



 

 

<실습2 - RAID 5 구축>

이것은 직접 하지 않고, 말로 설명하겠다. mdadm에서 level5로 바꿔주고, 장치를 4개정도 생성해서 실습하면 된다. --raid-devices=4 뒤에 장치 이름 4개를 모두 써주고, 포맷후, 마운트를 해주면 끝이다.



posted by 경원구