Notice
Recent Posts
Recent Comments
Link
반응형
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붕어의 개발 기록

RAID 본문

공부/네트워크

RAID

은붕어_ 2025. 11. 20. 18:00
반응형

NAS가 쓰고 싶어졌습니다. 그래서 하드 구성을 어떻게 할까 고민하다보니 옛날옛적 정보처리기사를 공부할 때 봤던, RAID 개념이 나오더군요... 드디어 공부한걸 써먹을때가 왔구나 하고 레이드에 대한 정리글을 작성했습니다. 

 

RAID란?

  • Redundant Array of Independent Disk
  • 여러개의 디스크를 물리적 혹은 논리적으로 하나의 디스크로 묶어서 사용하는 저장 방법
RAID 레벨 데이터 분산 방식 필요한 하드 개수 패리티(Parity) 저장 고장 시 데이터 복구 가능 여부 읽기/쓰기 속도 유효 용량 비율 장점/단점 일반적 사용 사례 데이터 저장 방식
RAID 0 (Striping) 블록 단위 스트라이핑 2개 이상 ❌ 없음 ❌ 불가능 — 한 개만 고장나도 전체 데이터 손실 🔼 매우 빠름
/🔼 빠름
100% 고속 데이터 접근
/하나만 고장나도 전체 데이터 손실
캐시, 임시 저장, 영상 편집 등 데이터를 조각내서 두 하드에 나눠 저장
RAID 1 (Mirroring) 동일 데이터 복제 짝수 단위 ❌ 없음 ✅ 가능 — 한 쪽이 망가져도 나머지에서 복원 🔼 빠름
/➖ 약간 느림
50% 데이터 안전성 높음/용량 효율 낮음 서버 시스템, NAS, 중요 문서 두 하드에 완전히 같은 데이터 복제
RAID 2 비트 단위 스트라이핑 7개 이상 ✅ 해밍 코드 ✅ 가능 — 오류 검출/수정 가능 🔽 느림
/🔽 느림
(N-1)/N 이론적 오류 검출 정확도/비효율적, 거의 사용 안 함 교육/연구용 데이터는 여러 하드에 비트 단위로 쪼개 저장, 한 하드에 해밍 코드(오류 검출용) 저장
RAID 3 바이트 단위 스트라이핑 3개 이상 ✅ 전용 패리티 디스크 ✅ 가능 — 1개 하드 고장까지 복구 가능 🔼 빠름
/🔽 느림 (패리티 병목)
(N-1)/N 연속 데이터 처리 우수/단일 패리티 디스크 병목 대형 파일 처리 (비디오) 여러 하드에 바이트 단위로 분산 저장, 한 하드는 패리티(복구용 데이터) 전용
RAID 4 블록 단위 스트라이핑 3개 이상 ✅ 전용 패리티 디스크 ✅ 가능 — 1개 고장 복구 가능 🔼 빠름
/🔽 느림 (패리티 병목)
(N-1)/N 무결성 검증 가능/RAID3과 유사, 병목 대용량 읽기 중심 서버 RAID 3과 유사하지만 블록 단위 분산 저장, 패리티 하드 1개
RAID 5 블록 단위 스트라이핑 3개 이상 ✅ 분산 패리티 ✅ 가능 — 1개 고장까지 복구 가능 🔼 빠름
/➖ 중간
(N-1)/N 읽기 성능+복구 균형/복구 시간 길고 패리티 오버헤드 일반 서버, NAS, DB 데이터와 패리티를 모든 하드에 분산 저장
RAID 6 블록 단위 스트라이핑 4개 이상 ✅ 이중 패리티 ✅ 가능 — 2개 하드 고장까지 복구 가능 🔼 빠름
/🔽 느림
(N-2)/N 높은 내결함성/쓰기 성능 저하 미션 크리티컬 서버, 백업 NAS RAID 5처럼 분산 저장 + 패리티 2개

 


용어 설명

Stripe (스트라이프) 각 디스크의 블록으로 이루어진 데이터 한 줄로, 스트라이프n은 각 디스크의 n번째 블록으로 이루어진 데이터 한 줄
Stripe size (스트라이프 크기) 각 디스크의 블록 크기 × 데이터 디스크 수
Stripe depth (또는 chunk size) 한 디스크 내에서 스트라이프에 해당하는 블록의 크기 (블록 크기)
Stripe width 데이터가 실제로 분산되는 디스크 개수 (패리티 제외)

 

그래서 패리티비트랑 해밍코드가 뭔데?

https://archiventum.tistory.com/79

예시


  • 원본 20비트 1010101010101010를 예시로 하겠습니다.
  • N1 N2 N3 N4 N5 N6(PADDING) = 1010 | 1010 | 1010 | 1010 | 1010 | 0000
  • 편의를 위해 5개의 니블로 분리하겠습니다. 실제로는 0,1,4,5,6은 블록 단위 / 2는 비트 단위 / 3은 바이트 단위로 구성됩니다.

레이드 0

최소 2개의 디스크로 구성됩니다.

Disk1: N1, N3, N5   = 1010 | 1010 | 1010
Disk2: N2, N4       = 1010 | 1010
Parity: 없음

때문에 1개의 하드디스크가 손상되는 경우 복구 자체가 불가능합니다.


레이드 1

최소 2개 단위의 디스크로 구성됩니다.

Disk1: N1 N2 N3 N4 N5 = 10101010101010101010
Disk2: N1 N2 N3 N4 N5 = 10101010101010101010
Parity: 없음

때문에 1개의 하드디스크가 손상되는 경우 동일한 데이터를 가진 하드디스크가 있기 때문에 복구 가능하지만, 사용 가능한 용량이 50%입니다.


레이드 2

RAID 2는 구현이 드물고, ECC(해밍) 설계에 따라 디스크 수가 달라집니다. 예시에서는 Hamming(7,4)를 사용합니다.

  • Hamming(7,4) = 4데이터디스크+3패리티디스크의 구조

각 니블에 대해 해밍 패리티(1,2,4번 위치) 계산은 다음과 같습니다.

  • 데이터 비트 위치: 3(d1), 5(d2), 6(d3), 7(d4)
  • 패리티 비트: 1(p1), 0(p2), 1(p3)

예시에서는 모든 니블로 구분한 데이터의 값이 같으므로 같은 값이 저장 됨.

비트 위치 D1 D2 D3 D4 P1 P2 P3

1 1 0 1 0 계산된 해밍 계산된 해밍 계산된 해밍
2 1 0 1 0 계산된 해밍 계산된 해밍 계산된 해밍
3 1 0 1 0 계산된 해밍 계산된 해밍 계산된 해밍

때문에 1개의 디스크 고장(단일 비트 오류 수준)까지 복구 가능합니다. 하지만 효율이 너무 떨어져서 실질적으로는 이론상 있는 개념입니다.

  • 실제 저장되는 데이터는 해밍비트를 포함해야돼서 100GB를 Hamming(7,4)를 통해 저장하면 총 175GB가 저장되게 됩니다.
  1. 해밍 코드와 다른 데이터 비트들을 읽음
  2. 비트 단위 XOR 계산으로 잘못된 비트 위치를 파악
  3. 손상된 디스크의 해당 비트를 다시 계산해 복원
    • 복구는 정교하지만, 디스크 단위로 병렬 접근이 어려워 실제 제품에는 거의 사용되지 않음

레이드 3(단일 패리티 디스크 복구)

최소 3개 디스크로 구성되며 2개는 데이터를 저장하는데, 1개는 패리티비트를 저장하는데 사용됩니다.

EX.text = "ABCDEFG"
        
         D1 D2  D3
Stripe 1: A B P=0000
Stripe 2: C D P=0000
Stripe 3: E F P=1010

때문에 1개 디스크가 손상되어도 복구가 가능합니다. 하지만 전용 패리티 디스크가 병목이 되는 단점이 있습니다.

파일을 입력할때 1바이트씩 나눠서 저장되기 때문에 파일을 읽을때도 모든 디스크를 사용하여 1바이트씩 읽어야함.

  • 어? 레이드 4에서도 똑같은거 아닌가?
    • 레이드3은 연속적인 데이터를 분리했기때문에 읽을 때 모든 데이터가 필요하지만 레이드 4에서는 해당하는 데이터가 담긴 블록만 확인하면 됨
  1. 남은 모든 디스크의 데이터를 블록 단위로 읽음
  2. XOR 연산을 수행하여 손실된 블록을 계산
  3. 새 디스크에 계산된 블록을 다시 씀
    • 연속 I/O(대형 파일)에서는 좋지만, 패리티 디스크가 병목이므로 현대 시스템에서는 거의 안 씀

레이드 4(블록 단위 단일 패리티 복구)

최소 3개 디스크로 구성되며 2개는 데이터를 저장하는데, 1개는 패리티비트를 저장하는 디스크로 사용됩니다.

레이드 3과 비슷하지만 접근방식이 블록단위입니다.

						  D1        D2        D3(P)
Stripe 1: [N1=1010], [N2=1010], [P=0000]
Stripe 2: [N3=1010], [N4=1010], [P=0000]
Stripe 3: [N5=1010], [N6=0000], [P=1010]

때문에 1개 디스크(데이터 패리티 어느쪽이든)가 손상되어도 복구가 가능합니다.

복구 순서

  1. 남아 있는 디스크의 동일 위치 블록들을 모두 읽음
  2. XOR 연산으로 패리티 블록과 비교
  3. 손실된 디스크의 블록을 재계산 후 새 디스크에 씀
    • RAID 3보다 랜덤 읽기 성능은 높지만, 패리티 디스크 병목 문제는 동일

레이드 5(분산 패리티 복구)

최소 3개 디스크로 구성되며 레이드 4와는 다르게 패리티비트가 분산되어 저장됩니다.

              D1        D2        D3
Stripe 1:  [N1=1010] [N2=1010] [P=0000] → Parity on Disk3
Stripe 2:  [N3=1010] [P=0000] [N4=1010] → Parity on Disk2
Stripe 3:  [P=1010] [N5=1010] [N6=0000] → Parity on Disk1

때문에 1개 디스크가 손상되어도 복구가 가능합니다.

  1. 손실된 디스크를 새 것으로 교체
  2. RAID 컨트롤러가 자동으로 “리빌드(Rebuild)” 수행
  3. 손실된 디스크의 데이터를 나머지 디스크들의 데이터 + 패리티 ****XOR로 계산
    • 복구 중에는 성능 크게 저하됨.
    • 복구 도중 다른 디스크가 손상되면 전체 데이터 손실 위험 존재

레이드 6(이중 패리티 복구 (P, Q 블록))

최소 4개의 디스크로 구성되며 데이터디스크 2개, 패리티를 P와 Q로 분산하여 2개의 디스크에 저장합니다. (P = XOR, Q = Reed–Solomon(다른 다항 기반))

             D1         D2             D3             D4
Stripe 1: [N1=1010], [N2=1010],     [P=0000],  [Q=RS(N1,N2)]
Stripe 2: [P=0000],  [Q=RS(N3,N4)], [N3=1010],     [N4=1010]
Stripe 3: [N6=0000], [P=1010],      [Q=RS(N6,N5)], [N5=1010]

때문에, 2개의 디스크가 손상되어도 복구가 가능합니다.

단순 XOR(P) + Reed-Solomon 코드(Q)를 이용해 2개의 디스크 손실 복구

  1. 새 디스크를 삽입
  2. 컨트롤러가 P, Q 패리티를 이용해 손실 블록을 수학적으로 계산 (Reed-Solomon 알고리즘)
  3. 새 디스크에 데이터 재작성
    • 복구 안정성은 매우 높지만, 복구 속도 느림 (패리티 2배 계산 필요)
반응형

'공부 > 네트워크' 카테고리의 다른 글

패리티비트와 해밍코드  (0) 2025.11.13