Scatch note
[운영체제] 디스크와 RAID
10.14.20244 Min Read — In tech

디스크와 RAID

디스크(HDD)와 구성요소

Sector - 트랙 내에서 데이터 판독의 물리적 단위 (512 Byte)

Track - Platter에서 같은 거리만큼 떨어진 섹터 집합

Cylinder - 같은 반지름을 갖는 트랙의 집합

Platter - 데이터를 기록할 수 있는 자성물질로 이뤄진 원형 금속판

Surface - Platter의 윗면,아랫면

디스크 드라이브는, 디스크 축을 회전시키며 Positioner 을 위치시켜, Head가 데이터를 기록하고 읽는다.

RAID: Redundant Arrays of Inexpensice Disks

직역하면 저성능 디스크의 중복 배열입니다. 여러 개의 디스크를 묶어 대용량으로 사용한다는 의미이며,운영체제와 RAID Controller의 제어를 받습니다. RAID버전에 따라 안정성과 성능(Access Speed)을 고려해 설계되었습니다.

운영체제제가 제어하는 개념이므로, Block 단위로 데이터를 다룹니다. 또한, 디스크의 입/출력에 대한 부하가 균등하게 분배되어야 하고, 이를 통해 성능을 향상시킬 수 있습니다. 일부 버전에서는 데이터를 중복 저장하거나 Parity로 손실을 체크하는 등, 신뢰성을 보장하기 위한 기능도 가지고 있습니다.

RAID 0

Disk Striping: 데이터를 블록 단위로 분할해 각 디스크에 저장합니다.

Disk A Disk B Disk C Disk D
X Y Z I
J K L M
O P Q R

성능 측면에서, 하나의 Stripe( X, Y ,Z, I)를 한번에 접근 할 수 있으므로(병렬 접근), 매우 좋다고 할 수 있습니다.

  • 그러나 (X, J, O )접근같이 최악의 경우에는 병렬성이 보장되지 아예 않습니다. ( 일반적인 경우는 아님 )

안정성 측면에서는, 데이터를 중복해 저장하지 않기 때문에, 안정성이 떨어집니다. 하나의 디스크에서 장애가 발생할 경우, 데이터 손실이 발생합니다.

RAID1

Mirroring: 동일한 데이터를 미러링 디스크에 동시 저장!

Disk A Disk B Disk C Disk D
X X Y Y
Z Z I I
J J K K

RAID1은 하나의 데이터를 두 개 이상의 디스크에 중복으로 저장해 안정성을 향상시킨 방법입니다.

안정성 측면에서 하나(또는 이상)의 디스크에 장애가 생겨도, 다른 디스크에서 데이터를 가져올 수 있습니다. 그러나 디스크 저장 가능 용량이 줄어든다는 단점이 있습니다.

성능 측면에서 단일 ****읽기/쓰기 작업은 RAID0과 큰 차이를 보이지 않습니다. 그러나 연속 읽기/쓰기 작업에서는 데이터 버스의 대역폭 관점에서 병목이 발생해, RAID0과 비교해 성능 저하가 발생합니다. 최대 대역폭의 (1 /N )만큼 제공

RAID3

RAID 0 + Parity Bit: Striping에 대한 Parity를 저장.

Disk A Disk B Disk C Disk D Parity Disk
X Y Z I P1
J K L M P2
O P Q R P3

RAID1에서는 안정성을 위해 디스크 용량을 너무 많이 차지한다는 단점이 있었습니다. 이에 Parity Bit를 통한 복구 알고리즘을 적용해, 데이터 복구에 필요한 저장공간을 줄였습니다.

또한 성능 측면에서도 RAID0과 같은 Striping 방법을 사용하므로, 병렬 처리가 가능해 우수한 성능을 보입니다.

그러나 대량의 쓰기 작업 시 Parity 계산으로 인한 병목이 발생할 수 있습니다.

RAID3은 Byte 단위, RAID4에서는 Block 단위로 데이터 및 패리티를 저장한다는 차이가 있습니다.

RAID4에서는 읽기 작업 수행 시 더 적은 I/O횟수로 데이터를 읽어올 수 있지만, 필요하지 않은 데이터를 가져올 수 도 있다는 단점이 있습니다.

RAID 5 (현재 자주 사용되는 버전)

RAID3,4에서는 Parity Disk하나가 고장나면, 손실 측정을 할 수 없는 가용성 문제가 있었습니다. RAID5에서는 데이터를 저장하는 디스크에 Parity정보를 분산 저장해, 안정성을 높혔습니다.

부하 분산측면에서도, Write가 많은 시스템의 경우, RAID3,4같이 Parity Disk를 따로 두게되면, 해당 디스크에 부하가 집중되는 문제점이 있습니다.

Disk A Disk B Disk C Disk D Disk E
X Y Z I P1
J K L P2 M
O P P3 Q R
S P4 T U V
P5 A B C D

RAID6

RAID6는 RAID5와 같지만, 패리티 정보를 이중으로 저장합니다.

이를 통해 RAID5보다 데이터 안정적으로 데이터를 보존할 수 있습니다.

Disk A Disk B Disk C Disk D Disk E
X Y Z P1 P1
I J P2 P2 K
L P3 P3 M N
P4 P4 O P Q

Parity disk가 “실질적으로” 어떻게 데이터를 복구할까…??

XOR Parity 의 경우…

  • 만약, 디스크가 각각 0 , 1, 1 ,0데이터를 가지고있다고 하자
  • 패리티 비트는 이 모든 값에 XOR을 취한 값 (((0^1)^1)^0) = 0
  • 마지막 디스크가 파손되어, 0 값이 사라졌다!
  • 파손된 디스크를 제외하고 패리티 비트까지 XOR을 수행하면 원래의 값이 복구된다.
    • ((0^1)^1)^0 = 0

Nested RAID

RAID는 중첩해서 사용할 수 있습니다. 주로 안정성을 지원하는 RAID와 Striping을 지원하는 RAID( 보통은 RAID 0)를 통해 중첩합니다.

아래에서는 RAID 0+1, RAID 1+0에 대해 다루지만, 5+0, 6+0, 심지어 1+0+0 등, 안정성과 성능 요구사항에 따라 다양하게 구성할 수 있습니다.

360px-RAID_01.svg.png

440px-RAID_10_01.svg.png

이미지 출처: https://en.wikipedia.org/wiki/Nested_RAID_levels

RAID 0+1, 1+0 두 가지 방법 모두 안정성과 병렬접근 성능을 기반으로 설계된 중복 RAID 방법입니다.

RAID0+1은 이름에서 알 수 있듯, [ Striping + Mirroring ], 1+0은 [ Mirroring + Striping ] 입니다.

간단히 보기에는 두 방법이 차이가 없는것 같지만, 성능이나 안정성 측면에서 차이가 존재합니다.

그 전에, 그림에서 오해할 수 있는 부분이 있어 설명합니다. Nested RAID에서는 디스크 데이터가 많아질수록 RAID 0이 다중화됩니다. 이를 참고해, Striping대상이 2개 이상일 경우를 상상해야 둘의 차이를 이해할 수 있습니다.

RAID 0+1 에서는 Striping 해야하는 데이터가 많아질수록, 가용성 측면에서 단점을 보입니다.

2개의 미러링 디스크 그룹이 있다고 할 때, 각각의 디스크 그룹에서 하나씩의 손실만 발생해도 Striping을 통해 데이터를 가져오지 못하는 장애가 발생합니다.

반면 RAID 1 + 0에서는 , 하나의 Mirroring 디스크 그룹에서 모두 손실이 발생하지 않는 한, 여러 Striping 그룹에서 손실이 발생하더라도, 각각의 Mirror 디스크에서 데이터를 가져올 수 있으므로, 안정성이 더 뛰어납니다.

이런 이유로, 얼핏 비슷해보이는 RAID 0+1과 1+0이지만, 1+0이 실제로 더 자주 사용되는 RAID 구성 방법입니다. RAID 5+0, 6+0 등 다른 RAID를 설계할 때도, 성능/안정성/복구 측면에서 고려해 다양하게 설계할 수 있습니다.

Reference

OSTEP: Operating Systems: Three Easy Pieces

[HPC Lab. KOREATECH, OS Lecture](https://www.youtube.com/watch?v=es3WGii_7mc&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN)

https://en.wikipedia.org/wiki/Standard_RAID_levels

https://en.wikipedia.org/wiki/Nested_RAID_levels