OS/Linux

2011.12.01 리눅스RAID, 관련명령어

에몽이ㅋ 2012. 1. 9. 21:55

RAID 가 무엇이냐? 


여러개의 하드를 사용하는 기술이다.


여러개의 하드를 어떻게 사용하느냐에 따라서 RAID0, RAID1, RAID5등으로 나뉜다.


RAID에는 여러가지 종류가 있는데


1.    RAID0 : stripe 같은 것이다.

  저장하려는 데이터가  40MB가 있다고 가정하자. 이 40MB를 만약에 하드가 4개로 구성된 RAID0에 저장한다면, 각각의 하드에 10MB씩 저장될 것이다. 이렇게 분산해서 동시에 저장하고 액서스하기때문에 속도는 굉장히 빠르다. but 여러개 중에 하나만 고장나도 데이터는 다 날라간다(안정성 zero)

40MB(RAID 0)

↙            ↓                 ↓            ↘

       

 10MB

10MB 

10MB 

10MB 

 

 

 

 





2. RAID1 : mirroring한다고 한다. 

저장할 때 똑같이 복제본을 떠놓는 것이다. 돈이 2배로 들지만 안정성은 거의 절대적이다.

           40MB(RAID 1)

↙               ↘     

       

 40MB

40MB 

 

 





3. RAID5 : 여러 하드를 구성할때 여러 하드중에 하나는 자료저장하는 공간으로 쓰지않고 복구용으로 쓴다.

장점: 저장효율은 RAID 1에 비해 좋고 복구도 가능하다.

단점 : 저장디스크 2개가 뻑났을떄는 복구 불가능<--- 생각보다 서버에서는 자주있는일

(참고 : RAID 6은 복구용디스크가 2개, 7은 3개,------ RAID 10은 1+0)

30MB(RAID 5)

↙            ↓                 ↓        

       

 10MB

10MB 

10MB 

복구용 

(parity이용)

복구용 얘는 항상 돌아가고 있기 떄문에 뜨겁다 해서 
Hot Spare라고 한다.

 

 

 



이러한 여러가지 방식이 있지만 보통 DB서버는 안정성을 중요시 하기떄문에 0+1이나 1+0(0과 1을 같이 쓰는)을 쓴다.


--------------------------------------------------------------------------------------------


개념을 정리했으니 이제는 리눅스에서 구현해야할 것이 아닌가? 한번 해보자

일단 하드디스크의 파티션은 'Linux raid autodetect' 형식으로 한다. 무슨 말인가 하면

아래 글에서 보자.

[root@localhost ~]# fdisk /dev/sdb

   잡설명

Command (m for help): n   <--new partition

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-102, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):

Using default value 102


Command (m for help): t                  <---- 요렇게 입력을 해서

Selected partition 1

Hex code (type L to list codes): fd       <---- fd형식(Linux raid autodetect)

Changed system type of partition 1 to fd (Linux raid autodetect)


Command (m for help): p    <---- 생성확인

Disk /dev/sdb: 106 MB, 106954752 bytes

64 heads, 32 sectors/track, 102 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         102      104432   fd  Linux raid autodetect       바르게 생성됨을 확인


Command (m for help): w             <---- 저장


실제 RAID구성 명령어 mdadm(마담같이 보이지만 아니다 adm(admin)이다. mdadm)

Usage: mdadm --create device(예 : /dev/md0) options...

               options :   --level=?(RAID 몇할꺼인지, RAID 5를 구성하고 싶다면 --level=5)

                              --raid-devices=?  /dev/파티션이름들   <--- 파티션 개수, 이름들

4개면 --raid-devices=4      /dev/sdb1   /dev/sdc1   /dev/sdd1   /dev/sde1) 

<-- 뒤에 파티션은 자기가 구성하고 싶은거를 하세요

                      --detail  --scan    : 현재 md들의 정보를 보여줌

                      --query  --detail   /dev/md0  :  /dev/md0장치의 상세한 내역을 출력


실제 출력화면

[root@localhost ~]# mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1        (/dev/sdb1 ~ /dev/sde1, 4개의 파티션을 RAID5로 /dev/md0에 구성)

mdadm: array /dev/md0 started.

[root@localhost ~]# mdadm --detail --scan

ARRAY /dev/md0 level=raid5 num-devices=4 UUID=eb60801a:f134462a:b3de73f9:0c499496

   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1


이러면 끝이!!!!! 하고 노는 사람은 결국 눈물과 함께 수많은 밤을 지새게 되겠죠?


항상 마지막엔 포멧과 마운트을 해줘야합니다.

[root@localhost ~]# mkfs.ext3 /dev/md0

mke2fs 1.35 (28-Feb-2004)

  블라블라

Writing inode tables: done

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 29 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost ~]# mkdir /raid5data

[root@localhost ~]# mount /dev/md0    /raid5data/


또한 부팅시마다 raid인식하게 하고 싶다면 /etc/fstab 수정해야겠죠?

/dev/md0                /raid5data              ext3    defaults        1 2


-------------- 드디어 디스크4개로 구성된 RAID 5가 구성되었습니다. --------------------------