티스토리 뷰

반응형

 

 

RAID : Redundant 중복 Array 배열 Independent 독립적인 Disks
다수의 디스크를 묶어서 한 개의 논리 볼륨으로 도출하는 기능


RAID 구성/복구/삭제시 사용 패키지 : mdadm(Multiple Device Administration : 다중 장치 관리)

단순 볼륨을 추가하고 사용할 때 파티션 생성 -> 포맷 -> 마운트의 과정을 거치는 것과 비교해, 레이드 볼륨을 사용하려면 파티션 생성 -> 레이드 구성(논리 장치) -> 포맷 -> 마운트의 과정을 거쳐야 한다. 즉, 포맷하기 전에 레이드를 구성해주고 논리적으로 만들어진 볼륨을 포맷하여 마운트하게 된다.

 

RAID의 종류(레벨)
Linear, 0, 1, 5, 6, 1+0

 

Linear(선형) : 순차적으로 저장. 단순하게 디스크를 논리적으로 묶어서 총 용량 사용 가능=>디스크 사용률 100%. 디스크 망가지면 복구 불가. 복불복으로 중요한 데이터가 살아 있을 수도 있긴 하지만 그냥 안된다고 보는 게 좋다. 각 디스크의 용량이 달라도 전체 용량 사용이 가능한 것이 장점. 구성시 필요한 디스크는 2개 이상.


RAID 0 : 동시 저장. 속도는 디스크의 갯수배로 빨라지지만 디스크가 하나라도 망가지면 데이터 복구 불가. 디스크 용량 사용률은 100%. 구성시 필요한 디스크는 2개 이상. 스트라이핑Stripping


RAID 1 : 같은 데이터를 두 군데에 동시 저장. 속도는 같고, 디스크 사용률은 50%지만 디스크 하나가 망가져도 데이터는 안전하다는 큰 장점이 있다. 구성시 필요한 디스크는 2개 이상. 미러링Mirroring


RAID 5 : 패리티 사용. 짝수 패리티. 디스크 사용률은 (디스크갯수-1)/디스크갯수 이고 한 개의 디스크가 망가지는 것까지는 괜찮다. 구성시 필요한 디스크는 3개 이상.


RAID 6 : 패리티 2배(RAID 5 대비)로 사용. 디스크 사용률은 (디스크갯수-2)/디스크갯수 이고 두 개의 디스크가 망가지는 것까지 괜찮다. 구성시 필요한 디스크는 4개 이상.

 

RAID 1+0 : RAID 1 방식으로 한 번 묶은 볼륨들을 RAID 0 방식으로 한 번 더 묶는다. RAID 1의 장점인 안전성과 RAID 0의 장점인 속도를 다 취하려는 방법. 디스크 사용률은 50%.

*RAID시에는 같은 용량의 디스크를 사용해야 한다[Linear RAID 제외](라기보다 그게 권장된다. 왜냐하면 더 작은 용량의 디스크가 꽉 차면 함께 구성된 디스크의 용량이 남았더라도 사용되지 않기 때문.)

*패리티 찾기에 사용되는 XOR연산. 배타적 논리합(Exclusive OR)으로, 두 피연산자 중 하나만 1일 때(두 피연산자가 다를 때) 1을 반환한다.

 

 

RAID 구성하기
-> RAID 5 구성 실습

 


1. DISK 추가

 

RAID 5를 구성해보기 위해 실습에 사용중인 VM에 20GB짜리 Disk 3개를 추가했다.

lsblk

연결된 블록디바이스 목록 확인 명령어를 통해 보니 새로 추가한 3개의 디스크가 sdb, sdc, sdd 이름으로 추가된 것을 확인할 수 있다. 이 디바이스들 /dev 아래에 있다.

 


2. 추가한 디스크를 레이드용으로 파티션 생성


fdisk /dev/sdb

n (새 파티션 생성)

나머지는 그냥 Enter 눌러서 default값 적용
t -> fd (타입을 레이드용으로 변경)

w (저장)

같은 과정을 sdc, sdd에도 해주었다.

 

lsblk

3개의 디스크 모두 파티션이 생성되어 끝에 1이 붙은 이름으로 갈라졌고 TYPE도 바뀐 것을 확인할 수 있다. 이제부터는 이 1이 붙은 이름으로 불러서 사용해야 한다.(/dev/sdb가 아니라 /dev/sdb1)



3. 레이드 구성

mdadm --create 가상장치명 --level=레이드유형 --raid-devices=사용할디스크파티션개수 장치1 장치2 ...
위 명령어를 아래처럼 간략하게 쓸 수 있다.
mdadm -C 가상장치명 -l 레이드유형 -n 사용할디스크파티션개수 장치1 장치2 ..  

여기서 사용하는 가상의 장치명은 md숫자 형식으로 정해져있다.

mdadm -C md5 -l 5 -n 3 /dev/sdb1 /dev/sdc1 /dev/sdd1

/dev/md/md5 라는 이름의 어레이가 구동되었다고 하는데, 레이드가 잘 생성된 것이다.

근데 여기서 실수한 게, 가상장치명을 줄때 /dev/md5 이렇게 줬었어야 하는데 그냥 md5로 써주었다. 결과적으로 밑에서 확인할거지만 /dev/md127 로 임의로 주어진 가상장치명을 부여받아버렸다. 장치명으로 사용할 수 있는 식별자가 2개가 되어버려서 거추장스러워졌다.

*레이드 확인 명령어


전체 어레이 : mdadm --detail --scan 또는 mdadm -D --scan


해당장치 상태 : mdadm -D 장치명(/dev/md/md5)

레이드 레벨과 사용된 장치의 갯수, 상태, 구성된 디바이스 목록까지 확인할 수 있다. 20GB 디스크 3개를 묶어서 만들었지만 1개만큼의 용량은 패리티로 사용되어 Array Size가 약 40GB인 것도 확인할 수 있다.



4. 포맷(파일시스템 설정)

가상장치명으로 포맷해야 한다.

mkfs.ext4 /dev/md/md5
mkfs -t xfs /dev/md/md5

둘 중 어떤 명령어의 형식이나 어떤 파일시스템 형식을 사용해도 된다.

done done 거리며 잘 포맷되었다. 포맷에 사용한 파일시스템에 따라 위 내용은 다르게 나올 수 있다.

 


5. 마운트할 디렉터리 생성 후 마운트

 

mkdir /raid5

mount /dev/md/md5 /raid5


이후 확인

df -hT 마운트된 디스크와 사용량 확인

-h 옵션은 human-readable로 사이즈의 단위를 보여주고 -T 옵션은 Type 파일시스템 유형을 보여준다.

여기서 내가 md5라고 적어준 장치가 사실은 md127로 만들어졌다는 것을 확인할 수 있었다.


lsblk  레이드 구성과 마운트 위치까지 확인 가능

3개의 디스크가 md127이라는 가상장치이름으로 잘 묶여있고 TYPE은 raid5이며 /raid5 디렉터리에 마운트된 것까지 확인.

md127이라니.. 재차 확인

mdadm -D /dev/md127

그렇다 /dev/md127 == /dev/md/md5 가 맞다.

 

마지막으로 부팅시 자동으로 마운트되게 하기 위해 /etc/fstab 파일에도 한 줄 추가.

마운트할장치명  마운트포인트  파일시스템  마운트옵션  0 0 

 

 

RAID 복구하기

 

RAID 5는 디스크 1개가 망가져도 복구가 가능하다. 테스트를 위해 /raid5 아래에 파일을 하나 만들고, 고의로 디스크를 뿌셔보겠다.

 

0. 디스크 망가뜨리기

 

확인을 위해

touch /raid5/test.txt

ls /raid5

디스크 3개 중 1개를 삭제.

reboot

lsblk

디스크 1개가 사라졌지만 raid5는 40G인 상태 그대로 있고, /raid5 에 마운트 된 상태도 그대로이다.

근데 이상한 점은 md127이란 이름이 md5로 바뀌었다는 것. 왜지?????

 

레이드 상태를 더 자세히 확인해보자.

mdadm -D --scan

mdadm -D /dev/md5

ls /raid5

디스크 1개가 removed되었다고 표시되고, Total/Active/Working Devices가 3개에서 2개로 바뀌었다. State는 여전히 Clean한데, degraded가 붙었다. 데이터는 보존되어있지만 앞으로 제기능은 못할거라는 뜻(디스크 하나 뿌시면 이제 안돼요~~!)

/raid5 열어보니 아까 만들어놓은 test.txt 파일도 그대로 있다.

 

근데 md127은 어떻게 된걸까...?

아까처럼 확인해보려하니 없다고 한다. 그 이름과 연결은 아예 사라진 모양이다. 재부팅해서 사라진 것인지, 디스크 하나가 빠져나가는 과정에서 사라진 것인지 알 수 없다. 일단 복구부터 하고 이건 밑에서 확인해보겠다.

 


1. 망가진 디스크를 대신할 디스크 추가

 


2. 새로 추가한 디스크 레이드용으로 파티션 생성


장치명은 당연히 /dev/sdd 겠지만 확인을 위해

lsblk

아니 아까 디스크 망가뜨리고 확인해봤을 땐 sdd 사라져있더니 새로  추가한게 sdb인건 뭘까 아무튼 좋은 확인이었다.

 

fdisk /dev/sdb

lsblk

 

 

3. 기존 RAID에 새  파티션 장치 추가

mdadm 기존raid장치 --add 새파티션장치
mdadm /dev/md5 --add /dev/sdb1

 


4. mdadm -D 레이드장치 로 복구된 것 확인

 

mdadm -D /dev/md5

State에 recovering이라고 뜬다. Spare Devices, Rebuild Status 등 새로운 것들이 보인다. 완전히 복구되기까지 시간이 조금 걸린다. 3분 정도 지나서 다시 확인해보니

완벽히 clean해졌다.

 

 

RAID 삭제
구성할 때와 역순으로 진행

 

0. 데이터 백업

 

제일 중요한 것.

 


1. 마운트 해제


umount /raid5 (또는 umount /dev/md5)

잘 되었다면 아무것도 뜨지 않는다.

 


2. 레이드 어레이 중지


mdadm -S /dev/md5



3. 메타데이터를 파티션에서 삭제


mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdc1
mdadm --zero-superblock /dev/sdd1

잘 되었다면 아무것도 뜨지 않는다.



4. /etc/fstab의 자동 마운트 존재 시 삭제

그리고 확인.

mdadm -D --scan

mdadm -D /dev/md5

lsblk

이쪽도 깨끗-

 

 

@@ md127이 왜 사라졌는가@@

디스크 3개로 다시 RAID5를 구성해보고 디스크 망가뜨리지 않은 상태로 재부팅해보았다.

레이드만들 때 가상장치명을 또 /dev/md5 아닌 md5로 주고 확인. md127로 받았다. 왜 또 127이지? 기본값인가..

마운트는 해주지도 않았는데 이전에 했던 걸 기억하는지, raid5에 알아서 해버렸다. 재부팅하면 사라지겠지.

reboot

레이드 생성 시 가상장치명에 /dev를 빠뜨린 것은 단순히 재부팅하면 고쳐지는 문제인가보다. md127은 임시로 사용하는 가상장치명인 듯 하다.

 

더보기

실습은 RHEL(Red Hat Enterprise Linux)의 클론 버전인 Rocky Linux 8버전을 사용했으며 Rocky Linux 9버전에서도 거의 문제없이 실행된다. 9버전에 와서 달라진 점은 따로 기입했지만 빠진 것이 있을 수 있다.

 

반응형