Wisdom’s Cloud
[LINUX] 19. 여러 개의 하드디스크를 하나처럼 사용하기 본문
RAID(Redundant Array of Inexpensive/Independent Disks)란?
- 여러 개의 하드디스크를 하나의 하드디스크처럼 사용하는 방식으로, 비용을 절감하면서도 신뢰성을 높이며 성능까지 향상시킬 수 있다.
- RAID의 종류는 크게 하드웨어 RAID와 소프트웨어 RAID로 나눌 수 있다.
- 하드웨어 RAID는 하드웨어 제조업체에서 여러 개의 하드디스크를 연결한 장비를 만들어 그 자체를 공급하는 것이며, 좀 더 안정적이고 각 제조업체에서 기술 지원을 받을 수 있기 때문에 많이 선호하는 방법이다. 최근에는 저렴한 가격의 제품도 출시되고 있지만, 안정적이고 성능이 좋은 제품은 고가다. 대게 고가의 경우 SA-SCSI 하드디스크를, 중저가는 SATA 하드디스크를 사용해 만들어지며, 각 제조업체에 따라 조작 방법이 다를 수 있다.
- 소프트웨어 RAID는 고가 하드웨어 RAID이 대안으로, 하스디스크만 여러 개 있으면 운영체제에서 지원하는 방식으로 RAID를 구성하는 방법을 말한다. 하드웨어 RAID와 비교하면 신뢰성이나 속도 등이 떨어질 수 있지만, 아주 저렴한 비용으로 좀 더 안전하게 데이터를 저장할 수 있다는 점에서 적극 고려해볼 수 있는 방식이다.
RAID 레벨
- RAID는 기본적으로 구성 방식에 따라 Linear RAID, RAID 0, RAID 1, RAID 2, RAID3, RAID4, RAID5의 일곱 가지로 분류할 수 있다.
- 실무에서 주로 사용하는 방식은 Linear RAID, RAID 0, RAID 1, RAID 5와 RAID 5의 변형인 RAID 6, 그리고 RAID 1과 0의 혼합인 RAID 1+0 등이다.
- 단순 볼륨과 많이 쓰이는 RAID 방식인 Linear RAID, RAID 0 , RAID 1, RAID 5, RAID 6를 비교하면 그림과 같다.
단순 볼륨
- 하드디스크 하나를 볼륨(묶음) 하나로 사용하는 방법이며 RAID 방식에는 포함되지 않는다.
Linear RAID
- 2개 이상의 하드디스크를 1개의 볼륨으로 사용하며, 파일이 저장되는 방식은 앞 하드디스크에 데이터가 완전히 저장된 후 다음 하드디스크에 데이터를 저장한다.
- 즉, 앞 하드디스크에 데이터가 완전히 저장되지 않으면 다음 하드디스크는 전혀 사용되지 않기 때문에 각 하드디스크의 용량이 달라도 전체 용량을 문제 없이 사용할 수 있어 공간 효율성이 100%다.
RAID 0
- Linear RAID 방식과 마찬가지로 2개 이상의 하드디스크를 1개의 볼륨으로 사용하지만, 모든 하드디스크를 동시에 사용하며, 이렇게 여러 개의 하드디스크에 동시에 저장되는 방식을 'Stripping' 방식이라고 부른다.
- 따라서 저장되는 시간 또는 속도 면에서 RAID 방식 중 성능이 가장 뛰어나다고 할 수 있으며, 하드디스크 개수가 가진 총 용량을 모두 사용하므로 공간 효율이 아주 좋다.
- 하지만 여러 개의 하드디스크 중 하나라도 고장난다면 모든 데이터를 잃어버리게 된다. 그러므로 RAID 0 방식을 사용하는 데이터는 '빠른 성능을 요구하되, 전부 잃어버려도 큰 문제가 되지 않는 자료'를 저장하는 데 적절한 방식이라고 생각할 수 있다.
RAID 1
- 2개의 하드디스크를 1개의 볼륨으로 사용하여 똑같은 데이터의 거울을 만들어놓는 'Mirroring' 방식으로, 비용이 많이 들더라도 중요도가 높은 데이터들을 저장할 때 사용한다.
- 똑같은 데이터를 2번 저장하므로 2배의 시간이 걸린다고 생각할 수 있지만, 똑같은 데이터가 다른 하드디스크에 동시에 저장되는 것이므로 저장 속도는 빠르지도 느리지도 않다.
- 따라서 2개의 하드디스크 중 하나가 고장 나도 데이터가 손상되지 않으며, 이것을 '결함 허용을 제공한다'라고 표현한다.
- 하지만 실제 계획보다 2배 큰 저장 공간이 필요하다. 즉, 총 2TB 중 1TB에 저장된 내용만 사용하므로 공간 효율이 50% 밖에 되지 않으며, 이를 '공간 효율이 떨어진다'라고 표현한다.
RAID 5
- RAID 1처럼 데이터의 안전성이 어느 정도 보장되면서 RAID 0처럼 공간 효율성도 좋은 방식을 요구하게 되었는데, 이를 어느 정도 포용하는 방식이 바로 RAID 5다.
- 최소한 3개 이상의 하드디스크가 있어야 구성할 수 있으며, 대부분 5개 이상의 하드디스크로 구성하고, 하드디스크에 오류가 발생하면 패리티를 이용해서 데이터를 복구할 수 있다.
- 따라서 짝수 패리티를 사용하기 때문에 여러 개의 하드디스크 중 1개가 고장 나도 원래의 데이터를 추출할 수 있으며, 하드디스크의 개수를 N개라고 하면 패리티로 사용하는 용량을 제외한 N-1개만큼의 공간을 사용할 수 있으므로 저장 공간의 효율을 높일 수 있다.
RAID 6
- RAID 5 방식이 개선된 것으로, RAID 5는 1개의 패리티를 사용하지만 RAID 6은 2개의 패리티를 사용하여 2개의 하드디스크가 동시에 고장나도 데이터에는 이상이 없도록 한다.
- 따라서 공간 효율이 RAID 5보다 약간 낮지만, 데이터의 신뢰도는 더욱 높아지는 효과를 갖는다.
- 또한 RAID 5는 패리티를 1개만 생성하면 되지만, RAID 6은 패리티를 2개를 생성해야 하므로 내부적인 쓰기 알고리즘이 복잡해져 RAID 5와 비교했을 때 성능(속도)이 약간 떨어진다.
RAID 1+0
- RAID 1로 구성한 데이터를 다시 RAID 0으로 구성하는 방법으로, 신뢰성(안전성)과 성능(속도)을 동시에 확보할 수 있다.
- 따라서 전체 글자 12글자(12바이트)를 저장하는 데 각 하드디스크당 6글자만 저장하면 되므로 총 6초밖에 걸리지 않으며, 각각 하드디스크가 1개씩 고장 나도 데이터는 안전하므로 신뢰성까지 얻을 수 있다.
[실습 1] RAID를 실습하기 위해 9개의 하드디스크를 장착한 가장머신 환경을 만들자.
step 0 Server를 초기화하자.
step 1 다음의 표와 같이 하드디스크 9개를 추가하자.
장치 이름 | 하드디스크 크기 | 파일 이름 | 비고 |
SCSI 0:1 | 2GB | disk0-1.vmdk | Linear RAID |
SCSI 0:2 | 1GB | disk0-2.vmdk | |
SCSI 0:3 | 1GB | disk0-3.vmdk | RAID 0 |
SCSI 0:4 | 1GB | disk0-4.vmdk | |
SCSI 0:5 | 1GB | disk0-5.vmdk | RAID 1 |
SCSI 0:6 | 1GB | disk0-6.vmdk | |
SCSI 0:7 | 사용할 수 없음(VMware에서 예약되어 있음) | ||
SCSI 0:8 | 1GB | disk0-8.vmdk | RAID 5 |
SCSI 0:9 | 1GB | disk0-9.vmdk | |
SCSI 0:10 |
1GB | disk0-10.vmdk |
step 2 9개의 하드디스크 모두를 RAID용 파티션으로 만들자.
# fdisk /dev/sdb → SCSI 0:1 하드디스크 선택
Command : n → 새로운 파티션 분할
Select : p → Primary 파티션 선택
Partition number : 1 → 파티션 번호 1번 선택
First sector : Enter → 시작 섹터 번호
Last sector : Enter → 마지막 섹터 번호
Command : t → 파일 시스템 유형 선택
Hex Code : fd → 'Linux raid autodetect' 유형 번호(L을 입력하면 전체 유형이 출력됨)
Command : p → 설정 내용 확인
Command : w → 설정 저장
step 3 지금까지 설정한 내용을 스냅숏으로 저장하자.
[실습 2] Linear RAID를 구성해 보자. (/dev/sdb와 /dev/sdc로 구성)
step 1 실제 RAID를 구성하자.
* /dev/sdb는 2GB, /dev/sdc는 1GB 용량이므로
Linear RAID는 2개의 하드디스크 용량을 모두 사용하기 때문에 3GB 정도가 나오는 것을 확인할 수 있다. *
[실습 3] RAID 0을 구성해 보자. (/dev/sdd와 /dev/sde로 구성)
step 1 실제 RAID를 구성하자.
* /dev/md0 장치는 RAID 0이므로 하드디스크 용량을 모두 사용한다.
따라서 /dev/sdd의 1GB와 /dev/sde의 1GB를 합한 약 2GB의 용량이 나오는 것을 확인할 수 있다.*
[실습 4] RAID 1을 구성해 보자. (/dev/sdf와 /dev/sdg로 구성)
step 1 실제 RAID를 구성하자.
* RADI 1 생성 시 나오는 경고 메시지는 부팅 장치로 사용할 수 없다는 경고다.
지금 만드는 RAID 1은 부팅 장치로 사용할 일이 없으므로 관계 없다. *
* RAID 1은 동일한 데이터를 2회 저장하므로
실제 가용 용량은 2GB의 절반인 1GB 정도가 나오는 것을 확인할 수 있다. *
[실습 5] RAID 5를 구성해 보자. (/dev/sdh와 /dev/sdi, /dev/sdj로 구성)
step 1 실제 RAID를 구성하자.
* RAID 5는 '하드디스크 개수-1'만큼의 용량을 사용할 수 있다.
따라서 3개를 설치했으므로 2개의 용량인 2GB만 사용할 수 있다. *
step 2 지금까지 설정한 내용을 스냅숏으로 저장하자.
[실습 6] Linear RAID, RAID 0, 1, 5의 하드디스크가 고장 난 상황을 살펴보고, 정상적으로 부팅이 가능하도록 하자.
step 1 정상적으로 작동하는 RAID에 적당한 파일을 복사해놓자.
step 2 4개의 하드디스크를 고장 내자.
step 3 다시 부팅하자.
stpe 4 Linear RAID와 RAID 0 장치를 중지시키고, /etc/fstab에서도 제거하자.
[실습 7] Linear RAID, RAID 0, 1, 5 장치의 고장난 하드디스크를 새로운 하드디스크로 교체하자.
step 1 고장 난 장치를 새로운 하드디스크로 교체하자. (단, 가상머신이 꺼진 상태여야 한다.)
장치명 | 하드디스크 크기 | 파일명 | 비고 |
SCSI 0:2 | 1GB | newDisk0-2.vmdk | Linear RAID |
SCSI 0:4 | 1GB | newDisk0-4.vmdk | RAID 0 |
SCSI 0:6 | 1GB | newDisk0-6.vmdk | RAID 1 |
SCSI 0:9 | 1GB | newDisk0-9.vmdk | RAID 5 |
step 2 새로 장착한 하드디스크를 이용해서 Linear RAID, RAID 0, 1, 5를 복구하자.
* 만약 raid0에 파일이 보인다면 이 파일은 정상 파일이 아닌 50%만 정상인 파일이다.
파일 크기가 기존과 동일해도 실제 내용의 50%는 비었다고 보면 된다.
그러므로 RAID 0을 복구한 후에는 mkfs 명령으로 깨끗하게 포맷하는 것이 좋다. *
* 이것은 운 좋게 복구된 것뿐이다.
처음에 2GB(SCSI 0:1)와 1GB(SCSI 0:2)를 사용했고, 데이터가 얼마 저장되지 않은 상태에서 1GB가 고장났기 때문이다.
즉 데이터는 모두 2GB에만 있었기 때문에 지금과 같이 복구된 것뿐이다.
Linear RAID 역시 RAID 0과 같이 결함 허용 기능이 없으므로 지금과 같이 운 좋은 경우를 기대해서는 안 된다. *
[실습 8] RAID 6과 RAID 1+0을 구성해 보자.
step 0 Server를 초기화하자.
step 1 하드디스크 8개를 준비하자.
step 2 /dev/sdb1~/dev/sde1을 RAID 6 장치인 /dev/md6로 생성하자.
* RAID 6은 '하드디스크개수-2'만큼의 용량을 사용할 수 있기 때문에
결과를 보면 /raid6 디렉터리에 약 2GB 정도의 공간이 있는 것을 확인할 수 있다. *
step 3 /dev/sdf1~/dev/sdi1을 RAID 1+0 장치인 /dev/md10으로 생성하자.
* RAID 1+0은 RAID1과 마찬가지로 공간 효율이 '하드디스크개수/2'가 되기 때문에
결과를 보면 /raid10 디렉터리에 약 2GB 정도의 공간이 있는 것을 확인할 수 있다. *
step 4 RAID 6와 RAID 1+0 장치에 적당한 파일을 복사하자.
step 5 /dev/md6 장치는 /raid6 디렉터리에, /dev/md10 장치는 /raid10 디렉터리에 마운트되어 있도록 설정하자.
[실습 9] RAID 6와 RAID 1+0의 결함 허용을 확인하자.
step 1 Server가 종료된 상태에서 4개의 하드디스크를 고장 내자.
step 2 파일이 정상적으로 있는지 확인해 보자.
'LINUX > Beginner' 카테고리의 다른 글
[LINUX] 18. 하드디스크 한 개 추가하기 (0) | 2021.03.17 |
---|---|
[LINUX] 17. X 윈도 응용 프로그램 (0) | 2021.02.05 |
[LINUX] 16. 그놈 데스크톱 환경 설정 (0) | 2021.02.04 |
[LINUX] 15. 간단한 커널 컴파일 (0) | 2021.01.31 |
[LINUX] 14. GRUB 부트로더 (0) | 2021.01.30 |