본문 바로가기

일상 생활/잡담

[정보글] RAID 의 기본

 Q : 이거 리브레위키에 있는 문서를 수정해서 가져온거 아닌가요?

 A : 리브레위키의 문서에서 '제 기여분'만 땡겨와서 베이스로 삼았습니다.


[개요]

 RAID는 'Redundant Arrays of Independent Disks'(복수 배열 독립 디스크)의 약자입니다.


 이걸 소문자로 적는 경우가 있는데, 각 단어의 앞글자를 따서 만든 약어니 대문자로 적는게 맞아요. 기업용 스토리지 업계에 있을때 이거 소문자로 적는거 보면 은근히 찝찝했는데, 그도 그럴게 비업계인도 아니고 맨날 스토리지 보고사는 사람이 용어 표기를 임의로 하면 씁니까...


 기본적으로는 가용성(디스크 일부가 손상되어도 계속 동작 가능)이나 성능(읽기/쓰기 속도)를 향상시키기 위해 여러개의 하드디스크나 SSD를 하나의 그룹으로 묶는 기술입니다. 물론 '저장매체'만 묶으면 되기 때문에 뭐 굳이 하자면 USB 메모리를 왕창 가져다가 RAID를 묶는다거나 하는 '이상한' 짓도 하려면 못할 건 없습니다.



[간략한 역사]

 987년 캘리포니아 대학교 버클리 캠퍼스의 데이비드 패터슨(David Patterson)과 가스 A. 깁슨(Garth A. Gibson) 그리고 랜디 카츠(Randy Katz)가 1877년 6월에 "A Case for Redundant Arrays of Inexpensive Disks(RAID)"라는 논문을 ACM SIGMOD(Assosication for Computing Machinery's Special Interest Group on Management of Data) 컨퍼런스에서 발표했습니다.


 이 논문은 메인프레임, 그러니까 쉽게 말해서 '겁나리 비싼 기업용 서버'에서 사용되는 고성능 디스크의 성능을 일반적으로 흔히 사용되는 PC의 디스크 여러개를 묶어서 넘어서는 방법을 다루고 있어요. 그러니까 이 논문에서 현재의 RAID 개념이 탄생한거죠.


 그런데 여기서 뭔가 이상한걸 느끼신 분들이 계실거에요. 네, '개요'항에서 언급한 것과 명칭이 다르죠. 방금 전 개요 항에서는 'Redundant Arrays of Independent Disks'라고 언급했는데, 저 논문에서는 'Redundant Arrays of Inexpensive Disk' 그러니까 '복수 배열 저가 디스크'라고 언급합니다.


 이렇게 된 이유는 RAID의 탄생 사유가 '디스크 재활용'에 있기 때문입니다.



 지금도 그렇지만 기업체가 새로운 서버나 스토리지를 도입하면 기존 장비는 구형이 됩니다. 그런데 여기 달린 부품들은 아직도 쌩쌩한 경우가 많다는거죠. 예를 들어서 IBM의 중급 스토리지인 Storwize V7000의 경우 현재는 단종된 2세대 기준[각주:1]으로 2U공간에 3.5인치는 12개, 2.5인치는 24개의 디스크가 들어갑니다.


 이거 단종이 컨트롤러[각주:2] 기준으로 2017년 6월이였고, 익스펜션[각주:3]은 2020년 4월 11일에 단종됐습니다. 2018년인가에 3세대 제품이 나왔고, 지금은 NVMe 스토리지에 맞춰서 다시한번 라인업을 재편한 듯 하더라고요. 그러면 이 글을 현 시점인 2020년 7월에는 이 장비를 싹 밀어내고 다들 후속 제품으로 갈아 탔을까요?


 아뇨 기존 제품을 계속 운용하거나, 기존제품과 신제품을 같이 쓰는 곳이 많을거라는건 쉬이 예상할 수 있습니다. 가끔은 막 고대유물 같은 것도 '이거 혹시 부품/디스크 증설 되나요?'이러는 문의가 들어오는 업계인데요 뭘.


 이런 상황은 이 업계 초기부터 있었던겁니다. 신장비를 들였는데, 낡은 장비의 부품들이 아직 쌩쌩해서 아까운거죠. 한두푼 하는 것도 아니고. 그래서 기존 장비에 달린 구형 디스크 -그 시절에는 전부 하드디스크-를 어떻게든 재사용해보고자 한 몸부림이 RAID였던겁니다. 그래서 약어에 'Inexpensive Disks' 그러니까 (좋게 말해서)'저렴한' 디스크가 언급된거고요. 말이 저렴한거지 구형 장비의 디스크를 의미하는거죠.


 그런데 구형 장비에 달린 디스크는 아무래도 신형 장비에 달린 것보다 용량이나 동작속도 등도 느리겠다. 이걸 해소할 방법을 찾아낸게 RAID입니다. 앞서 언급한 RAID 구축으로 얻으려는 이득 중에서 '성능(읽기/쓰기 속도)'를 얻으려는 시도였죠.



 다만 위의 논문이 발표되기 전에도 RAID라는 명칭이 아닐뿐 이후 '표준 RAID 레벨'이라 불리는 분류에 속하게 되는 RAID 기법이 언급되거나 사용된 사례들이 있습니다. 영문 위키피디아의 RAID 페이지에 언급된 내용 기준으로는 아래와 같아요.

  • 1977년, IBM의 노만 켄 오우치(Norman Ken Ouchi)가 추후 RAID 4로 알려지는 구현법의 특허를 출원합니다.
  • 1983년경, DEC에서는 HSC50 서브시스템의 한 부분으로 미러링된 RA8X 디스크 드라이브를 출고했는데, 미러링은 RAID 1의 구현법이죠.
  • 1986년, IBM의 클라크 엣 알(Clark et al)이 이후 RAID 5로 알려지는 구현법의 특허를 출원한다.
  • 1988년경, 씽킹 머신스 코퍼레이션의 데이타볼트 제품에서 오류 정정부호(error correction code)를 하나의 어레이로 묶인 디스크에서 사용했다. 영문 위키피디아에서는 특정 RAID 레벨은 언급 안했는데, 어레이에 ECC 거는건 RAID 2에서 쓰는 방식입니다.

 이게 학계의 아이디어에서 업계의 표준으로 발전했고, 단순히 구형 장비의 디스크를 재활용 하는걸 넘어 신형 장비에서 안정성과 속도를 얻어내기 위한 용도로 쓰이게 됐습니다. 그러다보니 자연스럽게 이름이 'Redundant Arrays of Inexpensive Disk'(복수 배열 저가 디스크)에서 'Redundant Arrays of Independent Disks'(복수 배열 독립 디스크)로 바뀌었죠.



[RAID의 목표]

 개요에서 한 이야기를 다시 하는거지만 '가용성'과 '속도'입니다.

  • 가용성 : 쉽게 말해서 데이터를 최대한 쌩쌩하게 보존하는 겁니다. 디스크 수십~수백개 달아둔 기업용 스토리지에서 디스크 하나가 죽었는데 그 즉시 데이터가 손상된다고 생각해보세요. 영업 못합니다. 
  • 속도 : 기업용 스토리지의 생명은 속도. 읽기/쓰기 속도를 최대한 땡기는 겁니다.
 이 중에서 하나만 추구할 수도 있고, 둘 다 추구할 수도 있습니다. 

 RAID를 구성하는 방법('묶는다'고 하기도 합니다.)은 여러가지가 있고, 어떻게 묶느냐에 따라서 가용성과 성능 중에서 하나만 혹은 둘 다 취하는게 가능합니다. 보통은 한 쪽을 극단으로 취하면 다른 한쪽은 포기하게 되죠. 혹은 다른 문제가 생깁니다.


 그러면 이제 가용성이랑 속도를 어떻게 확보하는지 살펴봅시다.



 일단 가용성의 경우 두가지 방법으로 확보 가능합니다.

  • 동일한 데이터의 반복 저장
  • 손상된 디스크의 데이터를 복구할 수 있는 복구책 준비

 첫번째 건 쉽습니다. 문서 사본을 만들어 둔다고 생각하시면 돼요. 예를 들어서 RAID 1은 한데 묶인 디스크 모두에 같은 데이터를 저장합니다. 디스크가 1개라고 남아있는 한은 데이터가 살아있죠.

 문제는 같은 데이터를 반복 저장하는 횟수 만큼 디스크 공간을 손해 본다는 겁니다. 내가 가진 종이가 5장인데 전부 같은 문서를 인쇄했다고 생각해보세요. 종이는 5장이지만, 엄밀히 따지면 내가 기록한건 '문서 1장'뿐입니다. 4장에 다른거 인쇄할 수 있는 기회를 날린거죠. 그래서 극단적인 상황을 제외하면 이런 '반복 저장'은 안정성 확보 용으로는 잘 안씁니다.

 물론 예외도 있어요. RAID 구성에 필요한 디스크를 많이 준비할 수 없다면 데이터의 반복 저장이 가장 쉽게 가용성을 얻을 수 있는 방법입니다. 저장 장치가 껏해야 2개나 달리면 다행인 노트북이거나, 저렴한 가정용 NAS 등에서는 디스크 여러개를 꽂는게 힘들죠. 그런데 이런 상황에서 가용성이 필요하다? 용량 손해를 감수하고 데이터를 반복 저장합니다.

 이걸 고급 용어로 미러링(mirroring)이라고 합니다. 거 모 커뮤니티에서 쓰는거 말고, 한 데이터를 모두가 '거울에 비친 듯이' 동일하게 저장한다는 의미죠.


 두번째 건 어렵다면 어렵고 쉽다면 쉽습니다. 당연히 전 쉽게 설명할거에요.

 일단 우리가 디스크에 저장하는 데이터는 결국 0과 1의 나열입니다.

 그리고 다들 방정식이 뭔지에 대해서는 배우셨을거에요. 미지수가 있는 수식인데, 미지수를 역산해 낼 수 있습니다. 미지수의 배치와 수식의 형태에 따라서 몇개까지의 미지수를 역산 가능한 지가 달라지죠.

 가장 쉬운 예를 들어서 x + 4 = 5라면 x는 1이겠죠. 4를 우측으로 넘기면 +대신 -가 되고, x = 5 - 4를 풀면 x=1.

 여기서 촉이 오신 분들이 있으실겁니다.

 '그러면 각 디스크에 저장되는 데이터 중에서 같은 위치의 데이터를 꺼내 특정한 수식에 넣고, 그 결과를 저장해 두면 손실된 부분이 있어도 원 수식으로 방정식을 돌려서 원래의 값을 찾을 수 있는거네?'

 정답입니다. 그렇게 연산을 돌려서 얻어낸 결과를 활용하는데 ECC(Error Correction Code, 에러 정정 코드)다 Parity(패리티)다 하는 것들이죠. 뭐, 기술적으로 들어가면 앞서 언급한 내용과는 '세세하게' 다릅니다만 RAID의 개요를 익히는 수준에서는 '이런게 있다더라'만 아셔도 됩니다.

 관련 기술을 개발한다 어쩐다 하실게 아닌 이상은 '특정한 수식과 그 수식의 결과값을 저장해 두면 데이터가 손실되어도 방정식을 돌려도 역산이 가능해진다'라고 이해하면 충분합니다.

 터놓고 말해서 스토리지 영업 사원들 중에 이렇게 설명 못하는 사람도 허다할 겁니다. 네? 말이 되냐고요? 한주에도 몇번씩 제안하는 주력장비 RAM 용량 몰라서 전화하는 사람들에게 큰 기대를 하고싶지는 않네요.

 아 그런데 여기에 함정이 좀 있어요. 수식을 사용한 복구 작업도 엄연히 '연산'이 필요한 만큼 이 복구작업을 하는 동안은 다른 작업을 하는 속도가 떨어집니다. 뭐 그래도 데이터를 못살리는 것 보다는 낫지만요. 다른 문제로는... 복구과정에서 다른 디스크가 죽어서 데이터가 날아갈 수 있는 정도? 보통 납품되는 하드디스크나 SSD는 같은 시기에 제조되어서 같은 시기에 납품되는거라 수명이나 특성이 비슷할 수 있거든요. 근데 그래도 데이터를 못살리는 것 보다는 낫습니다. 그거 걱정되면 그냥 튼실한 RAID 쓰면 되는거라...


 다음으로 속도.

 이거 생각보다 쉬워요.

 천장에 물이 가득찬 정수기용 생수통이 메달려 있다고 생각해보세요. 목표는 여기서 물을 가능한한 빠르게 비워내는겁니다. 이때 생수통에 구멍은 내도 되는데 생수통을 부숴버리면 안됩니다.

 이 밑에 큼지막한 대야를 두고, 생수통에 구멍을 뚫습니다. 물이 흘러 나오죠. 일단 이러면 물은 빠지지만 더 빠르게 하고 싶습니다.

 복잡하게 생각할 필요 없죠. 구멍 하나 더 뚫습니다. 물이 두 곳으로 나옵니다. 빠지는 물의 량이 증가하죠.

 그런데 새로 낸 구멍으로 나가는 물이 바닥을 향합니다. 대야 하나 더 두죠 뭐.

 이러다 보니 '그냥 대야 4개 정도 깔고 구멍을 사방으로 내는게 낫겠다'는 이야기 나옵니다.

 이걸로 RAID의 '쓰기속도 올리는 법'의 설명이 끝났습니다.

 진짜로.


 컴퓨터에 저장되는 데이터는 결국 0과 1을 나열한 것에 불과합니다.

 임의로 자르고, 어떻게 연결되는지만 기록해 두면 마음대로 분할해서 저장할 수 있어요. 복잡하게 느껴지신다고요? 파일 압축해서 보낼때 분할 압축해보신적 있으시죠? 그겁니다. 압축 파일에는 나뉘어 있는 정보를 어떻게 연결하는지가 함께 저장되어 있어요. 압축을 풀때 이걸 바탕으로 정보를 원래대로 이어 붙이는거죠.

 그래서 컴퓨터에 저장되는 데이터는 어떻게 보면 물이나 다름 없습니다. 1L의 물을 500ml의 대야 둘에 나눠 붇는다고 해서 한쪽은 수소, 다른 한쪽은 산소가 되는건 아니죠. 둘 다 물입니다. 합치면 원래대로 물 1L가 나와요. 컴퓨터에 저장되는 데이터도 -물에게는 불필요한- '연결되는 위치만 확실히 기록해 둔다면' 임의로 분할해서 저장했다 붙일 수 있습니다.


 하드디스크 하나나 SSD 하나가 데이터를 받아서 저장할 수 있는 속도에는 한계가 있어요.

 그런데 우리가 원하는건 그 속도를 더 늘리는 겁니다.

 그런데 앞서 '데이터는 연결 점만 기록하면 임의로 분할해서 저장해도 무방하다'고 했죠.

 하드디스크나 SSD를 여러개 두고 저장할 정보를 토막내서 동시에 흩뿌리면? 빙고, 저장 속도가 드라마틱하게 올라갑니다.

 천장에 메달린 물통에 구멍을 여러개 내서 대야 여러개에 나눠 받듯이요.

 이게 RAID로 '쓰기 속도'를 올리는 방법입니다.


 자 여기까지 설명 했으면 '읽기 속도'를 올리는 방법도 촉이 오는 분들이 있으실겁니다.

 촉이 안왔어도 걱정하지 마세요. 답은 의외로 간단합니다.

 물통 비유의 역을 생각해보죠. 누군가 오더니 그걸 생수통에 다시 부어 넣으랍니다. '생수통에 구멍냈는데?'라니 친절하게 빈통 하나 주네요. 아니 이걸거면 왜 비우는건데.

 생수통 주둥이에 깔대기를 꽂고 대야의 물을 옮겨담는데, 아무리 생각해도 이러면 시간이 오래 걸리겠다는 촉이 오죠.

 어 근데 이 생수통 이상합니다. 만들면서 뭔 사고를 쳤는지 주둥이가 4개네요. 이러면 답 나왔죠. 주둥이 마다 깔대기 꽂고 각각의 깔대기를 사용해서 여러 대야의 물을 동시에 부어 넣습니다.

 네, 똑같은 걸 디스크에 저장된 데이터에 해주면 됩니다. 디스크 하나에서 큰 정보를 빼내는데는 시간이 오래 걸리지만 디스크 여러개에서 정보를 나눠담은 상태에서 동시에 가져오면? 속도가 드라마틱하게 오릅니다.



 나눠서 빨리 담고(쓰기 속도 증가), 여러 곳에서 동시에 받아와서 빨리 채우고(읽기 속도 증가).


 굉장히 간단합니다.


 아 물론 데이터는 물이량 달리 자르고 붙이는데 시간이 걸리니까 디스크 달아둔 숫자 만큼 읽기/쓰기속도가 정수배로 늘지는 않아요. 읽기/쓰기 속도가 10인 디스크 2개를 RAID로 구성해서 데이터를 동시에 나눠줬다가 받아오면 읽기/쓰기 속도는 20이 아니라 10과 20사이의 어딘가가 됩니다. 자료를 자르고 붙이는 시간이 걸리니까요.


 뭐 그래도 디스크 하나에만 우직하게 우겨넣는 것 보다는 확실히 빠르죠.



[RAID 레벨]

 이 좋은 RAID 기술은 여러가지 구현 방법이 존재합니다.


 디스크를 어떻게 묶느냐, 묶은 상태에서 어떻게 동작하냐 등에 따라서 여러가지가 있어요. 이걸 RAID 레벨(level 맞습니다.)이라고 부릅니다. 보통 숫자로 표현하고, 기본적으로는 한자리 수를 쓰지만 두 가지 RAID 기술을 엮어서 쓰면 두자리 숫자를 쓰기도 해요.


 이 RAID 레벨은 크게 3가지로 나눠볼 수 있습니다.

  • 산업 표준으로 정해진 RAID 레벨이 있는데 이걸 Standard RAID Level(표준 RAID 레벨)이라고 부릅니다.
  • 앞서 언급한 것 처럼 RAID 레벨을 두 개 엮어서 쓰는 경우  Nested RAID Level(네스티드 RAID 레벨)이라고 부릅니다. 혹은 Hybrid RAID Level(하이브리드 RAID 레벨)이라고 부르기도 해요.
  • 기업체가 임의로 만든 특수한 RAID 레벨을 Non-standard RAID Level(비표준 RAID 레벨)이라고 부릅니다.

 가정에서 쓰는건 보통 표준 RAID 레벨에 속하는 RAID 기술 들입니다. 하이브리드 RAID 레벨은 2가지 RAID 레벨을 층으로 쌓아서 구성해야해서 디스크가 많이 들고, 이건 보통 집에서 구현할 물건이 아니죠. 간단한 축에 속하는 RAID 10이나 01은 '못할건 없지만'요.


 비표준 RAID 레벨의 경우 숫자가 안붙기도 합니다. 맡았던 업무상 기억에 남는건 역시 배분형 RAID(Distributed RAID)[각주:4]. 맹근 넘은 IBM. 이 글에서 다룰 내용은 아니긴 하지만 쉽게 설명하면 '디스크안에 칸막이를 쳐서 많은 수의 작은 디스크 토막을 만들고, 그걸 RAID로 묶는 방식'입니다. 디스크 손상시의 복구 속도를 드라마틱하게 올릴 수 있지만, 단점 도 좀 있었던 걸로. 심심하면 레드북 뒤져다가 관련 문단 한번 번역해 볼지도 몰라요.


 각설하고, 여기서는 대표적으로 자주 쓰이는 RAID 레벨 몇개만 보겠습니다.



[아래의 표를 보는 법]

 이 뒤로 나올 RAID 레벨 설명의 서두에는 앞에 이런 표가 붙을거에요.


 최소 요구 디스크 수량

 2

 저장 공간 효율

 50%

 손실시 대응 가능 디스크 수량 

 n-1

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 각각이 의미하는 내용을 살펴보죠.

  • '최소 요구 디스크 수량'이란 이 RAID를 구성하는데 필요한 디스크의 최소 수량입니다. 이것 보다 적은 수의 디스크로는 해당 RAID를 구성할 수 없어요. 예를 들어서 여기에 10이 적혀있으면, 디스크 10개는 있어야 이 RAID를 구성해 볼 수 있습니다.
  • '저장 공간 효율'이란 묶은 디스크의 전체 용량 중에서 몇 %를 실제 데이터 저장에 쓸 수 있냐는 이야기입니다. 예를 들어서 75%라면 25GB 디스크 4장 묶어서 구현했을때 실제로 데이터를 저장 가능한 용량은 75% 밖에 안된다는 거죠. 실제로는 파티셔닝이나 기타등등의 이유로 '디스크 스펙에 적힌 숫자에 이 효율을 곱한 값=저장공간'이 되지는 않긴 합니다. 이건 어디까지나 아무것도 적용 안한 '물리적인 용량' 기준의 효율이에요.
  • '손실시 대응 가능 디스크 수량'이란 이 RAID에서 디스크가 몇개까지 손상되어도 데이터가 보존 되거나 복구할 수 있느냐를 의미합니다.

 아, 앞에서 말을 안했는데 보통 기업에서 납품되는 기업용 스토리지 장비들은 디스크가 수십~수백개가 들어가니 그걸 몇개 단위로 묶어서 RAID를 구성합니다. 이 작은 묶음을 RAID array라고 불러요.


 물론 가정에서 5개도 안되는 디스크로 구성할때는 RAID array를 볼 일이 거의 없습니다.


 자, 그러면 주요 RAID만 퀵하게 보죠.



[RAID 0 / 표준 RAID 레벨]

 최소 요구 디스크 수량

 2

 저장 공간 효율

 100%

 손실시 대응 가능 디스크 수량

 손실 대응불가

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 하나로 묶인 모든 디스크들에 데이터를 스트라이핑(Striping)으로 기록합니다. 그래서 그냥 '디스크 스트라이핑'이라고 부르는 경우도 있어요.


 스트라이핑은 별거 아닙니다. 받아온 데이터를 일정 간격으로 토막내서 포커에서 카드패를 뿌리는 양 디스크들에게 한 토막씩 던져주는거죠.


 여러개의 디스크에 데이터를 동시에 기록합니다. 당연히 불러올 때도 여러개의 디스크에서 동시에 받아올 수 있어요. 앞서 이러면 어떻다고 했죠? 맞습니다. 속도가 올라가죠. 그래서 RAID 0은 읽기와 쓰기 속도 모두가 빠릅니다.


 그런데 문제가 있어요. 이 녀석 데이터를 흩뿌려서 저장하기만 할 뿐, 데이터 손실에 따른 조치를 안취합니다. 디스크가 한장이라도 손상되면 그걸로 끝장이에요. 안녕 굿바이 사요나라~. 저장 공간 효율이 100%인 이유가 '데이터 손실시 복구에 필요한 정보를 저장하지 않아서'입니다.


 당연하지만 기업체에 들어가는 스토리지에서는 왠만하면 안씁니다. 데이터 날아가는거 좋아하시는 분? 최상의 속도를 위한 대가가 '디스크 사망시 무조건 데이터 손실'이라면 그거 누가 좋아할까요. 다만 '속도에 죽고 속도에 산다'는 장비에서 RAID 0을 지원하는 경우는 있긴 있어요. 뭐, 작업간의 임시정보 저장이라면... 날아가도 괜찮은게 있을 수는 있으니까.


 반면 집에서 쓰는 경우에는 자료의 읽기/쓰기 속도를 올리기 위해 RAID 0을 구현하는 경우가 있습니다. 적은 디스크 숫자 -딱 2개만 있어도 OK!-로 구현 가능하니까요. 뭐, 요즘은 SSD가 대중화 된지 오래라 RAID 0을 구현할 일은 거진 없지만서도.


 물론 저기 영상 편집을 업으로 삼는 프리랜서 분들께는 '다른'이야기가 될 수 있습니다. 고해상도 영상 편집을 할때는 디스크의 읽기/쓰기 속도가 굉장히 중요해 지니까요.



[RAID 1 / 표준 RAID 레벨]

 최소 요구 디스크 수량

 2

 저장 공간 효율

 1/n

 손실시 대응 가능 디스크 수량

 n-1

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 하나로 묶인 모든 디스크들에게 같은 데이터를 저장합니다. 모두가 거울처럼 같은 데이터를 저장하니 미러링(mirroring). 네, 그래서 '디스크 미러링'이라고 부르는 경우도 있습니다.


 앞서 RAID가 저장 속도를 올리는 방법이 '데이터를 토막내서 모든 디스크에 동시에 저장한다'였는데, 얘는 모든 디스크에 같은 데이터를 저장합니다. 당연히 쓰기 속도는 별다른 이득을 보지 못해요. 반면 데이터를 불러올때는 모든 디스크에서 동시에 가져올 수 있기 때문에 읽기 속도는 확실히 올라갑니다.


 RAID 1의 장점은 가장 적은 수의 디스크로 구성 가능한 가장 안전한 RAID라는 겁니다. 디스크 5개를 하나로 묶어 놨는데 전부 같은 정보가 담겨있다고 생각해보세요. 디스크 4개가 동시에 죽어도 우리에게는 온전한 데이터가 담긴 1개의 디스크가 남아 있습니다. 이러한 특성상 개인이 집에서 중요한 자료를 저장할때 가장 적은 부담으로 구현할 수 있는 RAID가 되죠.



[RAID 3 / 표준 RAID 레벨]

 최소 요구 디스크 수량

 3

 저장 공간 효율

 [(n-1)/n] X 100 %

 손실시 대응 가능 디스크 수량

 1

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 저장 공간 효율 수식이 좀 복잡하죠? 어쩔 수 없습니다.


 RAID 3에서는 하나로 묶인, 그러니까 같은 Array의 디스크 들에게 데이터를 흩뿌려서(스트리핑) 저장합니다. 그리고 저장되는 데이터를 수식에 넣어서 복구용 패리티 값을 만들고 이걸 디스크 하나에 저장하는거죠.


 네, 실제 데이터를 저장 가능한 공간을 구하려면 그냥 디스크 용량의 총합-1을 하면 됩니다. 이걸 퍼센테이지로 계산하려니까 분모 붙고, 100 곱하고 이러고 있는거죠.


 RAID 5를 아시는 분들이라면 '이거 RAID 5랑 다른게 뭐가'라고 할 수 있는데, RAID 3에는 RAID 5에 없는 몇가지 문제가 있습니다.



 일단 RAID 3에서는 모든 디스크가 정확히 동일하게 움직여야합니다.


 하드디스크를 열어보면 은색 원반이 보입니다. 여기에 데이터를 저장하고, 이걸 플래터라고 불러요.


 그리고 플래터 위에 있는 거대한 바늘이 보일겁니다. 이건 플래터의 특정 부분을 가리키기 위한 장치 -전축의 팔을 떠올리신 분들이라면 거의 같은 용도입니다-로 액추에이터 암이라고 부릅니다. 그 끝의 뾰족한 부분을 헤더라고 하고 여기서 데이터를 읽고 쓰죠.


 RAID 3에서는 모든 디스크의 플래터가 정확히 동일한 각도/속도로 회전하게 합니다. 이게 뭐가 문제냐 한번에 한 사용자만 RAID 3로 구성된 저장공간에 접근해서 일을 시킬 수 있다는거죠. 사용자 A랑 사용자 B랑 다른 디스크에 있는 다른 위치의 정보를 달라고 했을때 이 둘이 동시에 접근할 수 없는겁니다.



 RAID 3의 다른 문제는 패리티 저장용 디스크가 따로 배정된다는 점입니다.


 데이터를 디스크 여러개에 나눠서 저장을 해도, 한번씩 쉬는 디스크는 생깁니다.


 저장할 데이터의 길이가 4인데, 디스크는 A, B, C의 3개라고 가정해보죠. A, B, C에 자료를 하나씩 나눠주고 나면 한도막이 남고 이건 셋 중에 하나만 받으면 됩니다. 나머지 둘은 쉬었네요.


 그런데 이것과는 무방하게 패리티 디스크는 쉴 수가 없습니다. 모든 쓰기 작업에 대해 패리티를 계산해서 저장해야 하니까요. 그 결과 다른 디스크 대비 패리티 디스크의 수명이 빠르게 줄어듭니다. 장비 내에 패리티 디스크가 한둘도 아니니 이 문제는 생각보다 크죠.



 그래서 이런 문제 때문에 RAID 3는 안씁니다.


 사실 여기서 안다루는 RAID 2와 RAID 4도 거의 같은 문제로 안써요. 굳이 RAID 3를 언급한 이유는 현업에 있던 시절에 가끔 고객의 요구 사양에 RAID 3가 적혀있는 경우가 있어서입니다.


 짧게 다뤄보자면 RAID 2는 RAID 3에서 패리티 대신 ECC(에러 정정 코드)를 저장하고[각주:5], RAID 4는 자료 토막의 크기를 용량이 아닌 특정한 크기의 '블록'단위로 나누고, 적어도 데이터를 읽는 작업에 한해서는 여러 사용자가 동시에 할 수 있도록 조정한 수준입니다.


 그러면 대체제는 뭐냐, RAID 5입니다.



[RAID 5 / 표준 RAID 레벨]

 최소 요구 디스크 수량

 3

 저장 공간 효율

 [(n-1)/n] X 100 %

 손실시 대응 가능 디스크 수량

 1

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 RAID 5가 RAID 2~4대비 보이는 두드러지는 차이점은 '패리티 전용 디스크의 삭제'입니다.


 RAID 5에서 패리티는 모든 디스크에 한번씩 돌아가면서 기록되죠. 그 덕분에 여러 사용자가 동시에 읽기/쓰기를 할 수 있고, 전용 패리티 디스크를 둘 경우 이 디스크의 수명이 빠르게 감소하는 문제도 사라졌습니다.


 그러다보니 사실상 '가장 무난한 RAID 설정'이 되었죠. 농담이 아니라 기업용 스토리지를 사려고 할때 RAID 설정을 언급 안하고 필요한 용량만 적어서 보내면 이쪽에서는 그냥 RAID 5로 가정하고 작업했습니다.



[RAID 6 / 표준 RAID 레벨]

 최소 요구 디스크 수량

 4

 저장 공간 효율

 [(n-2)/n] X 100 %

 손실시 대응 가능 디스크 수량

 2

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 RAID 5는 디스크 손상을 1개 밖에 대응을 못하니까 그거 보다 더 높은 안정성을 추구하기 위해 만든 규격입니다. 패리티 2개가 나오는 수식을 쓰는거죠. RAID 5와 마찬가지로 패리티는 디스크들에 돌아가면서 저장합니다.


 이런 구조로 인해 RAID 6에서는 디스크 2개가 동시에 죽어도 그 Array의 데이터는 유지됩니다.


 RAID DP라는게 언급되는 경우도 있는데, DP는 Dual-Parity(듀얼 패리티)의 약자. 패리티 2개를 두는거니 사실상 RAID 6나 다름 없습니다. RAID 3~4 시설에 쓰던 방식에서 패리티를 2개로 늘리고 패리티 저장 디스크를 하나 더 둔거죠. RAID 6의 '원시형'이라고 보면 얼추 맞아요. 그러다보니 RAID DP로 요구하는 사람이 있으면 '지금은 이거에요'라면서 RAID 6로 작업된 견적서를 주는 경우가 보통이었죠.


 'RAID Array내의 디스크 두 개가 동시에 터질 가능성이 얼마나 되느냐'라고 하실 수도 있지만 있습니다. 대체로 한번에 납품된 디스크 들은 거의 같은 시기에 생산된거라 특성이 비슷하거든요.


 게다가 손상된 데이터의 복구 작업 시간이 길어질 수록 같은 RAID Array내의 디스크가 손상될 가능성도 올라갑니다. 복구 작업은 살아남은 디스크 들에게서 데이터를 가져다가 방정식을 돌려서 손상된 값을 찾는 행위고, 남은 디스크는 복구작업 내내 데이터를 읽어들이는 부하에 시달립니다. 이 과정에서 디스크가 하나정도 더 죽지 말라는 법이 없죠.


 오죽하면 IBM은 하이엔드급 스토리지인 DS8880 계열의 특정 펌웨어 이후로는 '일정 용량 이상의 디스크에서는 RAID 6 구성 강제, RAID 5 필요시 사측과 연락해 예외 승인을 받을 것'이라는 가이드를 한 적도 있었습니다.


 

- 출처 : IBM Rebook, IBM DS8880 Architecture and Implementation (Release 8.5), 2019년 1월자. 16페이지

(꺽쇠 부분 번역)

 RAID 5는 용량이 1 TB 이하인 드라이브에 대해 적용할 수 있습니다 하지만 이 설정은 권장되지 않으며 위험을 감수해야합니다. 엔터프라이즈급 HDD 드라이브에 대해서는 현장에서 Request for Price Quote(RPQ)[각주:6]의 신청이 필요합니다.


 1TB보다 크지만 Nearline 드라이브가 아닌 경우에는 RAID 5로 지정할 수 있지만, RPQ와 더불어 내부의 제어 스위치를 활성화 시켜야합니다.


 RAID 10은 모든 종류의 드라이브에 대해 적용 가능하지만, 2티어 플래시 디스크에 대해서는 예외입니다.


 이거 근거를 설명한 문서는 어디서 뒤져야 할지 모르겠는데, 기억하기로는 앞서 언급한 '복구 시간이 증가할 수록 디스크의 추가 손상 가능성이 높아지는 문제' 때문에 정책을 이렇게 수정했던 걸로 기억합니다.


 이거 해결하려고 복구시간을 최대한 단축하는 방향으로 설계한게 앞서 살짝 언급한 Distributed RAID. 이거 관련 문서 중에 '복구간의 디스크 추가 손상 가능성'에 대해 연구자료까지 꺼내가며 '그래서 이거 좋아요'라고 한게 있었을겁니다.



[RAID 10 / 표준 RAID 레벨]

 최소 요구 디스크 수량

 4

 저장 공간 효율

 스트라이프 수 / n

 손실시 대응 가능 디스크 수량

 구성에 따라서 상이

※ n은 RAID에서 한 Array로 묶여있는 디스크의 수량


 표기는 하는 사람 마음인데, 1+0이나 1&0으로 적는 사람도 있습니다. 물론 키보드 덜치는 10이 제일 편하긴 하죠.


 최소 요구 디스크 수로 구성한다고 가정하고 살펴볼게요. 일단 디스크를 2개씩 RAID 1(미러링)으로 묶습니다. 그리고 이 미러링 된 디스크 2세트를 다시 RAID 0(스트라이핑)으로 묶어요.


 이렇게 구성된 RAID 10에 데이터가 저장되는걸 따라가보죠.


 데이터가 들어오면 그 데이터는 RAID 0으로 처리됩니다. 다시 말해서 데이터를 둘로 나눠서 RAID 1로 묶은 디스크 뭉치들에게 내려 보내는거죠.


 이 분할된 데이터는 RAID 1로 묶인 디스크 2개에 저장됩니다. 나눠서? RAID 1은 미러링이니까 양쪽 디스크에 받아온 정보를 똑같이 저장합니다.


 자, 이 구성이 왜 있냐고 하실지도 몰라요. 미러링으로 몇개를 묶을 거냐에 따라서 남는 용량의 차이가 커지니까요. 하지만 RAID 10은 RAID 0을 제외한 모든 RAID 구현 방식 보다 빠릅니다.


 자 앞서서 RAID 0은 기업체에서 보통 안쓴다고 했어요. 데이터 손상에 대한 대응 자체가 불가능 하니까요. 모든 데이터에 자료를 나눠서 저장하니 읽기/쓰기 속도는 올라가지만, 디스크가 손상되면 자료를 복구할 방법이 없습니다.


 반면 RAID 10은 디스크가 손상 되어도 자료의 복구가 가능합니다. RAID 1으로 묶인 부분을 살펴보면 동일한 자료가 저장된 디스크가 존재하니까요.


 즉, RAID 10의 장점은 'RAID 0보다는 속도가 조금 떨어지지만 안전하다'는 거고. 그래서 데이터를 빨리 넣고 빼야하는 상황에서는 RAID 10을 흔히 사용합니다.



 '어 잠깐 그러면 그 역도 되는거 아니야'라고 하실 수 있는데, 네, 구현 가능합니다. RAID 01라고 있어요.


 디스크 4개로 구현한다는 가정하에 디스크를 2개씩 RAID 0(스트라이핑)으로 묶고, 그걸 RAID 1(미러링)으로 묶습니다. 저장되는 데이터는 RAID 0으로 구현된 각각의 뭉치에 '동일하게' 전달되고, RAID 0으로 묶인 디스크 2개에 데이터를 나눠서 저장하죠.


 디스크에 손상이 생겨도 대응 가능한건 RAID 10과 동일합니다. RAID 0으로 묶인 어느 한 디스크가 손상되어도 그것과 동일한 다른 RAID 0이 또 존재하죠.



 자 그러면 왜 RAID 10이 흔하고 RAID 01을 안흔하냐. 디스크 하나가 고장난 경우를 보면 됩니다.


 디스크 4개로 RAID 10이랑 01을 만들었다고 두고 살펴보죠.


 RAID 10에서 디스크 하나가 고장났습니다. 고장난 디스크를 교체해서 넣었어요. 얘랑 정확히 같은 데이터를 지닌 다른 디스크가 있습니다. 복사하면 되죠. 디스크 하나에서 하나로 데이터를 복제하는 작업을 합니다. 작업에 참여한 디스크 수 총 2개.


 RAID 01에서 같은 상황. 고장난 디스크를 교체해서 넣었습니다. '아 저쪽의 다른 RAID 0에 붙은 동일 위치의 디스크 복제하면 되는거 아닌가요?' 아뇨 그 다른 RAID 0의 정보를 가져다가 손상된 디스크가 있는 RAID 0의 정보 전체를 다시 복구합니다.


 자, 이러면 당연히 부하 덜걸리고 운영 편한게 RAID 10이라는 결론이 나옵니다. 그러면 뭐, 다들 RAID 10 쓰는거죠.



 아 물론 이런식으로 다른 RAID를 쌓기도 합니다. RAID 50이면 RAID 5로 묶은 디스크들을 다시 RAID 0으로 묶은거죠.



[참고 자료]

  • 영문 위키피디아 RAID 문서 및 그 하위 문서들 [링크]
  • EMC 교육 서비스저 김기성 옮김 (2014. 01. 16). '정보 스토리지와 관리 - 클라우드 컴퓨팅 시대의 정보 저장과 관리, 보호 기법'(Information Storage and Management: Storing, Managing, and Protecting Digital Information in Classic, Virtualized, and Cloud Environments). 3장 데이터 보호: RAID 에이콘 출판사. ISBN 9788960775121.
  • 시게이트 NAS OS가 제공되는 시게이트 비즈니스 스토리지용 온라인 메뉴얼. RAID 모드 항목. [링크]
  • 텀즈, 'RAID' 문서 [링크]
  • Open-e, 'What are RAID 1, RAID 1+0 and RAID 0+1' [링크]
  • 네이버 까망손님의 블로그 'RAID 0+1과 RAID 1+0' [링크]


  1. 컨트롤러 모델명 2076-524. 다만 컨트롤러에는 2.5인치 디스크만 들어갑니다. 익스펜션인 2076-12F가 3.5인치 디스크 12개, 24F가 2.5인치 디스크 24개를 탑재 가능하죠. 덕분에 3.5인치 디스크 달아내야하면 컨트롤러는 텅 빈채로 출고해야해서 괜시리 랙 공간만 까먹었습니다. 웃긴게 1세대 컨트롤러인 2076-112/124는 2.5인치랑 3.5인치 용이 따로 있었다는...-_- [본문으로]
  2. 네트워크 접속이다 데이터 처리다, 복제다, 압축이다 하는 '연산부' [본문으로]
  3. 디스크 추가할때 달아내는 쉽게 말해서 '보관함'. 뭐, 의외로 몇몇부분 빼면 앞은 외관성 컨트롤러와 비슷해 보이는 경우도 꽤 있지만서도... [본문으로]
  4. 공식 한글 명칭이 아닙니다. [본문으로]
  5. 다른 차이로는 RAID 3의 데이터 저장 토막 크기가 RAID 2보다 큰 것도 있긴 합니다. [본문으로]
  6. '특별 예외 허가 요청' 정도로 생각하면 됩니다. [본문으로]