📝 RAID 정의 및 개념
📜 RAID
- RAID(Redundant Array of Inexpensive Disks)는 여러 개의 디스크를 하나의 디스크처럼 사용하는 개념
- 비용 절감, 신뢰성 향상, 성능 향상의 효과를 냄
📜 하드웨어 RAID
- 하드웨어 제조업체에서 여러 개의 하드디스크를 통해 장비를 만들어 그 자체를 공급하는 개념
- 안정적이지만, 비용이 많이 듦
📜 소프트웨어 RAID
- 고가의 하드웨어 RAID의 대안
- 운영체제에서 지원하는 방식
- 저렴한 비용으로 좀 더 안전한 데이터의 저장이 가능
📝 각 RAID 방식의 비교
📜 Linear RAID
- 최소 2개 이상의 하드디스크가 필요
- 2개 이상의 하드디스크를 1개의 볼륨으로 사용
- 앞 디스크부터 차례로 저장
- 100%의 공간 효율성(= 비용 저렴)
📜 RAID 0
- 최소 2개 이상의 하드디스크가 필요
- 모든 디스크에 동시 저장되므로 속도가 빠름(Stripping)
- 100%의 공간 효율성(= 비용 저렴)
- 신뢰성이 낮기 때문에 '빠른 성능을 요구하되, 혹시 전부 잃어버려도 큰 문제가 되지 않는 자료'를 저장하기에 적합함
디스크의 크기가 다를 경우 오히려 RAID 0에 비해 Linear RAID의 공간 효율성이 높아지는 경우도 있으나 일반적으로 실무에서 디스크의 크기를 다르게 설정하는 경우는 많지 않기 때문에 이 경우는 생각하지 않아도 됨
📜 RAID 1
- 데이터 저장에 두 배의 용량이 필요(Mirroring)
- '결함 허용(Fault-tolerance)'을 제공하여 신뢰성이 높음
- 두 배의 저장공간 = 비용이 두 배 = 공간 효율 나쁨
- Linear RAID와 비교했을 때 저장 속도(성능)는 변함 없음
- '중요한 데이터'를 저장하기에 적절함
RAID 2, 3, 4의 경우 RAID 5가 그 장점을 모두 포용했기 때문에 굳이 사용할 필요가 없음
📜 RAID 5
- RAID 0의 공간 효율성과 RAID 1의 데이터 안정성을 결합한 개념
- 최소 3개 이상의 하드디스크가 필요
- 오류가 발생할 경우 '패리티(Parity)'를 사용하여 데이터를 복구
- 어느 정도의 결함을 허용해주면서 저장 공간의 효율성도 챙길 수 있음
- '디스크의 개수 - 1'의 공간을 사용
- 2개 이상의 디스크가 고장나면 복구하지 못함
📜 RAID 6
- RAID 5의 방식을 개선
- 성능(속도)과 공간 효율은 RAID 5보다 약간 떨어지지만, 데이터에 대한 안정성은 좀 더 높아짐
- 최소 4개 이상의 디스크가 필요
📜 RAID 1 + 0
- 신뢰성(안정성)과 성능(속도)이 뛰어난 방식
📝 Linear RAID, RAID 0, RAID 1, RAID 5 구현
- 각 RAID 방식으로 디스크를 추가해보자
- 실습 구성도는 아래와 같다.
- Linear RAID: /dev/sdb, /dev/sdc
- RAID 0: /dev/sdd, /dev/sde
- RAID 1: /dev/sdf, /dev/sdg
- RAID 5: /dev/sdh, /dev/sdi, /dev/sdj
📜 물리적 하드디스크 장착
- 우선 이전 시간의 과정과 동일하게 위 표대로 물리적 하드디스크를 추가해준다.
- 참고로 직접 파일로 접근할 일은 없기 때문에 파일 이름의 경우 기본값으로 사용해도 문제 없다.
📜 파티션 생성
- fdisk 명령어를 통해 파티션을 생성하고 확인해보면 파티션 타입이 'Linux'로 되어 있는 것을 확인할 수 있음
- 이를 RAID로 변경해야함
- 명령어 l을 통해 파티션 타입에 해당하는 id를 찾을 수 있음
- 위 출력 결과에서 확인할 것은 'Linux raid auto'의 id 값인 'fd'
- 파티션 타입을 변경하는 명령어 t를 입력하고 이어서 fd를 입력
- 파티션 타입이 변경된 것을 확인
- 명령어 w를 입력하여 파티션을 완전히 생성
- 위 과정을 나머지 디스크에도 동일하게 적용
📜 Linear RAID 구축
📄 볼륨 그룹 생성
- 선처리 작업을 완료했으니 여러 개의 디스크를 하나로 묶어 논리적인 볼륨을 생성해주어야 한다.
- 이를 위해서는 mdadm 명령어를 사용하며 다음과 같이 사용할 수 있다.
# mdadm --[목적] [그룹 이름] --level=[RAID 레벨] --raid-devices=[묶을 디스크 개수] [묶을 디스크 이름]
- 생성한 그룹을 확인해보면 다음과 같다.
- 좀 더 자세한 정보를 확인하고 싶다면, 아래와 같은 구문을 사용할 수 있다.
# mdadm --detail /dev/md9
📄 파티션 포맷
- mkfs 명령어를 통해 ext4 파일 시스템으로 파티션 포맷을 수행한다.
- 이때 포맷 경로는 위에서 생성한 그룹 폴더로 지정한다.
# mkfs.ext4 /dev/md9
📄 마운트
- raidLinear 디렉터리를 생성하고 mount 명령어를 통해 해당 디렉터리에 마운트를 수행한다.
# mkdir /raidLinear
# mount /dev/md9 /raidLinear
- df 명령어를 통해 현재 마운트 된 디스크 목록을 확인해보면 아래와 같다.
- 마지막으로 재부팅 시에도 마운트가 유지되도록 /etc/fstab 파일에 아래 구문을 추가해준다.
/dev/md9 /raidLinear ext4 defaults 0 0
- 위와 동일한 방식으로 RAID 0, RAID 1, RAID 5까지 구축해주었다.
📝 Linear RAID, RAID 0, 1, 5 문제 발생과 조치
- 디스크 구축을 완료했으니, 이번에는 각 RAID의 문제 발생시 조치 방법을 확인해보자
- 우선 각 디스크에 임의의 파일을 테스트용 파일로 저장해주었다.
- 이후 가상머신을 종료하고, 실습 구성도와 동일하게 디스크를 임의로 삭제하여 문제를 발생시켰다.
- 이제 가상머신을 다시 실행해보면 정상적으로 부팅되지 못하고 응급 모드로 부팅될 것이다.
- 응급 모드에서 디스크를 복구하여 문제를 해결하기 위해 우선 루트 사용자의 비밀번호를 입력하여 루트 사용자로 로그인한다.
- 이후 아래 명령어를 통해 위에서 저장한 테스트 파일이 각 디스크에 그대로 저장되어 있는지 확인해보면 /raid1과 /raid5에만 저장되어 있는 것을 확인할 수 있다.
- 이는 당연한 것이 Linear RAID와 RAID 0은 결함 허용을 제공하지 않기 때문이다.
# ls -l /raidLinear /raid0 /raid1 /raid5
- /raid1에 마운트 되어 있는 /dev/md1을 살펴보면 아래와 같다.
- 현재 /dev/sdd1만 작동하고 있으며 다른 하나는 제거된 상태로 나온다.
- 다만 RAID 1의 경우 미러링 방식으로 결함 허용 기능을 제공해주고 있기 때문에 이전에 저장한 파일이 그대로 남아있는 것이다.
- 즉, 현재 부팅이 정상적으로 되지 않는 것은 /dev/md9와 /dev/md0에서 문제가 발생하였고 이를 해결하지 못했기 때문이므로 당연히 데이터를 복구할 수는 없고 이 둘을 제거함으로써 문제를 해결해야 한다.
- 이를 위해 아래 명령어를 사용하여 디스크 작동을 중지시킨다.
# mdadm --stop /dev/md9
# mdadm --stop /dev/md0
- 또한 /etc/fstab 파일에서 /dev/md9와 /dev/md0에 대한 마운트 정보를 삭제 또는 주석처리 해준다.
- 이후 재부팅하면 정상적으로 부팅되는 것을 확인할 수 있다.
📝 Linear RAID, RAID 0, 1, 5 원상 복구
- 이번에는 고장난 4개의 디스크를 새 디스크로 교체하여 복구시키는 방법에 대해 알아보도록 하자
- 예상하다시피 Linear RAID와 RAID 0 방식의 디스크의 경우에는 그 구성은 복구 가능하지만 데이터는 복구할 수 없다.
- RAID 1과 RAID 5의 경우 현재 데이터가 저장되어 있긴 하지만 약간 불안정한 상태이기 때문에, 이 역시 다시 결함 허용이 동작하도록 복구해주어야 한다.
📜 물리적 하드디스크 추가
- 이를 위해 아래와 같이 다시 디스크를 장착해주었다.
- 이렇게 다시 장착할 경우 위의 실습 구성도의 내용과 동일하게 비어있는 공간으로 알아서 할당된다.
- 다만 위처럼 디스크를 추가한다고만 해서 자동으로 복구되는 것은 아니다.
📜 파티션 생성
- 다시 fdisk 명령어를 통해 파티션을 생성해준다.
📜 볼륨 그룹
- 이후 아래 명령어와 같이 기존에 동작하고 있는 디스크 그룹을 중지시키고 새로운 그룹을 생성해준다.
# mdadm --stop /dev/md9
# mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1
- /dev/md0에 대해서도 마찬가지로 위 명령문을 수행해준다.
- /dev/md1과 /dev/md5의 경우에는 /dev/md9와 /dev/md0와는 다르게 디스크를 새로 생성하는 것이 아니라 추가하는 개념으로 복구해주어야 한다.
- 따라서 아래와 같은 명령어를 수행해준다.
# mdadm /dev/md1 --add /dev/sdg1
# mdadm /dev/md5 --add /dev/sdi1
- 마지막으로 /etc/fstab 파일에서 주석 처리했던 /dev/md9과 /dev/md0에 대한 마운트 정보를 복구하고 재부팅하여 결과를 확인해보면 모든 디스크가 정상적으로 복구된 것을 확인할 수 있다.
- 다만 /raidLinear와 /raid0 디렉터리의 경우 저장 되어있는 파일이 정상적으로 보일지라도 이미 기존에 있던 데이터의 반이 훼손된 상태에서 새로운 디스크만 추가해준 상태이기 때문에 해당 파일은 정상적으로 사용할 수 없다.
'🐧 Linux > 이것이 리눅스다(CentOS 8)' 카테고리의 다른 글
[이것이 리눅스다(CentOS 8)] 07장. 쉘 스크립트 프로그래밍 (0) | 2023.04.02 |
---|---|
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(3) (0) | 2023.04.01 |
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(1) (0) | 2023.03.31 |
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(4) (0) | 2023.03.28 |
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(3) (0) | 2023.03.27 |