Chapter 12: Physical Storage Systems
1. 저장 매체의 분류
- 휘발성 저장장치(Volatile Storage): 전원이 꺼지면 데이터가 사라짐 (예: 캐시, 메인 메모리)
- 비휘발성 저장장치(Non-Volatile Storage): 전원이 꺼져도 데이터 유지. 보조 저장장치 및 테이프, SSD 등 포함
- 저장장치 선택 시 고려 요소: 접근 속도, 저장 단가, 신뢰성
2. 저장 계층 구조 (Storage Hierarchy)
- 주기억장치: 가장 빠르지만 휘발성
- 보조기억장치: 하드디스크, SSD 등. 느리지만 비휘발성
- 3차 저장장치: 테이프, 광디스크 등. 가장 느리고 주로 백업/아카이브용
3. 주요 저장 인터페이스
- SATA: 최대 6 Gbps
- SAS: 최대 12 Gbps
- NVMe: PCIe 기반, 최대 24 Gbps
- SAN / NAS: 네트워크 기반 저장 방식. SAN은 블록 수준, NAS는 파일 수준 공유
4. 테이프 및 광디스크 저장
- 테이프: 순차 접근, 대용량, 저렴한 저장 비용. 백업 및 아카이빙에 주로 사용
- 광디스크: CD/DVD/블루레이 등. 비교적 느린 속도. 일회용(WORM) 또는 다회 기록 가능
5. 자기 디스크 (하드디스크) 구조
- 플래터(Platter) 위에 트랙(Track) → 섹터(Sector) 구성
- 디스크 암이 회전하며 섹터 위치 탐색
- 섹터 크기: 보통 512바이트
- 컨트롤러: 섹터 I/O 명령 처리, 체크섬 검증, 불량 섹터 remap
6. 디스크 성능 지표
7. 플래시 저장소 (Flash Storage)
- NAND 플래시: SSD에 사용. 페이지 단위 읽기, 블록 단위 삭제
- SSD: 고속 읽기/쓰기, 높은 IOPS (최대 수십만), SATA나 NVMe 인터페이스
- Flash Translation Layer (FTL): 논리 주소 ↔ 물리 주소 매핑
- 수명 제한: 블록마다 최대 쓰기 횟수 있음 → Wear Leveling 필요
8. SCM (Storage-Class Memory)
- 예: Intel Optane (3D XPoint)
- 플래시보다 낮은 지연 시간, DRAM과 비슷한 속도, 비휘발성
9. RAID (Redundant Arrays of Independent Disks)
- 목적: 고속 데이터 접근 + 장애 복구
- 기법: 디스크 병렬화, 중복 저장
주요 RAID 레벨:
- RAID 0: 스트라이핑, 중복 없음 → 성능만 향상
- RAID 1: 미러링 → 고신뢰성, 고속 읽기
- RAID 5: 데이터 + 패리티 분산 저장 → 성능/공간 절충
- RAID 6: RAID 5 + 이중 패리티(P, Q) → 디스크 2개 동시 장애에도 안전
10. RAID 성능 비교
- RAID 1: 작은 랜덤 쓰기에 유리
- RAID 5: 큰 순차 쓰기에 유리
- RAID 6: RAID 5보다 신뢰성 높음 (두 디스크 장애 허용)
- 선택 시 고려 요소: 비용, 성능, 장애 복구 시간
11. 하드웨어 관련 이슈
- 소프트웨어 RAID vs 하드웨어 RAID: 후자는 전용 하드웨어, 비휘발성 RAM 포함
- 라이트 오류 감지 및 복구: 전원 차단 등으로 중단된 쓰기 복구 필요
- 핫스왑 및 스페어 디스크 지원으로 가용성 향상
- 중복 전원, 컨트롤러로 단일 장애점 제거
12. 디스크 블록 최적화
- 버퍼링: 디스크 블록 캐시
- Read-Ahead: 다음 읽기 예상하여 미리 읽음
- 디스크 암 스케줄링: 엘리베이터 알고리즘 등으로 탐색 시간 최소화
- 파일 단편화 방지: 연속 블록 할당 및 디스크 조각 모음
RAID
Redundant Arrays of Independent Disks의 줄임말이다.
- 여러 개의 디스크를 병렬로 쓴다.
- 용량이 크고 속도도 빠르다.
- 하나의 디스크에서 오류가 발생하더라도 백업이 있으므로 안정적이다.
미러링(섀도잉)
모든 디스크를 복제해서 논리 디스크가 두 개의 물리 디스크로 구성되도록 하는 기법이다. write는 두 디스크 모두에, read는 둘 중 아무 디스크에서나 할 수 있다. 디스크 하나에서 오류가 발생해도 복제본이 있어 안정적이다.
Mean time to data loss 는 데이터가 유실된 시간을 나타낸다.
RAID에서는 패리티 비트를 활용해 레벨을 나눈다.
RAID level 0 : block striping, non-redundant, 에러 시 데이터가 분실되기 때문에 중요하지 않은 데이터에 사용
RAID level 1 : mirrored disks with block striping
RAID level 6 : 패리티에 오류를 수정할 수 있는 코드를 추가했다. 디스크가 2개 고장나도 복구할 수 있어서 안정적이다.
패리티 블럭
패리티를 이용해 데이터를 저장하면 한 개의 에러가 발생했을 때 복구할 수 있다.
패리티는 많이 사용하면 병목 현상이 발생할 수 있으므로 분산시키는 편이 좋다.
RAID 레벨을 선택할 때는 비용, 성능, 에러 대처, 고치는 동안의 성능을 고려한다.
Hardware issue
Buffer replacement
- LRU
- MRU
- 비휘발성 버퍼
성능이나 복구 측면에서 도움이 된다.
- Log 디스크
데이터 리커버리 시 많이 쓰인다. 로그를 일반 디스크보다 별도의 전용 디스크에 저장하는 편이 성능이 좋다.
Columnar representation
- IO 횟수를 줄일 수 있다.
- 병렬처리가 가능해진다.
- CPU 캐시 성능을 개선할 수 있다.