RAID & Redundant Storage Physics
여러 개의 물리 저장 장치를 하나로 묶어 성능을 높이거나 데이터 손실을 방지하는 스트라이핑, 미러링 및 패리티 연산의 물리 구조를 다루는 학습 노드입니다.
Article
M
Me
hyunyoun's Blog
operating-systems-system-mechanicsoperating-systemssystem-mechanicsstoragei-o-mechanicsraidredundant-storage-physicsos-storage10 min read
1. Overview
RAID와 중복 스토리지 물리학(RAID & Redundant Storage Physics)은 단일 디스크가 언제든 장애(Failure)를 일으킬 수 있다는 전제를 바탕으로, 여러 디스크를 XOR 수학과 병렬 배치로 묶어 단일 장애점(Single Point of Failure)을 줄이고 데이터를 복구 가능하게 만드는 스토리지 신뢰성 공학입니다.
학습자는 03-03-04 에서 다뤘던 RAID 개요를 확장해, **하드웨어 RAID 컨트롤러(전용 ASIC 칩)**와 소프트웨어 RAID(Linux mdadm/ZFS)의 차이를 분석합니다. 나아가 RAID 6의 이중 패리티(Dual Parity)가 XOR(P)와 갈로아 필드(Galois Field, GF(2^8)) 다항식(Q)을 사용해 두 개의 디스크 장애를 복구하는 원리를 살펴봅니다. 마지막으로 ZFS/Btrfs의 128비트 체크섬(Checksum) 기반 비트 부패(Bit Rot) 감지 아키텍처를 이해하여 엔터프라이즈급 데이터 내구성을 설계하는 기준을 세웁니다.
2. Scope & Boundaries
In-Scope
- RAID 깊이 있는 수학 (RAID Internals): RAID 5 (XOR Parity), RAID 6 (P+Q, 이중 패리티 / Galois Field 다항식), RAID Z(ZFS 구현), 스트라이프 폭(Stripe Width)과 청크 사이즈(Chunk Size) 최적화.
- 하드웨어 vs 소프트웨어 RAID (Implementation Spectrum): 전용 컨트롤러(BBU Cache, Write-back 캐시), 리눅스 mdadm 소프트웨어 RAID, ZFS/Btrfs 통합 RAID.
- 리빌딩 물리학 (Rebuild Mechanics): 핫 스페어(Hot Spare), 리빌드 중 부하(Rebuild I/O Storm), 리빌드 창 취약성(Vulnerability Window).
- 침묵하는 데이터 부패 (Silent Data Corruption): Bit Rot, 섹터 부패(URE, Uncorrectable Read Error), ZFS 스크러빙(Scrubbing).
Out-of-Scope
- LVM 논리 볼륨 구성 자체: 물리 볼륨(PV)에서 논리 볼륨(LV)을 잘라내는 운영체제 계층 03-03-04. Persistence & Storage Analytics 영역.
- 분산 파일 시스템(Ceph, GlusterFS): 수십 대의 서버에 걸쳐 데이터를 분산하는 클러스터 스토리지 05-03-02. Distributed Storage 영역.
Boundaries
- RAID vs. Erasure Coding: RAID는 디스크 개수 단위의 블록 레벨 중복을 제공하는 방식이라면, 클라우드 오브젝트 스토리지(S3)가 쓰는 소거 코드(Erasure Coding)는 데이터를 k개 조각 + m개 패리티로 나누어 일부 노드가 장애를 일으켜도 k개 조각만 있으면 복구할 수 있게 하는 더 유연한 대규모 중복화 방식입니다.
3. Counterexample
- RAID는 백업이 아니다 (The RAID is Not Backup Fallacy): "RAID 1(미러링)을 쓰니까 데이터가 2개다"라는 이유로 별도 백업을 생략하면 위험합니다. RAID 1은 "지금 이 순간"의 데이터를 두 디스크에 동시에 미러링합니다. 실수로
rm -rf /를 실행하거나 랜섬웨어가 모든 파일을 암호화하면, 그 삭제/암호화 명령도 양쪽 디스크에 동시에 반영됩니다. 장애 이전 특정 시점으로 되돌리는 Point-in-time Recovery는 RAID가 아니라 백업과 스냅샷의 역할입니다. - 리빌드 중 연쇄 장애 (Rebuild Cascade Failure): 14TB짜리 하드디스크 4개를 RAID 5로 묶고 1번 디스크 장애 후 교체 디스크로 리빌드를 시작하면, 나머지 3개 디스크에서 대량 데이터를 읽어 패리티를 역산해야 합니다. 이 과정은 긴 시간 동안 높은 I/O 부하(I/O Storm)를 만들며, 오래된 다른 디스크에서 URE(읽기 불가 오류)가 발생하면 RAID 5는 두 개의 동시 장애를 복구할 방법이 없어 데이터 손실로 이어질 수 있습니다.
4. Prerequisites
- XOR 논리 연산 (Basic):
A XOR B XOR B = A라는 XOR의 역원성이 RAID 5 패리티 복구의 수학적 핵심입니다. (01-01-02 Binary & Logic) - RAID 기본 개념 (Required): RAID 0, 1, 5의 스트라이핑/미러링/패리티 기초 구조를 알고 있어야 합니다. (03-03-04 Persistence & Storage Analytics)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: RAID 5 XOR 패리티 복구 역학 (RAID 5 Internals)
- Why to Learn: RAID 5가 디스크 1개 장애를 XOR 패리티로 복구하는 원리가 실제로 어떤 비트 연산으로 동작하는지 이해하기 위해서입니다.
- What to Learn:
- Concepts: 분산 패리티(Distributed Parity), 패리티 스트라이프(Parity Stripe), XOR 역원성, 스트라이프 폭(Stripe Width).
- Skills: 패리티 재계산(Read-Modify-Write Penalty) 비용 분석, 쓰기 성능 패널티.
- Tools: 리눅스
mdadm --detail,cat /proc/mdstat. - Trade-offs: RAID 5는 디스크 N개 중 1개 용량을 패리티로 사용해 디스크 1개 장애를 복구할 수 있지만, 데이터 1KB를 쓸 때도 '기존 패리티 읽기 새 패리티 계산 데이터 쓰기 패리티 쓰기'의 4 I/O 증폭(Read-Modify-Write)이 발생합니다. 이 때문에 소규모 랜덤 쓰기 성능이 낮아질 수 있습니다.
- How to Learn:
- 1단계: 데이터
D1=1010, D2=1100, D3=0011을 XOR하여 패리티P = D1 XOR D2 XOR D3 = 0101을 계산하고, 4개 스트라이프(3 Data + 1 Parity)에 분산 저장하는 초기 레이아웃을 분석합니다. - 2단계:
D2디스크에 장애가 발생했을 때, 남아 있는D1=1010,D3=0011,P=0101을 XOR하면1010 XOR 0011 XOR 0101 = 1100으로D2값을 역산할 수 있음을 확인합니다.
- 1단계: 데이터
- Implement: 파이썬
RAID5_Stripe(D1, D2, D3)클래스.write(d1, d2, d3)시P = d1^d2^d3자동 계산 저장.fail_disk(index)메서드로 원하는 디스크를None으로 표시한 뒤,recover()루틴이 나머지 3개(포함 P)를 XOR 역산하여 원본 값을 출력하는 비트 레벨 복구 증명.
Recommended
Core Topic 02: 이중 패리티와 RAID 6 갈로아 필드 (Dual Parity P+Q)
- Why to Learn: 대용량 HDD(16TB) 환경에서는 RAID 5 리빌드 중 두 번째 디스크 장애가 발생할 위험이 커집니다. XOR 패리티 하나로는 복구할 수 없는 두 디스크 동시 장애를 갈로아 필드 수학으로 다루기 위해서입니다.
- What to Learn:
- Concepts: RAID 6 P+Q 패리티, 갈로아 필드(GF(2^8)), Reed-Solomon 코드, 이중 패리티 계산.
- Skills: GF 원소 곱셈(LFSR, Log/Antilog 테이블 활용), 연립방정식 풀이(행렬 역산).
- Tools: 리눅스 커널
lib/raid6/소스 코드. - Trade-offs: RAID 6는 디스크 2개분의 패리티(P, Q)를 저장해 두 디스크 장애까지 복구할 수 있지만, 모든 쓰기 연산에서 P와 Q 두 개의 패리티를 계산해야 하므로 RAID 5보다 쓰기 오버헤드가 크고 리빌드 시간도 길어집니다.
- How to Learn:
- 1단계: P 패리티 (XOR): 일반 RAID 5와 동일.
P = D1 XOR D2 XOR D3. - 2단계: Q 패리티 (Galois Field): 각 데이터 블록에 GF(2^8) 원시 원소의 거듭제곱을 곱하여 합산.
Q = α^0*D1 XOR α^1*D2 XOR α^2*D3. 여기서α는 GF(2^8)의 생성원(Generator)이며, GF 내 모든 곱셈은 기약 다항식(Irreducible Polynomial) 에 대한 나머지 연산으로 이뤄져 '덧셈 XOR 곱셈'이 닫힌 집합(Closed Field)을 형성합니다.
- 1단계: P 패리티 (XOR): 일반 RAID 5와 동일.
- Implement: 8비트(GF(2^8)) 갈로아 필드 곱셈 테이블(Lookup Table) 파이썬 생성기 구축.
D1=0xAB,D2=0xCD를 받아 P(XOR)와 Q(GF 가중 XOR)를 계산합니다.D1과D2디스크를None으로 표시한 뒤,recover_two(missing_indices=[0,1], P, Q, D3)함수에서 연립방정식 GF-역산으로 원본D1, D2를 복구하는 이중 복구 데모를 만듭니다.
Practical
Core Topic 03: 하드웨어 RAID와 소프트웨어 RAID 비교 (HW vs SW RAID)
- Why to Learn: RAID 컨트롤러 카드를 50만 원 주고 사야 하는지, 아니면 리눅스
mdadm과 CPU를 쓰면 되는지 엔터프라이즈 스토리지 예산을 책정할 때 정확한 근거로 아키텍처 결정을 내리기 위해서입니다. - What to Learn:
- Concepts: 하드웨어 RAID 컨트롤러, BBU(Battery Backup Unit), 전면 캐시(Write-through vs Write-back Cache), 소프트웨어 RAID(
mdadm, ZFS). - Skills: 캐시 도움(Cache-Assisted Write)의 Write I/O 속도 향상 분석.
- Tools: 리눅스
mdadm --create /dev/md0,zpool create. - Trade-offs: 전용 하드웨어 RAID 컨트롤러는 자체 CPU와 배터리 캐시(BBU)를 갖추어 전원 장애 시 캐시 데이터를 보존하고 쓰기 성능을 높일 수 있습니다. 하지만 컨트롤러 칩이 고장 나면 동일 펌웨어/버전 컨트롤러가 필요할 수 있어 벤더 종속성(Vendor Lock-in)과 비용 문제가 생깁니다.
mdadm소프트웨어 RAID는 표준 디스크를 다른 시스템에서도 읽기 쉬운 이식성(Portability)이 있지만, 패리티 계산이 서버 CPU에서 이뤄져 리빌드 중 CPU 부하가 커질 수 있습니다.
- Concepts: 하드웨어 RAID 컨트롤러, BBU(Battery Backup Unit), 전면 캐시(Write-through vs Write-back Cache), 소프트웨어 RAID(
- How to Learn:
- 1단계: HW RAID BBU 캐시: 1000개의 소규모 Write 요청이 들어올 때, 컨트롤러 카드가 이를 배터리 캐시에 쌓아두고 완료 ACK를 OS에 보낸 뒤, 백그라운드에서 묶어서(Coalescing) 디스크로 내려보내는 Write-back 가속 기법을 분석합니다.
- 2단계: ZFS 통합 스택:
zpool이 RAID 기능, 파일 시스템, 체크섬을 하나의 스택으로 통합하여 별도 컨트롤러 없이 소프트웨어로 RAID-Z(5에 해당), RAID-Z2(6에 해당)를 구현하는 신뢰성 구조를 살펴봅니다.
- Implement:
SoftwareRAID_Controller(disks, mode)파이썬 클래스.RAID5모드에서 패리티 계산을time.sleep(0.01)(CPU 연산 지연 모사)으로 소모하고,RAID5_with_Cache모드에서는 Write를Cache_Buffer에만 넣고 즉각 ACK를 반환하며 1초마다 별도 스레드가flush_to_disk()하는 성능 비교 Write 처리량(Throughput, ops/sec) 로그 수치 대비.
Advanced
Core Topic 04: 비트 부패와 체크섬 기반 ZFS 스크러빙 (Bit Rot & Scrubbing)
- Why to Learn: 디스크에 데이터를 장기간 저장하는 동안 1비트가 조용히 뒤집히는 침묵의 데이터 부패(Silent Data Corruption, Bit Rot)가 발생할 수 있습니다. 복구 시점에 손상된 백업이나 데이터 블록을 발견하는 상황을 줄이기 위해 체크섬과 스크러빙을 이해해야 합니다.
- What to Learn:
- Concepts: 비트 부패(Bit Rot), URE(Uncorrectable Read Error), ZFS 128비트 체크섬, 스크러빙(Scrubbing), COW(Copy-On-Write) 파일 시스템.
- Skills:
zpool scrub주기 스케줄링, 체크섬 알고리즘(SHA-256/Fletcher4) 선택. - Tools:
zpool status -v(오류 카운터 확인),smartctl -a /dev/sda. - Trade-offs: ZFS가 모든 데이터 블록의 체크섬을 별도 메타데이터 트리(DMU)에 저장하면 비트 1개가 뒤집혀도 감지하고 RAID를 통해 복구할 수 있습니다. 대신 모든 읽기/쓰기 시 체크섬 계산과 검증이라는 CPU 부담이 붙고, COW(복사 후 쓰기) 특성상 파일 조각이 누적되어 장기적으로 파편화(Fragmentation)가 생길 수 있습니다.
- How to Learn:
- 1단계: 하드디스크 플래터의 자성 입자 1개가 우주선(Cosmic Ray) 에너지나 자기 교란으로 뒤집히면, 체크섬이 없는 파일 시스템에서는 손상된 비트를 그대로 읽을 수 있습니다. ZFS는 저장 시 기록한 SHA 체크섬과 읽을 때 재계산한 체크섬을 비교하여 무결성 오류를 감지합니다.
- 2단계:
zpool scrub은 주기적으로 (예: 매주) 모든 블록의 체크섬을 재검증하고, 오류를 발견하면 RAID-Z에서 다른 디스크의 패리티를 활용해 손상된 블록을 자동 자가 치유(Self-Healing)하는 스크러빙 파이프라인을 실행합니다.
- Implement: 파이썬
ZFS_Block_Store시뮬레이터.write(key, data)시hashlib.sha256(data)체크섬을 데이터와 함께 쌍으로 저장.corrupt_bit(key)메서드로 저장된 데이터의 1바이트를 강제 변형(Bit Flip).scrub()메서드 실행 시 전체 블록을 순회하며 재계산 해시와 저장 해시를 비교, 불일치 블록을 발견하면RAID_Z.recover(key)를 호출해 복원하고print("Bit Rot Detected & Fixed: {key}")로그를 출력하는 자가 치유 데모.
7. Terminology
8. References
Primary
- [P2] SWEBOK v4.0 - Software Construction / Runtime Efficiency (Execution) — Structural context.
- [P1] CS2023 - OS/Operating System Principles (Physical Storage) — Core requirements.
Secondary
- [The RAID Book] — Comprehensive technical reference.
- [High Performance Mass Storage and Parallel I/O] — Striping and performance focus.
Industry
- [Intel: RAID Levels and Benefits] — Hardware RAID standard guide.
- [NetApp: RAID-DP and Erasure Coding explained] — Enterprise storage standards.
9. Final Checklist
Primary
- 'RAID 0'과 'RAID 1'의 데이터 기록 시 물리적 헤드의 움직임과 대역폭의 차이를 설명 가능한가? (P1)
- '패리티(Parity)' 비트가 어떻게 단 하나의 추가 비트만으로 소실된 물리 데이터를 복원해내는지 XOR 수리 논리로 입증할 수 있는가? (P1)
Secondary
- RAID 5 구성 시, 디스크 개수가 많아질수록 '읽기 성능'은 좋아지지만 '쓰기 성능'은 왜 패리티 오버헤드 때문에 물리적으로 정체되는지 설명할 수 있는가?
- 시스템 설계 시, 'RAID 10'이 왜 'RAID 01'보다 물리적 장애 복구 안정성(Fault isolation) 면에서 유리한지 도출할 수 있는가?
Industry
- 금융권 데이터 센터 구축 시, 서비스 중단 없는 디스크 교체를 위한 'Hot Swapping' 하드웨어 시퀀스와 OS 인터페이스를 제안할 수 있는가? (SFIA)
- 100TB 이상의 대규모 페타바이트 시스템에서 RAID 6보다 Erasure Coding이 왜 물리적-경제적으로 필수적인지 기술할 수 있는가?