Redundant Array of Independent(inexpensive로도) Disks : RAID
독립된 디스크의 복수 배열?? 비싸지 않은 디스크의 복수 배열
디스크 용량 커질수록 가격 비싸지는데,
ex) 100TB 하드디스크 하나, (10TB 열개 사는게 쌀까?) -> 만들기 어려운 기술을 이룩하기 위해 싼 걸 여러개로 합치는 기술.
옛날에는 하드디스크도 작았고 용량이 큰 무언가를 만드는 게 힘들었음.
그래서, 용량이 작은 값이 싼 디스크를 여러개를 모아서 용량이 큰 하나의 논리적인 디스크를 만듦
하나로 구성
사진) - USB 3.0이 2.0보다 빠를 것. 64GB, 32GB 다 하나씩 연결. 전부다 하나로 묶어버리는 장점은?
: RAID 방식이 여러 개가 있는데, 속도가 엄청 빨라짐. (사진 속이라면, 8배는 빨라진다는)
위험도도 8배. 하나가 날라가면 다 고장남.
하나의 데이터를 양쪽의 디스크 두 군데에 나눠서. 쓰기속도 2배, 읽기 속도 2배.
하나의 디스크가 날라가면, 원본 데이터를 찾을 수 없음. 반쪽짜리 데이터밖에 남지 않음.
텍스트 파일이야 읽을 순 있겠지만, 이상한 숫자값이라던가 실행파일은 원래 무슨 파일이었는지 알아내기 힘들다.
속도는 빠르지만 안정성은 오히려 좋지 않음.
RAID 0(레벨) : 두 개의 데이터를 동시에 쓰기/읽기.
디스크 2개가 있다고 가정. 데이터를 양쪽에 똑같이 저장. 어떤 속도의 이점도 없다.
a1, a2, a3, a4 반대쪽 디스크에도 동시에 씀.
둘중 하나의 디스크가 고장나더라도 복구가 가능하다.
새로운 디스크 추가하고, 데이터를 복사하면 그대로 사용 가능하다.
안정성이 두 배가 된다. 디스크의 수만큼 늘어난다.
RAID 0과 RAID 1을 섞어놓은 것.
둘 사이의 절충안.
- disk1 disk2 disk3(패리티 비트 저장용도)
0XOR연산
1
0 1
1 0
1 0
0 1
1 0
ex) 01110 10110 데이터를 저장한다고 가정
disk1 | disk2 | disk3 |
---|---|---|
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 0 |
disk3 : 둘에 대한 패리티비트를 구함. 정확히 xor로 연산한다는 것은 아님.
문제는 raid 2, 3, 4를 한 군데에 몰아둔다.
raid 5는 여러 디스크에 각각 분산시켜둔다.
-> 만약 disk1이 고장이 났다고 가정
-> 서로 같으면 0 다르면 1. 가운데열을 가리고 연산해봐도 같음. 복구가 된다는 말임.
RAID 0은 먼저 묶으면 하나 고장나면 통째로 못씀.
디스크 두 개만큼 복구를 시켜야 제대로 복구가 되는 것임.
😂 RAID 0 / RAID 10 / RAID 5 / 돈 없으면 안쓰거나
- 디스크에 따라 복구/ 버틸 수 있는 지 수치가 있다. -> fault tolerance 라고 함. (장애 허용 시스템)
1GB짜리 디스크 9개 추가한다.
mdadm [옵션]
🌟[옵션]
--create
생성할 RAID 장치의 이름
--level
RAID 레벨을 지정
--raid-devices
RAID에 추가될 실제 장치의 파티션 지정
--detail
: 특정 장치의 상세 내역을 출력
Linear : 디스크를 배열 형태로 단순하게 연결시킨 구조
mdadm --create /dev/md/linear --level linear --raid-devices=2 /dev/sdb1 /dev/sdc1
- /dev/md/linear(이름 자유, 새로운 RAID 장치 생성)
mdadm --detail /dev/md/linear
mkfs -t ext4 /dev/md/linear
mkdir /raid0-l
mount /dev/md/linear /raid0-l
df -h
Stripe : 데이터의 내용을 분산 저장하여 속도가 빠르다. but 안전성 down
-mdadm --create /dev/md/stripe(이름자유) --level stripe --raid-devices=2 /dev/sdd1 /dev/sde1
- 속도도 2배, 위험도도 2배
mdadm --detail /dev/md/stripe
detail에서 level도 확인할 수 있다.
파일시스템 생성, 마운트 하기
mkdir /raid0-s
mkfs -t ext4 /dev/md/stripe
mount /dev/md/stripe /raid0-s/
df -h
mdadm --create /dev/md/mirror(이름자유) --level mirror --raid-devices=2 /dev/sdf1 /dev/sdg1
- 미러, 미러링
mdadm --create /dev/md/raid5 --level=5 --raid-devices=3 /dev/sdh1 /dev/sdi1 /dev/sdj1
파일들을 각각 만들고, 디스크가 이렇게 순서대로 있을 때,
둘 중 디스크 하나만 3번을 지운다고(물리적으로 제거)
stripe 것도 하나 제거
mdadm --deatil /dev/md/linear
로 확인했을 때, 없어졌다.
mirror는 하나는 removed로 제거
raid5도 가보면, 2개 살아있고, 하나 없어짐
stripe, linear 사라져서 마운트를 할 수 없으니까
남아있는것부터 해보면..
mount /dev/md/mirror /raid1
mount /dev/md/raid5 /raid5
마운트 잘 됨
사용하는데 문제 없음.
RAID 0으로 구성한 애들은 디스크 하나가 없어지니까 날라가버림.
mdadm --manage /dev/md/mirror --add /dev/sdg1
mdadm --detail /dev/md/mirror
시간이 좀 지나면 active, 동기화가 완료된 상태로 된다.
mirror 형태도 이렇게 하면 된다. 디스크 추가 시
mdadm --manage /dev/md/mirror --add /dev/sdg1
디스크를 논리적으로 mirror 장치를 빼고 싶으면
mdadm --manage /dev/md/mirror --remove /dev/sdg1