21. HDD
RAID 0
Block-level striping (without parity or mirroring)
→ Space efficiency: 1
→ No fault tolerance. Block 하나 망가지면 망함
→ High bandwidth
RAID 1: Mirroring & Duplexing
Mirroring (without parity or striping)
→ 그냥 2개씩 만들어서 하나 망가지면 다른 하나 쓰면 되는거 아님? Write할때는 2번 쓰고, Read할 때는 같은지 확인하고.
→ Space efficiency: 1/2
→ Survive a single disk failure
RAID 2: Hamming Code ECC
Bit level striping. 하나의 기본 block이 여러개의 disk에 나눠져 있음. 따라서 read할때는 한번에 4개 다 읽어야함. 그리고 그 비트가 적절한지 다른 곳에 저장된 hamming code ECC를 확인하여 체크한다. 1-비트 에러정도는 고칠 수 있다.
하나의 노드가 죽어도 괜찮다.
다만 오버헤드가 발생하며, write 시에는 4개의 디스크 모두에 써야하기 때문에 병렬성이 떨어지고 power를 많이 먹는다.
RAID3
ECC보다는 parity지.
Bit-level striping, but parity!
각 비트를 XOR한 값들을 따로 저장한다.
single node failure에서 살아남을 수 있다.
→ XOR의 특성에 따라, 날아간 비트를 뺴고 XOR을 하면 유실된 해당 비트의 값이 나온다.
ex) XOR 0010 = 1. 2nd bit lost → 0_10, 1
XOR 0101 = 0
RAID4
RAID3이랑 비슷한데, block-level striping.
이제 개별 block만 건드릴 수 있으므로 병렬성이 향상됨.
그럼 어떻게 B1에만 write할 수 있나요?
NEW B1 (+) OLD B1 (+) Old B parity = New B Parity
Parity의 특성상, 모두 XOR되어있음. 즉, 비트 하나가 ‘바뀌었는지’ 여부를 파악하여 해당 여부와 기존 Parity를 XOR 시키면 됨.
- Space efficiency: (n-1)/n
- Bottleneck
- Parity disk is bottleneck for traffic. (bandwidth가 4배 필요함)
- write할 때 한번 읽어서 parity를 계산해야한다. (should read)
RAID 5
Distribute Parity → bottleneck 해소
RAID 6
make something cool 🙂