붕어의 개발 기록
RAID 본문
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가 저장되게 됩니다.
- 해밍 코드와 다른 데이터 비트들을 읽음
- 비트 단위 XOR 계산으로 잘못된 비트 위치를 파악
- 손상된 디스크의 해당 비트를 다시 계산해 복원
- 복구는 정교하지만, 디스크 단위로 병렬 접근이 어려워 실제 제품에는 거의 사용되지 않음
레이드 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에서는 해당하는 데이터가 담긴 블록만 확인하면 됨
- 남은 모든 디스크의 데이터를 블록 단위로 읽음
- XOR 연산을 수행하여 손실된 블록을 계산
- 새 디스크에 계산된 블록을 다시 씀
- 연속 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개 디스크(데이터 패리티 어느쪽이든)가 손상되어도 복구가 가능합니다.
복구 순서
- 남아 있는 디스크의 동일 위치 블록들을 모두 읽음
- XOR 연산으로 패리티 블록과 비교
- 손실된 디스크의 블록을 재계산 후 새 디스크에 씀
- 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개 디스크가 손상되어도 복구가 가능합니다.
- 손실된 디스크를 새 것으로 교체
- RAID 컨트롤러가 자동으로 “리빌드(Rebuild)” 수행
- 손실된 디스크의 데이터를 나머지 디스크들의 데이터 + 패리티 ****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개의 디스크 손실 복구
- 새 디스크를 삽입
- 컨트롤러가 P, Q 패리티를 이용해 손실 블록을 수학적으로 계산 (Reed-Solomon 알고리즘)
- 새 디스크에 데이터 재작성
- 복구 안정성은 매우 높지만, 복구 속도 느림 (패리티 2배 계산 필요)
'공부 > 네트워크' 카테고리의 다른 글
| 패리티비트와 해밍코드 (0) | 2025.11.13 |
|---|
