Persistence & Storage Analytics
휘발성 메모리 너머에 데이터를 영구적으로 기록하는 보증 기술과, 저장소의 수명과 성능을 분석하여 데이터 유실을 방지하는 신뢰성 공학을 다루는 학습 노드입니다.
Article
M
Me
hyunyoun's Blog
operating-systems-system-mechanicsoperating-systemssystem-mechanicsmemory-managementvirtualization-physicspersistencestorage-analyticsos-storage9 min read
1. Overview
영구 저장과 스토리지 분석(Persistence & Storage Analytics)은 전원이 차단(Power-off)되면 사라지는 휘발성 RAM과 달리, 데이터를 디스크나 NAND 플래시에 지속적으로 기록하고 장애 상황에서도 복구 가능성을 높이는 스토리지 신뢰성 공학입니다.
학습자는 여러 하드디스크를 병렬로 묶어 성능을 높이거나 장애 시 데이터를 복구하는 RAID(Redundant Array of Independent Disks) 구조를 이해합니다. 이어 고정 파티션의 한계를 줄이고 운영 중에도 용량을 확장할 수 있게 하는 **LVM(Logical Volume Manager)**의 추상화 계층을 살펴보며, 클라우드 시대 블록 스토리지 확장의 기반을 익힙니다.
2. Scope & Boundaries
In-Scope
- RAID 기하학 (Redundancy & Striping): RAID 0(Striping), RAID 1(Mirroring), RAID 5(Parity), RAID 10 구조와 장단점, 패리티 비트(XOR) 복원 수학.
- LVM (Logical Volume Manager): PV(Physical Volume), VG(Volume Group), LV(Logical Volume) 3단계 추상화, 런타임 볼륨 리사이징, LVM 스냅샷(Snapshot).
- 스토리지 분석 및 프로파일링 (Storage Analytics): IOPS, Throughput(대역폭), Latency(지연 시간), 랜덤/순차 I/O 패턴.
- 데이터 무결성 검증 (Integrity): 체크섬(Checksum), 데이터 부패(Silent Data Corruption, Bit Rot) 방어, ZFS/Btrfs의 카피-온-라이트(CoW) 개념 확장.
Out-of-Scope
- 네트워크 스토리지 파일 프로토콜: NFS, SMB/CIFS, iSCSI 등 네트워크를 넘나드는 스토리지 통신 규약 자체 04-01-02. Network Layer & Routing 영역.
- 디스크 플래터/NAND 플래시의 전기적 구조: 전자가 플로팅 게이트에 갇혀(Fowler-Nordheim) 기록되는 물리 회로 기작 03-04-01. Disk, SSD & Magnetic Physics 영역.
Boundaries
- Filesystem (03-03-03) vs. Storage Volume (03-03-04): 파일 시스템(03-03-03)이 단일 블록 장치 위에 폴더와 파일 구조를 배치하는 계층이라면, LVM/RAID(03-03-04)는 여러 물리 장치를 묶거나 복제해 파일 시스템이 사용할 가상 블록 장치를 제공하는 추상화 계층입니다.
3. Counterexample
- RAID 0의 속도와 장애 위험 (The Striping Russian Roulette): 서버 디스크 4개를 RAID 0(스트라이핑)으로 묶으면 읽기/쓰기 처리량은 높아질 수 있지만, RAID 0은 데이터를 여러 디스크에 분산 저장할 뿐 중복 저장을 제공하지 않습니다. 4개 중 1개 디스크에 장애가 발생하면 일부 조각만 사라지는 것이 아니라 파일 전체의 일관성이 깨져 전체 볼륨 복구가 어려워질 수 있습니다.
- LVM 없는 전통 파티션의 용량 한계 (Static Partition Wall): 리눅스 설치 시
/dev/sda1에/home파티션을 100GB로 고정해 두면, 나중에 용량이 부족해졌을 때 새 1TB 디스크를 추가하더라도 기존/home에 자연스럽게 합치기 어렵습니다. LVM을 사용하면 새 디스크를 볼륨 그룹(VG)에 추가하고lvextend로 논리 볼륨을 확장할 수 있습니다.
4. Prerequisites
- 블록 디바이스 기초 (Basic): 파일 시스템이 디스크를 512바이트나 4KB짜리 블록 덩어리로 썰어서 통신한다는 커널 I/O 스택의 이해가 필요합니다. (03-03-02 Page Cache & I/O Stack)
- 비트 단위 연산 (Basic): RAID 5의 핵심인 두 비트가 다르면 1을 반환하는 배타적 논리합(XOR)의 부울 대수 수학 원리를 알아야 패리티 복원을 이해할 수 있습니다. (01-01-02 Binary & Logic Math)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: RAID 0과 RAID 1, Striping vs Mirroring
- Why to Learn: 하드디스크 1개의 순차 처리량 한계를 여러 디스크의 병렬 처리로 보완하거나, 미러링으로 장애 대응력을 높이는 RAID 기본 구조를 이해하기 위해서입니다.
- What to Learn:
- Concepts: RAID(Redundant Array of Independent Disks), 스트라이핑(Striping, RAID 0), 미러링(Mirroring, RAID 1), 블록 크기(Chunk Size).
- Skills: I/O 병렬 처리, 고가용성(High Availability, Fault Tolerance) 설계.
- Tools: 리눅스
mdadm소프트웨어 RAID 구성툴. - Trade-offs: **RAID 0(Striping)**은 100바이트를 하드 4개에 25바이트씩 병렬 저장해 처리량을 높일 수 있지만, 하드 하나에 장애가 생기면 전체 데이터 일관성이 깨질 수 있습니다. **RAID 1(Mirroring)**은 100바이트를 하드 2개에 동일하게 기록해 복구 가능성을 높이지만, 1TB 하드 2개를 사용해도 실사용 용량은 1TB가 됩니다.
- How to Learn:
- 1단계: 스트라이핑(RAID 0): 파일 "HELLO WORLD"가 OS 커널을 통과할 때 볼륨 레이어가 이를 여러 조각으로 나누어
H,E,L은 1번 하드로,L,O,은 2번 하드로 기록하는 병렬 저장 방식을 확인합니다. - 2단계: 미러링(RAID 1): "HELLO"가 들어오면 1번 하드와 2번 하드에 동일한 복사 명령을 보내고, 1번 하드 장애(Failure) 시 2번 하드에서 같은 데이터를 읽어 서비스를 이어가는 흐름을 살핍니다.
- 1단계: 스트라이핑(RAID 0): 파일 "HELLO WORLD"가 OS 커널을 통과할 때 볼륨 레이어가 이를 여러 조각으로 나누어
- Implement: 파이썬
RAID0,RAID1가상 클래스 시뮬레이터를 만듭니다. 입력 배열[1,2,3,4,5,6]을RAID0객체에.write()하면DiskA=[1,3,5], DiskB=[2,4,6]으로 나누어 저장하고,DiskA리스트 삭제(del) 시 데이터 복원이 불가능해지는Raise DataCorruption로그를 출력합니다.
Recommended
Core Topic 02: RAID 5 패리티와 XOR 복구 (XOR Parity)
- Why to Learn: RAID 1보다 더 높은 실사용 용량을 유지하면서도 단일 디스크 장애를 복구할 수 있는 RAID 5의 XOR 패리티 구조를 이해하기 위해서입니다.
- What to Learn:
- Concepts: 패리티 비트(Parity Bit), 배타적 논리합(XOR), RAID 5 분산 패리티 구조, RAID 6(이중 패리티).
- Skills: 핫 스페어(Hot Spare) 디스크 리빌딩(Rebuilding), Read-Modify-Write 오버헤드 분석.
- Tools: XOR 진리표 계산.
- Trade-offs: 하드 4개(각 1TB)를 RAID 5로 묶으면 3TB를 사용하면서도 디스크 1개 장애를 복구할 수 있습니다. 대신 데이터를 덮어쓸 때 기존 패리티를 다시 계산해야 하므로 Read-Modify-Write에 따른 Write Penalty가 발생하고, 장애 디스크 교체 후 Rebuild 동안 성능 부담이 커집니다.
- How to Learn:
- 1단계: 하드 3개에 데이터
A=1(01),B=3(11)을 저장할 때, 세 번째 하드에 라는 XOR 계산값(패리티)을 기록하는 방식을 확인합니다. - 2단계: A 하드가 손실되면, 남아있는 와 패리티 로 을 계산해 원본 데이터
A=1을 복구하는 흐름을 살핍니다.
- 1단계: 하드 3개에 데이터
- Implement: 3개의 리스트(
D1, D2, P)를 가진 파이썬 8비트RAID5모사를 작성합니다.D1=0b1010,D2=0b1100입력 시P = D1 ^ D2 (0b0110)을 갱신하고, 이후D1 = None으로 장애(Crash)를 모사한 뒤Recover()에서D1 = D2 ^ P로 복구합니다.
Practical
Core Topic 03: LVM 아키텍처와 온라인 확장 (Logical Volume Manager)
- Why to Learn: 리눅스 설치 시 고정 파티션만 사용하면 운영 중 용량 변경이 어렵습니다. LVM이 운영 중 논리 볼륨을 확장하거나 줄이는 추상화를 어떻게 제공하는지 이해하기 위해서입니다.
- What to Learn:
- Concepts: PV(Physical Volume), VG(Volume Group), LV(Logical Volume), PE(Physical Extent).
- Skills: 라이브 볼륨 확장(
lvextend), 온라인 파일 시스템 확장(resize2fs), 스냅샷(Snapshot). - Tools: 리눅스
pvs,vgs,lvs명령어 체인. - Trade-offs: 커널과 하드디스크 사이에 LVM 매핑 계층을 두면 용량 확장과 스냅샷 같은 유연성을 얻습니다. 대신 데이터를 읽을 때 [VFS EXT4 LVM 가상 매핑 물리 디스크] 경로를 거치므로 약간의 I/O 지연과 복구 복잡성이 생길 수 있습니다.
- How to Learn:
- 1단계: 용량이 다른 500GB SSD와 2TB HDD를
pvcreate로 Physical Volume으로 만들고, PE 단위 조각을 하나의 2.5TB Volume Group(vgcreate)으로 묶는 흐름을 살핍니다. - 2단계: Volume Group에서 100GB
home, 200GBdb같은 Logical Volume(lvcreate)을 만들고, 나중에lvextend로 남은 용량을 추가해 파일 시스템을 확장하는 과정을 확인합니다.
- 1단계: 용량이 다른 500GB SSD와 2TB HDD를
- Implement: 파이썬 가상 LVM 아키텍처 스크립트를 작성합니다.
Physical_Drive_A(100),Drive_B(50)객체를Volume_Group(150)풀로 병합하고,Logical_Vol_1을 크기80으로 할당합니다. 이후LV_1.extend(50)명령으로 잔여량에서50블록을 매핑해LV_1크기가130이 되도록 구현합니다.
Advanced
Core Topic 04: 대역폭과 IOPS, 스토리지 성능 메트릭 (Storage Analytics & IOPS)
- Why to Learn: 순차 대역폭이 높아도, 4KB 랜덤 I/O가 많은 DB 서버에서는 IOPS와 지연 시간이 더 중요한 병목 지표가 될 수 있습니다. 워크로드에 맞는 스토리지 성능 지표를 구분하기 위해서입니다.
- What to Learn:
- Concepts: IOPS(Input/Output Operations Per Second), 대역폭(Throughput/Bandwidth), 지연 시간(Latency/Response Time).
- Skills: 랜덤 I/O(Random Access) vs 순차 I/O(Sequential Access) 워크로드 분석.
- Tools: 리눅스
fio벤치마크,iostat -x큐 길이(avgqu-sz) 및 대기시간(await) 병목 관측. - Trade-offs: 하드디스크(HDD)는 10GB짜리 파일을 순차 복사할 때는 150MB/s 정도의 대역폭을 낼 수 있지만, 4KB 랜덤 요청이 많아지면 헤드 탐색(Seek) 때문에 IOPS가 크게 낮아집니다. SSD는 탐색 헤드가 없기 때문에 랜덤 I/O에서 훨씬 높은 IOPS를 낼 수 있습니다.
- How to Learn:
- 1단계: Throughput vs IOPS: 10MB짜리 큰 덩어리 1개를 순차 처리하는 대역폭(Throughput)과, 4KB짜리 작은 데이터 1만 개를 랜덤 처리하는 IOPS의 차이를 비교합니다.
- 2단계: Latency & Queue: I/O 처리가 밀리면 커널 블록 큐(Queue)에 대기열(avgqu-sz)이 쌓이고, CPU 스레드가 데이터를 기다리며 iowait 상태에 머무를 수 있음을 성능 병목 관점에서 추적합니다.
- Implement: 파이썬으로 가상 디스크 디바이스 객체를 구현합니다.
Seek_Latency(탐색 시간)를10ms로 설정하고, 순차 주소(0, 1, 2...)는1ms에 응답하도록, 난수 주소(random.randint(0, 100))는 매번10ms탐색 지연이 발생하도록 만들어 IOPS 차이를 비교합니다.
7. Terminology
8. References
Primary
- [P2] SWEBOK v4.0 - Software Construction / Runtime Efficiency (Execution Reliability) — Quality context.
- [P1] CS2023 - OS/Operating System Principles (Reliability and Security) — Core requirements.
Secondary
- [Transaction-Safe File Systems] — Specialized theory for persistence.
- [Solid State Drive (SSD) Reliability] — Hardware-focused reliability analysis.
Industry
- [ZFS: The Last Word in File Systems (Sun Microsystems)] — High-integrity FS standard.
- [Western Digital: Managing NAND Flash with WAF Analytics] — Technical whitepaper.
9. Final Checklist
Primary
- '저널링'이 왜 시스템 크래시 이후의 '전수 검사(fsck)' 지연을 줄이는지 원리를 설명 가능한가? (P1)
- 영속적 쓰기 과정에서 'Atomicity'가 결여되었을 때 저장소에 어떤 데이터 파편화가 남는지 설명할 수 있는가? (P1)
Secondary
- 'Copy-on-Write' 방식의 파일 시스템이 왜 전통적인 'Overwrite' 방식보다 데이터 무결성은 높지만 단편화(Fragmentation)가 더 잘 일어나는지 상충 관계를 설명할 수 있는가?
- SSD의 'Write Amplification Factor'를 1에 가깝게 유지하기 위한 파일 접근 전략을 도출할 수 있는가?
Industry
- 클라우드 스토리지 설계 시, '배드 블록' 발생 추이를 보고 하드웨어 수명을 예측하여 선제적으로 부하를 분산하는 PSA 시스템을 제안할 수 있는가? (SFIA)
- 금융 거래 시스템에서 정전 발생 시, 하드웨어 내의 '슈퍼 커패시터(PLP)'가 커널의 지연 쓰기 데이터를 어떻게 최종 보호하는지 기술할 수 있는가?