거북이-https://velog.io/@violet_evgadn 이전완료

RAID와 LVM 본문

Linux

RAID와 LVM

VioletEvgadn 2023. 4. 10. 22:14

RAID

◎ RAID란?

RAID는 Redundant Array of Inexpensive Disks의 약자로써 여러 개의 디스크를 하나의 디스크처럼 활용하는 방식이다.

RAID를 활용하면 비용을 절감할 수 있을 뿐 아니라 신뢰성과 성능을 향상할 수도 있다.

 

RAID는 하드웨어 RAID와 소프트웨어 RAID가 존재한다.

하드웨어 RAID는 여러 개의 하드디스크를 하나의 장비로 묶어 공급하는 것이다. 이 방식은 안정적이기는 하지만 상당히 고가의 장비를 구입해야 한다.

소프트웨어 RAID는 OS에서 지원하는 방식으로 여러 개의 저렴한 디스크를 연결하여 디스크 총량을 늘리는 방식이다.

고가의 하드웨어 RAID의 대안으로 조금의 에러나 디스크 낭비는 허용한다.

 

◎ RAID 종류

Linear RAID

2개 이상의 하드디스크를 1개의 볼륨으로 사용하는 방식이다.

앞 디스크부터 차례로 저장하는 RAID 방식인데, 단순히 여러 개의 하드디스크를 1개의 볼륨으로 묶었을 뿐 특별한 로직은 존재하지 않는다.

 

100%의 공간효율성을 보여주는 RAID 방식으로 비용이 저렴하다.

RAID 0

모든 디스크에 데이터가 동시에 저장되는 방식으로 Linear RAID와 같이 100%의 공간효율성을 보이는 RAID 방식이다.

공간효율성이 100%이므로 비용이 저렴하다.

 

RAID 0는 모든 디스크에 데이터가 동시에 저장되기 때문에 데이터를 저장하는 속도가 빠르다.

하지만 RAID 0는 신뢰성이 낮은데 만약 어떤 디스크에 저장된 데이터가 파괴되거나 변형되었을 경우 원래 데이터로 복원할 방법이 없기 때문이다.

따라서 빠른 성능을 요구하되 데이터가 소실되어도 큰 문제가 되지 않는 자료를 저장할 때 적합한 RAID 방식이다.

RAID 1

미러링(Mirroring)이라고 부르는 방식으로 데이터 손실을 대비하여 여려 디스크에 동일한 데이터를 저장해 놓는 RAID 방식이다.

이를 "결함 허용(Fault-tolerance)"라고 하는데 이 때문에 RAID 1은 신뢰성이 높은 방식이다.

 

하지만 데이터 저장을 2번 수행하므로 저장 공간이 2배로 필요하며 디스크 비용 또한 2배가 될 것이다.

즉, 공간 효율성이 나빠진다는 것인데 데이터 저장은 Linear RAID 방식과 동일하므로 속도는 변함이 없다.

 

공간 효율성이 나쁘고 속도는 느리지만 데이터 안정성이 보장되므로 중요한 데이터를 저장하는데 적합한 방식이다.

RAID 5

RAID 1의 데이터 안정성과 RAID 0의 좋은 공간 효율성을 동시에 챙기기 위해 고안된 방식으로 최소 3개의 하드디스크가 필요하다.

 

RAID 5는 "패리티(Parity)"라는 것을 활용하여 데이터를 복구한다.

짝수 패리티에서는 1의 개수가 짝수개, 홀수 패리티에서는 1의 개수가 홀수 개 되도록 하는 방식으로 새로운 비트 자리를 하나 추가하여 데이터 안정성을 확보하는 방식이다.

예를 들어 2번째 패리티의 데이터가 "1 0"이 저장되어 있다면 짝수 패리티에서 1의 개수가 홀수 개이므로 데이터에 문제가 있다는 것을 파악할 수 있다.

 

여러 개의 디스크 중 하나는 Parity를 위한 공간이므로 데이터 저장을 위해 "디스크 개수 -1"개의 공간을 활용할 수 있다.

단지 RAID 5 방식 같은 경우 디스크가 2개 이상 고장 날 경우에는 복구가 불가하다는 단점이 존재한다.

 

RAID 6

RAID 6 방식은 RAID 5 방식을 개선시킨 것이다.

공간 효율성은 RAID 5 방식보다 떨어지지만 2개 이상의 데이터가 동시에 고장나더라도 복구가 가능하도록 만들어주는 방식이다. 이를 위해 RAID 5는 최소 4개의 하드디스크가 필요하다.

 

성능(속도)과 공간 효율은 RAID 5에 비해 살짝 떨어지지만 데이터의 신뢰도는 더 높은 방식이다.

 

RAID 1+0

RAID1 방식과 RAID 0 방식을 결합한 방식으로 신뢰성과 성능을 동시에 높인 방식이다.


LVM

◎ LVM이란?

여러 개의 하드디스크를 합쳐 한 개의 파일 시스템으로 활용하는 것을 말한다.

이것만 보자면 RAID와 다른 점이 없어보이지만 LVM만의 특징이 존재하는데, 바로 필요에 따라 합친 하드디스크 용량을 재분할할 수 있다는 것이다.

 

예를 들어 2TB 하드디스크 2개를 합쳤을 경우 LVM에서는 이를 1TB와 3TB의 논리적 구조로 재분배시킬 수 있는 것이다.

 

LVM에서 사용되는 용어는 아래와 같다.

  • Physical Volume : 실제 하드디스크를 통해 설정한 파티션(ex. /dev/sda1, /dev/sdb1 등)
  • Physical Extents : 실제 데이터가 저장되는 공간. 하드디스크라고 생각하면 된다.
  • Volume Group : 물리 볼륨을 합쳐 1개의 물리 그룹으로 만드는 것
  • Logical Volume : Volume Group을 1개 이상으로 나눈 후 나뉜 영역
    • ex. 2TB 하드디스크 2개를 1개의 Volume Group으로 묶은 뒤 1TB와 3TB의 Logical Volume으로 재분배가 가능

출처 : https://sgbit.tistory.com/12


Linear RAID 구축

0. 하드디스크 2개 추가 & fdisk를 통해 파티션 설정

1GB 하드디스크 2개를 추가했다.

# /dev/sdb & /dev/sdc 파티션 추가
fdisk /dev/sdb
fdisk /dev/sdc

여기에서 마운팅을 수행하지 말고 바로 RAID 단계로 넘어가야 한다.

RAID에 대해 이해했다면 알 수 있겠지만 RAID는 여러 개의 하드디스크를 1개의 논리적 볼륨 그룹으로 묶는 것을 말한다.

 

즉, 파티션으로 설정한 /dev/sdb1과 /dev/sdc1을 1개의 볼륨 그룹으로 묶음으로써 Linear RAID를 구축할 수 있는 것이다.

 

1. 논리 볼륨으로 2개 파티션 묶기

mdadm --create [RAID 이름] --level=[RAID 형태] --raid-devices=[묶을 파티션 개수] [파티션 리스트]

여러 개의 파티션을 1개의 논리적 볼륨으로 묶는 명령어는 위와 같다.

이 때 --level에 입력해 주는 값에 따라 RAID 1 방식으로 묶일 수도 있고 RAID 0 방식으로 묶일 수도 있을 것이다.

 

우리는 "/dev/sdb1"과 "/dev/sdc1" 총 "2개"의 파티션으로 "/dev/md0"라는 이름의 "Linear RAID"를 만들 것이므로 아래와 같은 명령어를 입력하면 될 것이다.

mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1

 

2. 마운트

mdadm을 통해 RAID 논리 볼륨을 생성했다면 이젠 mkfs를 통해 파일 형식을 설정해 준 뒤 Directory에 마운트 시켜주면 된다.

# 파일 형식 설정
mkfs.ext4 /dev/md0

# Directory 생성 & 마운팅
mkdir /raidLinear
mount /dev/md0 /raidLinear

만약 재부팅 이후에도 이 설정을 유지하고 싶다면 /etc/fstab에 내용을 추가해주면 된다.

 

3. Linear RAID 생성 결과

가장 마지막 줄을 보면 /dev/md0라는 파일 시스템이 형성되었음을 알 수 있다.

우리는 분명히 1GB짜리 하드디스크 2개만 추가했다. 하지만 /raidLinear와 마운팅된 RAID는 2GB의 크기를 가짐을 알 수 있다.

즉, 우리가 원하는대로 여러 개의 하드디스크를 묶어 1개의 RAID로 만들어졌음을 알 수 있다.

 

RAID 1, RAID 0, RAID 5 등 또한 유사한 과정으로 수행하되 요구되는 최소 하드디스크가 있을 경우에만 주의해 주면 정상적으로 RAID 시스템을 구축할 수 있다.

 

◎ 설정한 RAID 정보 보기

mdadm --detail [설정한 RAID 이름]


LVM 파일 만들기

0. 하드디스크 2개 추가 & fdisk를 통해 파티션 설정

위에서 했던 설정과 같으므로 설명은 생략하겠다.

1. 각 파티션에 대한 물리적 볼륨 생성

위에 나온 LVM 이미지를 보면 알 수 있겠지만 LVM 구성에 가장 선행되어야 하는 것은 파티션에 대한 물리적 볼륨을 생성하는 일이다.

그 명령어는 아래와 같다.

pvcreate [파티션 이름]

 

"pvscan"이나 "pvdisplay" 명령어를 통해 PV(물리적 볼륨)이 제대로 생성되었는지 확인이 가능하다.

2. 볼륨 그룹으로 묶기

pvcreate를 통해 파티션에 해당하는 PV를 생성했다면 이제는 생성한 PV들을 1개의 볼륨 그룹(VG)로 묶어야 한다.

명령어는 아래와 같다.

vgcreate [VG 이름] [PV 리스트]

마찬가지로 "vgscan"이나 "vgdisplay" 명령을 통해 VG가 제대로 생성되었는지 확인할 수 있다.

 

필자는 "lvmVg"라는 VG를 "/dev/sdd1"과 "/dev/sde1" PV를 통해 만들 것이다.

3. 논리적 볼륨(LV)로 나누기

LVM의 꽃인 단계라고 할 수 있겠다. LVM의 가장 큰 특징은 하드디스크 여러 개를 1개의 VG로 묶은 뒤 이를 관리자 마음대로 재분배할 수 있다는 것이다. 그리고 이 용량 재분배는 1개의 VG를 여러개의 LV로 나눔으로써 수행할 수 있는 것이다.

 

LV로 나누는 명령어는 아래와 같다.

lvcreate -L [LV 사이즈] -n [LV 이름] [VG 이름]

여기에서 재미있는 것이 있는데 바로 -L 옵션이다.

 

-L 옵션으로 지정할 경우 우리가 늘 보는 KB, MB, GB, TB로 LV의 사이즈를 정한다.

하지만 만약 -l 옵션으로 지정할 경우 VG 내에서 값으로 준 수치의 %만큼의 사이즈를 가지게 된다.

 

-l 옵션의 가장 재미있는 값은 "100%FREE"이다.

100%FREE라는 값을 줬을 경우 VG의 남아있는 용량 전체를 LV의 사이즈로 지정할 수 있다.

 

우리는 1GB짜리 하드디스크 2개를 합쳤으므로 VG는 총 2GB의 크기를 가지고 있을 것이다.

그럼 1.5GB를 "data"라는 LV로, 0.5GB를 "backup"이라는 LV로 만들어보자.

 

명령어는 아래와 같을 것이다

# data LV 만들기
lvcreate -L 1500M -n data lvmVg

# backup LV 만들기
lvcreate -L 100%FREE -n backup lvmVg

이젠 "lvscan" 명령을 통해 실제 LV 설정이 어떻게 되었는지 확인해 보자

우리는 1GB짜리 하드디스크 2개를 합쳤지만 LVM에 의해 /dev/lvmVg/data에 1.5GB가 할당되었음을 알 수 있다.

 

4. LV에 파일 시스템 설정 & 마운팅

이 과정은 너무 많이 했으니 명령어만 설명하겠다.

mkfs.ext4 /dev/lvmVg/data
mkdir /data
mount /dev/lvmVg/data /data/

◎ LVM 관련 추가 명령어

# LV가 Clean한지(데이터가 저장되어 있는지) 확인
fsck -y /dev/[VG 이름]/[LV 이름]

# LV에 할당된 공간을 입력한 용량만큼 증가시킴
lvextend -L +[용량] /dev/[VG이름]/[LV 이름]

# VG에서 사용할 수 있는 공간을 확인
vgdisply -v

# LV 삭제
lvremove [LV 이름]

# VG 삭제
vgremove [VG 이름]

# PV 삭제
pvremove [PV 이름]

 

'Linux' 카테고리의 다른 글

Cron  (0) 2023.04.10
디스크 쿼터  (0) 2023.04.10
디스크 관리  (0) 2023.04.05
리눅스에서의 프로세스 관리  (0) 2023.04.05
SW 패키지 관리 & 압축  (0) 2023.04.04
Comments