'하드디스크'에 해당되는 글 1건

  1. 2011.11.10 [펌] 컴터, 기본적인건 알고 쓰자! 하드디스크편 - 4

4편입니다.

아마 HDD로는 마지막편이 될꺼같습니다.

아무래도 제가 스토리지 전공이라, 이쪽은 좀 길게썼는데,

다른편들은 좀 더 짧고 간결하게 쓸 예정입니다.

읽으시는 분들 계시다면 피드백 남겨주시면 감사하겠습니다.






RAID를 구성해보자!


1편에서 HDD의 작동원리와 HDD 스펙에 나오는 숫자에 대해 알아봤고,
2편에서는 PATA / SATA 등의 커넥션 타입에 대해 알아봤습니다.
3편에서 단일 HDD의 성능과 최적화에 대해 알아봤으니, 마지막 4편에서는 RAID에 대해 알아보겠습니다.



Redundant Array of Independent Disk

RAID 혹은 레이드..

SSD가 없던 시절 HDD의 성능을 올리는 유일한 방법이었고,
그보다 중요하게는 Fault Tolerance (번역해보니 내결함성...이라고 나오네요 -_-) 를 위해 필수인 기술입니다.

하드디스크 한개에 들어있는 자료는, 그 하드가 망가지는 순간 증발해 버립니다.
백업에서 다시 불러온다고 해도, 백업 이후 지금까지 변한 데이터는 찾을 수 없고,
또 복구할때까지 그 자료를 사용하지 못한다는 점에서도 기업들에겐 뼈아팠습니다.

그래서 만들어진 기술이 RAID입니다.

RAID 기술은 0 부터 6 까지 7가지가 있습니다.
이 7가지가 또 섞여서 하이브리드 (네스티드) RAID기술이 만들어 졌고요


세부적으로 들어가기 전에,
일단 몇가지 용어를 설명하고 넘어가겠습니다.



1. 미러링 - mirroring 

미러..거울이라는 말 뜻대로, 똑같은 자료를 하나 더 만들어내는걸 말합니다.
RAID-1의 기본으로써, 디스크 두개를 이용해 같은 자료를 항상 두개 가지고 있는거죠.



2. Spanning - Concatenating 

디스크 두개를 연결하는 기술입니다.
1번 디스크가 꽉 차면 2번 디스크에 연결해서 사용합니다.



3. Spanning - Striping 

RAID를 처음 배울때는 조금 이해하기 힘든기술입니다.
아시다시피, 컴터의 모든 자료는 2진수로 저장됩니다.
11이라는 숫자를 저장하면,
1011 즉 8+0+2+1로 저장이 되는거죠. 각각 한자리를 비트(bit)라고 부릅니다. 
비트 8개가 모인 (0~255까지 표현가능한) 단위가 바이트 (byte)가 되는거고요.
한국 광랜의 예를 들자면, 100메가빗 커넥션이므로, 이론상으로 초당 12.5메가 바이트를 전송할 수 있죠 (실제론 이만큼 안나옵니다)

만약 디스크 한개가 10개의 비트를 저장할 수 있고, 1010101011101010 이라는 2진수를 저장할때,
2번 기술인 concat을 쓰면, 디스크 a에 1010101011이 저장되고, 나머지 101010이 디스크 b에 저장됩니다. 남은 용량은 디스크 b에 4비트만큼 남았겠군요.

하지만 여기서 스트라이핑을 하면, 조금 얘기가 달라집니다.

비트레벨 스트라이핑으로 예를 들어 설명하자면,
a b
1 0
1 0
1 0
1 0
1 1
1 0
1 0
1 0
이렇게 첫번째 디스크엔 11111111이 들어가고,
두번째 디스크에는 00001000이 들어갑니다.
남은 용량은 두개의 디스크 모두 2비트씩이 남습니다.

즉 한개의 비트씩 번갈아가며 두개의 디스크에 넣는거죠.

스트라이핑이 콘캣보다 좋은 이유는,
데이터를 읽거나 쓸때, 스트라이핑의 경우 항상 2개의 디스크를 사용한다는겁니다.
속도가 2배죠.

콘캣이 스트라이핑보다 좋은 점은,
없다고 봐도 무방합니다 -_-
스트라이핑이 불가능할때만 콘캣을 쓰는거죠.

꼭 콘캣이 좋은점을 찝어내자면,
1. software raid의 경우 CPU에 부하가 안걸린다.
2. 디스크를 추가로 연결할때, 리빌드를 할 필요가 없다 정도 되겠네요.
여기서 리빌드는 2개 -> 3개로 디스크 숫자를 늘릴때, 스트라이핑의 경우 저 데이터를 모두 읽어서 다시 3개의 디스크에 균등하게 배분해야 한다는 말입니다.


4. Parity
데이터를 보호하기 위해 쓰이는 기술입니다.
XOR 기법을 사용해서, (비트레벨 패리티 기준) 한개의 비트를 더 만들어냅니다.
1 xor 1 = 0
0 xor 1 = 1
1 xor 0 = 1
0 xor 0 = 0 
좀 뒤에 다시 설명하겠습니다.



자 그럼 본격적으로 RAID에 대해 알아보겠습니다.
(하드웨어)레이드 구성을 한 디스크들은, OS상에서는 한개의 디스크로 표현됩니다.



RAID0
위에 설명한 스트라이핑입니다.
2+ 개의 디스크를 연결해서 스트라이핑 합니다.
속도는 모든 RAID중에서 가장 빠릅니다.
단점은?
연결해놓은 디스크중 하나만 죽으면 나머지 디스크의 자료도 다 날라갑니다.



a1~a8까지의 블록이 있을때,
번갈아가며 양쪽 디스크에 한번씩 써주는거죠

IOPs기준 성능은 

읽기 : 디스크 한개의 성능 * RAID 0에 쓰인 디스크 숫자
쓰기 : 디스크 한개의 성능 * RAID 0에 쓰인 디스크 숫자
Fault Tolerance : 한개로도 죽으면 집단 사망.
총 용량 : 디스크 한개의 용량 * RAID0에 쓰인 디스크 숫자

RAID 1
역시 위에 설명한 미러링입니다
2개의 디스크를 연결해서, 똑같은 데이터를 양쪽 디스크에 동시에 씁니다.



읽기 성능 : 디스크 한개의 성능 * 2
쓰기 성능 : 디스크 한개와 동일함.
Fault Tolerance (기네요.. 앞으로는 FT라고 쓰겠습니다-_-) : 한개죽어도 나머지 하나가 룰루랄라 살아남습니다.
총 용량 : 디스크 한개와 동일함



RAID 2 
비트레벨 스트라이핑 + 패리티
여기서 부터 좀 복잡해집니다.
이해가 안가시는 분들은 그냥 넘어가도 무방합니다. 

레이드 그룹안의 모든 디스크의 스핀들은, 정확히 같은 속도로 돌아갑니다.
비트 단위로 스트라이핑 되며 디스크들에 써지고, 해밍코드로 패리티가 계산되어, 한개 이상의 디스크에 저장됩니다.




현재는 사장 된 기술이며,
성능/FT 둘다 패리티 디스크가 몇개냐에 따라 다릅니다.




RAID 3
RAID2와 동일하지만, 비트레벨이 아니고 바이트레벨을 사용하며, 패리티는 xor 계산입니다.
역시 대충 사장된 기술이니 넘어가겠습니다.





RAID 4
RAID3 와 동일하지만, 바이트레벨이 아니고 블록레벨을 사용하며, 패리티는 xor 계산입니다.
역시 모든 패리티는 지정된 디스크에 저장됩니다.
역시 대충 사장된 기술이니 넘어가겠습니다.





RAID 5

RAID 1/0 (곧 다시 다룹니다) 와 더불어 현재 가장 많이 쓰이는 구성입니다.
조금 길게 설명하겠습니다.
RAID 4와 동일하게, 블록레벨 스트라이핑이지만, 분산된 패리티를 씁니다.
비트레벨 (1bit), 바이트레벨 (1 byte / 8 bit)과는 달리,
사용자 지정의 블록레벨을 만듭니다. 4kbyte~128kbyte로 어떤 용도냐에 따라 크기는 다릅니다.

abcdefghi라는 데이터가 있을때 (각각의 알파벳은 한개의 블록을 나타냅니다.),
4개의 RAID 5 디스크(1,2,3,4) 에 저장을 한다면,
1 2 3 4 
a b c p1
d e p2f
g p3 h i 

이렇게 저장이 됩니다.
첫블록은 첫번째 디스크에, 두번째 블록은 두번째 디스크에, 세번째 블록은 세번째 디스크에 들어가고,
네번째 디스크는 첫 3번째 블록 abc 을 이용해 계산한 패리티가 들어갑니다.
네번째 블록은 다시 첫번째 디스크에, 다섯번째 블록은 두번째 디스크에, 여섯번째 블록은 "네번째" 디스크에 들어가고, 세번째 디스크에는 def 를 이용해 계산한 패리티가 들어가는거죠.

패리티를 분산해서 얻는 이득은, 많은 데이터가 한꺼번에 쓰여질때, 패리티 계산에 가해지는 부하를 보든 디스크에 균등하게 나눠준다는거죠.



읽기성능 : 디스크 한개의 성능 * (총디스크 갯수 - 1)  한개를 빼주는 이유는 패리티는 읽지 않고 건너뛰기 때문입니다.
쓰기성능 : 디스크 한개의 성능 * (총디스크 갯수 - 1) / 4
4로 나눠주는 이유는, 한개의 데이터를 쓸때마다 다시 패리티를 계산해서 패리티 값을 바꿔줘야 하기때문이죠. 
즉, 5개보다 적은 숫자의 디스크로 RAID5구성을 할경우, 특정상황에서는 오히려 한개보다 느립니다.
(100% random write기준이니, 실제 이런일은 거의 없다고 봐도 무방하죠)
FT: 디스크 한개까지는 죽어도 나머지 디스크들이 잘 살아서 돌아갑니다.
총 용량 : 디스크 한개의 용량 * (총 디스크 갯수 - 1)



RAID 6
5와 같습니다만, 패리티가 2개로 늘었습니다.


읽기성능 : 디스크 한개의 성능 * (총디스크 갯수 - 2)  두개를 빼주는 이유는 패리티는 읽지 않고 건너뛰기 때문입니다.
쓰기성능 : 디스크 한개의 성능 * (총디스크 갯수 - 2) / 6
6으로 나눠주는 이유는, 한개의 데이터를 쓸때마다 다시 패리티를 두번 계산해서 패리티 값을 바꿔줘야 하기때문이죠. 

FT: 디스크 두개까지는 죽어도 나머지 디스크들이 잘 살아서 돌아갑니다.
총 용량 : 디스크 한개의 용량 * (총 디스크 갯수 - 2)





Hybrid RAID (잡종-_-)

위에 쓰여진 RAID구성이 섞인 그룹입니다.
RAID 0/1 , 1/0
1/0가 0/1보다 확실히 좋지만, 대충 비슷한 구성이니 묶었습니다.
디스크를 미러링 한 후에 스트라이핑을 합니다.

즉 성능을 최대한 끌어내면서 안전성 역시 추구한 구성입니다.

읽기성능 : 디스크 한개의 성능 * 총 디스크 갯수
쓰기성능 : 디스크 한개의 성능 * 총 디스크 갯수 / 2.  2로 나눠주는 이유는. 미러링땜시 뭔가 쓸때마다 두군데에 동시에 쓰기 때문이죠.
총용량 : (디스크 한개의 용량 * 총 디스크 갯수) / 2
이게 가장 큰 문제입니다.
전체 용량의 딱 절반뿐이 사용하지 못합니다.
FT : 운이 매우매우매우매우 좋다면, 전체 디스크중 절반이 날라가도 살아있습니다.
재수 더럽게 없다면 딱 2개만 날라가도 다 날라가고요.
1/0가 0/1보다 자료 날릴 확률이 적습니다.



그 외에 RAID5/0, 5/1 등등이 있지만, 
일반유져가 쓸일 없으니 넘어갑니다.







RAID에는 Hardware Raid와 Software Raid가 있습니다.
하드웨어는 말 그대로 레이드를 구성하고 어느 블록이 어디로 갈건지 등등을 레이드 컨트롤러란 카드가 담당하고, 소프트웨어는 OS가 담당합니다.
하드웨어가 성능으로 보면 우월합니다만, 비쌉니다 -_-
괜찮은거 살려면 수십만원 우습습니다.

윈도우에서 구성가능한 소프트웨어 레이드는 다음과 같습니다
XP : RAID 0 (프로페셔널만)
7 : RAID 0(모든 버젼), RAID 1 (프로페셔널/울티메이트)

내컴터 우클릭 -> 관리 -> 디스크 관리...에서 다이나믹 디스크를 만들어주면 됩니다.







일단 여기까지가 HDD글 전부입니다.

더 깊게 설명하자면 한도 끝도 없지만,

이정도면 HDD가 무엇인지, RAID가 무엇인지는 대충 다 설명했다고 보입니다.


읽으신 분들 어땠는지 피드백 남겨주시면 감사하겠고요,

혹시 더 깊게 아시고 싶으신 분들은 댓글이나 쪽지 주시면 좀 깊게 더 써보겠습니다.

다음글에선 CPU를 다뤄보겠습니다.



Posted by 뉴로
,