[운영체제및실습] 11주차 2회차: RAID

2025. 5. 25. 17:53·운영체제및실습

1. RAID

RAID는 Redundant Array of Inexpensive (Independent) Disks를 나타냅니다.

저렴한 디스크를 여러 개 사용해서 용량이 크고 품질이 큰 디스크 하나를 가지고 있는 것과 같은 효과를 얻습니다. 

일반 PC에서 사용하는 디스크를 본 적이 있습니다. 개인용 컴퓨터는 싼 디스크 사용이 일반적인데, 용량도 적고, 하드웨어의 신뢰성도 떨어지게 됩니다. 가능하면 저렴한 부품을 사용해 디스크를 만들게 됩니다. 그래서 더 비싼 제품보다는 신뢰성이 떨어질 수 있습니다.

일반적으로 용량이 큰 디스크는 높은 품질을 요구합니다. 용량이 큰 디스크는 개인이 쓰기 보다는 기업이나 공공기관이 거래정보, 고객정보, 데이터등을 저장하는 데 이용합니다. 예를 들어, 은행은 고객의 계좌정보, 금융 거래 정보를 저장해야 하며, 공공기관은 국민정보, 병역 정보, 납세 정보를 저장해야 해서 용량도 커야 하며, 데이터의 안전성이 매우 중요합니다. 따라서 저장장치가 수명도 오래 가고 고장도 나지 않는 신뢰성 높은 디스크여야 합니다. 성능이 좋은 디스크를 만들려면, 헤드, 모터 등등의 부품을 좋은 부품을 써야 해서 비싸집니다.

RAID라는 것이 처음 나온 시기는 디스크의 가격이 용량에 비례하는 것이 아니라 기하급수적으로 비쌌습니다. 이 말은, a, b디스크 중 용량이 10배 크면, 가격이 10배 비싼것이 아니라 20배, 30배 큰 것과 같습니다. 그래서 컴퓨터 시스템의 가격 중 디스크 저장 공간의 가격이 큰 부분을 차지했습니다. 그런데, PC시대가 와서 개인용 컴퓨터에 장착할 저렴한 디스크들이 시장에 많이 만들어져서 판매가 되었습니다. 상대적으로 싼 디스크를 여러 개 사용해서 용량이 크면서 품질이 좋은 특히 신뢰성이 좋은 디스크를 만들 필요성에 의해 RAID가 제안되었습니다. 그래서 RAID는 상대적으로 저렴한 디스크를 여러 개 사용해서 용량이 크며 고품질의 디스크를 구성해서 조합방법에 따라 종류가 달라집니다. 고유번호를 부치게 됩니다.

 

2. RAID 0 (non-redundant)

RAID0을 살펴봅시다.

디스크 4개를 쓰는 사례를 살펴 봅시다. strip이라고 부르는 정보단위를 저장합니다. strip0,1,2,3과 같이 연속된 숫자가 한 디스크가 아니라 여러 디스크에 분산되어 저장됩니다. strip은 일반적인 저장단위를 말하는 것이므로 한 블록으로 생각하면 됩니다. 그래서 파일을 저장한다고 생각했을 때 파일의 내용이 여러 개의 블록으로 구성될 때, 여러 개의 블록을 하나의 디스크에 모아놓는 것이 아니라 분산시켜서 저장하는 것입니다.

 

이런 식으로 분산 저장하면 어떤 장점이 있을까요? 용량면에서 보면, 디스크 4개를 썼기 때문에 디스크 하나보다 용량은 4배 커집니다. 신뢰성 측면에서 봅시다. 디스크 4개를 쓰는 경우 첫번쨰 디스크의 파일 100번에서부터 199번을 저장하고, 두번째는 200번대 파일, 3번째파일은 300번대, 4번쨰 파일은 400번대 파일을 저장할 것입니다. 이런 식으로 저장할 경우, 4개 중 하나가 고장났다고 했을 때, 예를들어 300번대 식별자를 가지는 파일들을 모두 잃어버려서 100개의 파일이 모두 손실됩니다. 그러나 RAID 0에서는 디스크 하나가 고장나면, 파일 100개를 통째로 잃어버리는 것이 아니라 각 파일의 1/4만 없어지는 것입니다. 어떤파일이 4개로 구성된다고 할때, 파일의 첫번째 블록은 첫번째 디스크의 strip0에, 두번째 블록은 두번째 디스크의 strip1, 세번째 블록은 세번쨰 디스크의 strip2, 네번째 블록은 네번째 디스크의 strip3에 흩어서 저장을 하다가 만약에 3번째 디스크가 고장이 나면, 3번째 블록의 내용은 사용을 못합니다. 하지만, 파일 전체가 없어지는 것이 아니라 파일의 1/4만 없어지는 것입니다. 즉, 나머지 strip0,1,3으로 세번째 디스크의 블록부분을 일부 복원가능합니다. 다만, 신뢰도가 약간은 향상되지만, 그렇게 크게 향상되는 것이 아닙니다.

 

3. RAID 1 (mirrored)

그다음은 RAID 1(mirrored)입니다.

정보가 4개짜리로 구성된다고 할때, 왼쪽의 경우, RAID 0구성방법인데, 이것이 2개 중복되는 것이 RAID1입니다. 그러면, 앞의 예와 같이, 8개의 디스크 중에 3번쨰 디스크가 고장이 나면, 3번쨰 디스크의 내용이 없어진다고 하지만, 똑같은 정보가 7번째 디스크에 있어서 깨진 내용을 접근 가능합니다. 복사를 하면 복구가 가능한 것입니다. 2개의 set이 있어서 1개의 set보다는 신뢰성이 좋아집니다. 거울에 비친 것처럼 똑같은 set이 2개 있습니다. 하지만, 용량이 2배가 되는 것이 아니라 같은 용량을 저장하기 위해 디스크가 2배가 필요하니까 가격이 더 비싸집니다.

 

4. RAID 2

RAID2를 봅시다.

RAID1은 RAID0보다 신뢰성을 향상시켰지만, 그 향상 정도에 비해 가격이 너무 비싸서 디스크의 수를 줄여보려는 목적에서 나온 것이 RAID2입니다. 하늘색 왼쪽 4개는 데이터를 저장하는 디스크입니다. 회색 오른쪽 3개는 Hamming code라는 오류 감지및 수정코드를 저장하는 디스크입니다. 각 디스크에 같은 위치에 존재하는 비트를 b0,b1,b2,b3이라고 부릅시다. 이 4개의 비트들에 대해 해밍코드라고 하는 f0(b),f1(b),f2(b)를 b0,b1,b2,b3와 같은 위치에 디스크가 계산해서 저장을 합니다. 

 

f0(b) = even parity bit for data bits b0,b1,b2

f1(b) = even parity bit for data bits b0,b1,b3

f2(b) = even parity bit for data bits b1,b2,b3

 

이렇게 계산이 되는 대상 비트의 조합을 다르게 해서 even parity를 계산해 저장을 하게 돼서 책선값입니다. 이렇게 해서 저장을 할 때 계산해서 넣습니다. 

그 후에, 저장된 데이터를 읽을 때, 왼쪽의 하늘색 부분 b0,b1,b2,b3를 읽음과 동시에 f0(b), f1(b), f2(b)를 계산해서 과거에 저장되었던 f0(b), f1(b), f2(b)와 비교해봅니다. 비교 결과가 같으면, 저장된 이후로 내용이 온전하게 깨지지 않고 있는 것이며, 만약에 저장되었을 때 parity값과 읽은 다음에 계산한 새로운 parity값이 서로 다르다고 하면, 결국 b0,b1,b2,b3에서 어떤 비트가 바뀌었다라고 하는 것이므로 오류로 간주하는 것입니다.

그런데 f0(b), f1(b), f2(b)를 가지고서 오류가 생기는 것을 알아낼 수 있는데, 만약 b0~b3까지 중 2개의 비트가 오류가 생겼다고 하면, 즉, b0가 0이었는데 저장중에 1로 바뀌고 b3이 1이었는데 저장 중에 2로 바뀌어서 두 비트가 잘못되면, parity를 계산해 두 비트가 잘못된다는 사실만 알아낼 수 있으며, 어떤 비트가 잘못된 것인지는 모릅니다.

네 개의 비트 중 한 비트가 오류가 생긴 경우에는 비트가 잘못되었다는 것은 물론 어떤 비트가 잘못되었는지까지 알아낼 수 있습니다. 그래서 그때는 다시 수정을 할 수 있습니다.


5. Bit-Interleaved Parity

RAID2는 RAID0,1에서와 다르게 정보를 구성하는 한 바이트의 내용으로 구성되는 여러 비트들을 여러 디스크에 흩어 저장을 하게 됩니다. 이런 방법을 Bit-Interleaved Parity라고 합니다.

예를 들어서 1011이라는 한 바이트가 있는데, 정통적인 방법에서는 한 디스크에 특정 sector에 연속된 비트에 1011을 같이 저장합니다. 즉 연이어서 저장되는게 일반적입니다. 하지만, Bit-Interleaved Parity에서는 서로 다른 디스크에 비트들이 나뉘어서 저장되게 됩니다. 즉, 앞의 1은 첫번째 디스크, 0은 두번째 디스크, 1은 세번째 디스크, 2는 네번째 디스크에 저장을 하지만, 똑같은 위치에 저장을 합니다. 

Interleaved방법에서 bit0,1,2,3에 대한 parity를 계산하면, 그 다음 디스크에 같은 위치에 parity bit에 저장을 하는 것입니다. 

RAID2에서는 해밍코드를 사용해서 2비트가 잘못된다는 사실 그 자체와 1비트가 잘못되었을 때는 사실과 어떤 비트가 잘못되었는지 알아낼 수 있는 장점은 있지만, 4비트 저장을 위해 3개의 디스크를 더 사용해야 하므로 디스크가 많이 든다는 단점이 있습니다.

 


6. RAID 3 (bit-interleaved parity)

그래서 RAID3를 사용하기 시작했는데, RAID2처럼 bit-interleaved방법을 씁니다. 한 바이트를 구성하는 4개의 비트를 서로 다른 디스크에 넣고 또 패러티를 계산합니다. 앞선 그림과 같이 parity를 한 개만 사용합니다. RAID2에서는 hamming code를 쓰고, 디스크가 많이 필요했지만, RAID3에서는 한 디스크만 필요합니다.

처음에 데이터를 저장할 때 b0~b3 저장하고, 패러티를 저장합니다. 읽고, 비교해보고 같으면 괜찮, 다르면, 데이터가 깨졌으므로 parity를 보고 복구를 해야 하는데, 이전에 저장되었던 패러티로 복구를 하는 것입니다. 

디스크 중 b2를 저장하는 디스크가 고장이 났다고 하면, 패러티를 보고 해당 디스크를 제거하고 새로 디스크르 넣고, 나머지 디스크로 내용을 복원 가능합니다. 한 비트가 들어있는 디스크가 고장났다는 사실을 확실히 아는 경우, 패러티로 내용을 복구할 수 있습니다. 그러나 눈에 보이는 잘못이 아니라 어딘가에 고장이 나서 정보가 바뀌었는데, 눈으로 봐서 모르는 경우, 패러티 비트 한 비트를 쓴다고 해서 어떤 비트가 잘못되었는지 모른다는 한계가 존재합니다.

RAID3는 접근 성능 측면에서는 디스크를 한 개만 써서 시간 단축되어 RAID2보다는 우수합니다. RAID3에서는 각 비트가 디스크에 흩어져 있어서 한 비트만 읽으면 되므로 시간이 1/4로 줄어들것이라고 생각했으나, 실제로는 그렇게 빠르지 않았다고 합니다. 그 이유는 디스크의 5개에서부터 한비트씩 읽어서 조합을 해야합니다. 그런데, 디스크가 기계적으로 동시에 다 읽을 수는 없습니다. 약간의 시간지연이 발생할 수 있습니다. 5개의 디스크가 완전히 기계적으로 동기화되지 않으면 성능이 빨라지지 않아 그렇게 좋지 않습니다. 

 

7. RAID 4 (block-level parity)

그래서 RAID4가 나왔으며, bit-interleaved방법을 쓰지않고, 1011을 한 디스크에 연이어 저장합니다. 전통적인 방법처럼 쭉 연이어서 한 디스크에 넣습니다. RAID0에서처럼 연이어진 블록을 서로 다른 디스크에 흩어서 저장하고, 어떤 파일을 읽는다고 하면, 파일이 블록 4개로 구성된다고 하면, 파일이 블록 3개로 구성된다고 하면, 4개의 블록을 순차적으로 읽는 것이 아니라 각각 서로 다른 디스크 4개에서 4개의 블록을 읽음으로써 좀 시간이 빨라집니다. 또한 이러한 경우에 parity bit가 하나 있는데, 이 경우 어떻게 계산되냐면, bit-interleaved와 같이 4개의 디스크에서 똑같은 위치에 있는 4개의 비트들을 대상으로 parity를 계산합니다.

그런데 RAID 3와의 차이는 각 디스크에 저장된 블록의 비트들이 한 바이트의 일부가 아니라 다 다른 바이트에서부터 나온 내용입니다. 그러니까 각 비트들은 서로 상관없는 정들입니다. 그렇지만, 무조건 물리적으로 같은 위치에 있는 비트들만 따서 같은 위치의 패러티 비트에 저장합니다.

이런 식으로 4개의 디스크가 서로 관련 없는 정보라고 할지라도 똑같은 위치에 있는 정보들을 읽어서 같은 위치의 패러를 계산을 하는 방법이 RAID4입니다.

이렇게 하면, RAID3에서의 단점인 1011을 서로 다른 디스크에서 읽어서 모이는데까지 기다려야 하는데, 그런 것 필요없이 한 디스크에서 1011을 읽으면 됩니다. 그래서 파일 전체를 읽는데 훨씬 빨라진다는 장점이 있습니다.

각 디스크마다 별도의 입출력이 병렬적으로 진행할 수 있다는 장점이 있습니다.

 

8. RAID 5 (block-level distributed parity)

RAID 5는 RAID4와 같은데 다만 parity 값들을 모은 블럭들을 여러 디스크에 흩어 놓은 것입니다. 패러티 정보를 한 곳에만 모아놓으면, 패러티 디스크가 깨졌을 때, 전체에 영향을 주는데, 이렇게 분산시키면, 정보를 한 번에 잃는 위험을 피할 수 있는 장점이 있습니다.

 

9. RAID 6 (dual redundancy)

RAID 6는 RAID 5과 같이 parity값을 흩어뜨려 놓습니다. 그렇지만, 신뢰성을 높이기 위해서 같은 정보에 대해서 패러티를 두 번 계산해 놓는 것입니다. 즉, P(12-15)와 같은 것은 even parity이며, Q(12-15)는 odd parity로 홀수로 계산을 합니다. 같은 정보에 대해 짝수 패러티와 홀수 패러티를 중복 계산해 서로 다른 디스크에 흩어서 놓습니다. 여러 디스크에 분산시켜 놓지 않고, 한 개가 있을 때보다는 데이터의 안전성이 좋아집니다.

 

10. RAID 01, RAID 10

요즘 많이 쓰는 방법은 RAID 01, RAID 10이 있습니다.

RAID 01은 RAID 0 2개를 RAID 1으로 조합하는 것입니다.

따라서 Disk1에 A1 저장하고, Disk2에 A2저장하는데 미러식으로 해서 Disk3에도 A1, Disk4에도 A2를 저장합니다. 

RAID 10은 RAIDA 1로 만들어서 RAID 0으로 묶어놓습니다.

따라서 Disk 1과 Disk2에 내용을 미러식으로 정보를 중복 저장하며, Disk3,4에도 미러식으로 중복으로 내용을 저장합니다. RAID1을 통한 방법으로 모인 각각의 A1,A2는 RAID 0에 의해 묶어집니다.

이 두가지 성능은 RAID 10이 RAID 01보다 약간 더 빨리 접근할 수 있어 좋습니다.

 

 

 

 

 

 

 

 

 

'운영체제및실습' 카테고리의 다른 글

[운영체제및실습] 11주차 4회차: 메모리 파티셔닝  (0) 2025.05.26
[운영체제및실습] 11주차 3회차: 메모리관리 개요  (0) 2025.05.25
[운영체제및실습] 11주차 1회차: 디바이스 드라이버  (0) 2025.05.25
[운영체제및실습] 10주차 4회차: 디스크 스케줄링  (0) 2025.05.25
[운영체제및실습] 10주차 3회차 : I/O제어 : 인터럽트 I/O, DMA  (0) 2025.05.12
'운영체제및실습' 카테고리의 다른 글
  • [운영체제및실습] 11주차 4회차: 메모리 파티셔닝
  • [운영체제및실습] 11주차 3회차: 메모리관리 개요
  • [운영체제및실습] 11주차 1회차: 디바이스 드라이버
  • [운영체제및실습] 10주차 4회차: 디스크 스케줄링
soyun5
soyun5
개발블로그
  • soyun5
    soyun5
    soyun5
  • 전체
    오늘
    어제
    • 분류 전체보기 (67) N
      • 운영체제및실습 (14)
      • 프로그래밍언어개론 (1)
      • 데이터베이스 (0)
      • 클라우드 (0)
        • 2025 AWS Cloud 초급특강 (0)
      • 스터디 (23)
        • 2024하계모각코 (10)
        • 2024동계모각코 (13)
      • 웹개발 (0)
        • HTML, CSS, 자바스크립트 (0)
      • PS (0)
        • 백준 (0)
        • 프로그래머스 (0)
      • 앱개발 (0)
        • flutter (0)
      • C (0)
      • java (0)
        • 자료구조 (0)
        • 알고리즘 (0)
      • 깃허브 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    운영체제
    Directory
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
soyun5
[운영체제및실습] 11주차 2회차: RAID
상단으로

티스토리툴바