Linux

Linux - LVM(Logical Volume Manager)

hann-blume 2020. 2. 27. 23:53

 

 

 

우리가 가상머신을 설치할 때 

파티션 설정 부분에서 

다음과 같은 LVM이라는 것을 본 기억이 있을 것이다.

 

 

 

 

LVM은 여러 개의 HDD를 합쳐 하나의 큰 용량의 FileSystem으로 구성하는 것을 말한다.

그리고

서버 운영에 있어 작은 용량의 HDD를

하나로 합쳐 대용량의 스토리지를 구성 할 때 사용하며,

스토리지 확장 및 변경사항에 있어 유연한 대처가 가능한 장점을 가지고 있다.

 

그림으로 이해를 해보자 (집중)

 

 

만약 맨 아래쪽의 물리디스크 중 /dev/sda가

용량이 부족해졌다고 상상해보자.

그 때 우리는 /dev/sdb를 새로 추가 장착하고,

sda와 sdb를 '볼륨 그룹'으로 '논리적'으로 묶어준다.

즉, 실제로는 서로 다른 물리적인 두 저장장치이지만 

마치 하나의 저장장치인 것 처럼 묶는다는 것이다.(논리적으로)

 

물론 묶어주기 전에 당연히 저장장치로 사용하기 위해 파티션을 나눠준다.

또한 '볼륨 그룹'으로 묶어준 후에 원래의 파티션 처럼

원하는 용량만큼 여러 조각으로 나누어서 사용하고 싶으면

물리 볼륨이 아닌 '논리 볼륨'으로 나누어 줄 수 있다.

 

즉, 정리하자면

서로 다른 두 물리적인 저장장치를 각각 파티션 설정을 해주고,

각각의 물리 볼륨을 설정한다.

그리고 이 두 물리볼륨을 '볼륨 그룹'으로 묶어 마치 하나의 장치처럼 만든다.

그리고 필요에 따라 논리 볼륨으로 나누어 사용할 수 있다는 것이다.

 

논리 볼륨으로 나누는 것은

만약 sda는 100기가, sdb는 200기가의 저장장치일 때,

볼륨 그룹으로 묶으면 300기가의 하나의 저장장치가 된다.

이 때 이 300기가는 논리적으로 묶인 것이지 물리적인 300기가가 아니다.

근데 이 300기가를 원래 각각의 용량만큼 100기가, 200기가 씩이 아닌

150기가와 150기가,

또는

50기가와 250기가

이런 식으로 논리 볼륨으로 자유롭게 나누어 사용이 가능하단 것이다.

 

 

여기까지 이론적으로 이해가 되었다면

LVM에서 사용하는 용어를 알아보자

Pysical Volume
Volume Group Pysical Volume을 합친 그룹을 말한다.
Logical Volume

 

바로 실습으로 들어가자.

 

1기가의 하드디스크 3개를 추가 해준다

 

 

 

 

 

 

 

 

1기가의 하드디스크 3개를 추가했으면 부팅을 시키고

3개의 하드디스크 모두 Primary 타입으로

각각 '통'으로 파티션을 잡아주자

 

fdisk /dev/sdb

n

p

Enter

Enter

Enter

w

 

# fdisk /dev/sdc

n

p

Enter

Enter

Enter

w

 

# fdisk /dev/sdd

n

p

Enter

Enter

Enter

w

 

 

그리고 다시

# fdisk /dev/sdb으로 들어간다.

 

그리고 t 옵션을 선택한다.

 

기억할지 모르지만

파티션 포스팅의 중간즈음 파티션의 옵션을 설명한 표에서 

't'옵션은 파티션 '시스템 id를 변경하는 옵션'이라고 

설명한 적이 있다.

https://hann-blume.tistory.com/15

 

Linux - Partition(파티션)

작업 표시줄 검색창에 '파티션' 이라고 입력해보자. 우리는 컴퓨터를 이용할 때 물리적인 저장공간인 SSD 또는 HDD를 구매해서 장착하고 pc에서 이 저장공간을 이용용도와 취향에 따라 논리적으로 나누기도하고..

hann-blume.tistory.com

 

 

 

Hex code를 입력하라고 나오는데

L을 눌러보자

L

 

 

그럼 수 많은 Hex code를 확인할 수 있고,

그 중 

 

 

LVM 이 적힌 ' 8e ' 를 기억한 후

 

 

Hex code인 8e를 입력한다.

 

 

 

그럼 위와 같이 'Linux' 였던 파티션 타입을 'Linux LVM' 으로 변경했다는 메세지가 나온다.

 

 

그리고 p를 눌러 확인해보면

 

 

 

시스템 id가 '8e Linux LVM' 으로 정상적으로 변경되어 있다.

 

w 옵션으로 저장하고 나간다.

 

이제 마찬가지로 나머지

/dev/sdc와 /dev/sdb도

'8e Linux LVM' 으로 변경해준다.

 

 

혹시 이 과정에서

t옵션을 진행 했는데

 

 

이런 문구가 나온다면

본인이 

# fdisk /dev/sdc가 아닌

# fdisk /dev/sdc1으로 들어가 t옵션을 사용한 것이 아닌지 확인하자.

파티션과 하드디스크를 구별할줄 알아야한다.

 

세 하드디스크 모두 Linux LVM으로 변경을 완료했다면

그리고 위 표에서 설명한

'Pysical Volume를 생성하는 명령어'를 사용해서

물리 볼륨으로 만들어준다.

 

# pvcreate /dev/sdb1

 

 

y를 누른다

 

 

 

 

그럼 이렇게 완료된다.

 

나머지 두 파티션도 마찬가지로 진행해준다.

# pvcreate /dev/sdc1

y
# pvcreate /dev/sdd1

y

 

 

Pysical Volume까지 만들어주었다면

# blkid

명령으로 확인해보자.

 

 

위와 같이 정상적으로 출력되면 잘 해준 것이다.

 

이제 '볼륨그룹'을 생성함과 동시에 sdb1, sdc1, sdd1을 그룹으로 묵어주자

볼륩그룹 이름은 VG로 해주겠다.(자유)

 

# vgcreate VG /dev/sdb1 /dev/sdc1 /dev/sdd1

 

 

VG라는 이름의 볼륨 그룹을 성공적으로 만들었다는 메세지가 나타난다.

 

이제 vgdisplay 명령어로 볼륨그룹을 확인해보자

 

 

 

우리가 만들어준 VG라는 이름의 '볼륨그룹'이 보이고

사이즈가 3기가(2.99)로 만들어진 것을 알 수 있다.

즉, 각각 1기가인 sdb1과, sdc1, sdb1이

총 3기가의

하나의 볼륨그룹으로 합쳐진 것을 알 수 있다.

 

 

이제 논리 볼륨으로 만들어주자

# lvcreate -L 2.98GB -n LV VG

 

 

 

용량을 2.98기가로 한 이유는

용량은 늘리고자하는 총 용량(여기선 3기가)의

최고 사용용량(2.99GB)에서 기본 사용용량을 제외한 용량으로한다.

 

논리 볼륨을 생성했으므로 확인을 해준다.

 

# lvscan

 

 

 

 

이제 우리가 파티션을 저장공간으로 만들어주기 위해 했던

포맷(파일시스템 만들기)작업을 해준다.

 

# mkfs.xfs /dev/VG/LV

 

 

 

 

확인

# blkid

 

 

 

 

이제 마운트를 해주기 위해 디렉터리(M.P)를 만들고,

마운트 작업까지 해주자

 

# mkdir /VGtest

# mount /dev/VG/LV /VGtest

 

확인

# df -h

 

 

이제 우리는 3기가 용량의 하드디스크를 가지게 되었다.

 

 

TIP.

위에서 우리가 논리 볼륨으로 만들어주는 과정에서 

# lvcreate -L 2.98GB -n LV VG

라는 명령어로

2.98기가 용량만큼의 볼륨그룹 VG를 LV라는 논리볼륨으로 만들어주었다.

 

이 과정은 2.99기가 용량의 볼륨그룹을

'통'으로 LV라는 이름의 논리볼륨 1개로 만들어준 것이다.

 

만약 사용 용도에 따라 여러개로 만들어주고 싶다면

예로

 

# lvcreate -L 500MB -n LV1 VG

# lvcreate -L 0.99GB -n LV2 VG

# lvcreate -L 1.5GB -n LV3 VG

이렇게 하면 각각 1기가 씩이였던 하드디스크를

내 맘대로 나누고 합쳐서 사용할 수 있는 것이다.

 

이런 식으로 나누어 준뒤에 LV1, LV2, LV3

각각에 파일시스템(포맷)을 만들어주고,

각각 서로 다른 M.P에 마운트를 해주면 된다.

 

이 과정은 사진으로 설명없이 보여주겠다.

 

 

WARNING문구가 나오긴 한다. - 무시

 

 

 

 

다시 본론으로 돌아와

우리는 이제 총 3기가의 하드디스크를 가지게 되었다.

 

이제 오토마운트 작업을 해주자

# vi /etc/fstab

 

 

 

/dev/VG/LV   /VGtest   xfs   defaults   0 0

를 추가해주고

 

저장하고 나오자

:wq

 

여기까지 하면 1기가 용량의 하드디스크 3개를 1개의 하드디스크로 만들어준 것이다.

 

 

그런데 여기까지는 우리가 사용하던 하드디스크가 아닌

처음부터 새 하드디스크 3개를 하나의 하드디스크로 합쳐준 것이다.

 

그렇다면 만약 기존에 내가 하디스크를 이미 사용중이고

데이터들도 들어있는 상황에서 용량이 부족하다면 어떻게 해야할까?

 

보통 이럴경우 기존의 하드디스크의 내용을 모두 백업한 후

용량이 큰 하드디스크를 새로 장착하고 그 하드디스크에 다시 데이터를 복구시킨다.

 

하지만 우리가 하드디스크를 지금처럼 LVM 타입을 이용 중이라면

그런 귀찮은 일을 하지 않고 하드디스크를 추가하여

곧 바로 용량을 늘려줄 수있다.

 

 

우리가 방금 만들어준 3기가의 하드디스크의 용량이 부족하여

1기가를 늘린 4기가의 하드디스크로 증축한다고 가정해보자.

가상머신을 종료하고 1기가의 하드디스크를 한 개 더 추가해보자.

 

 

 

부팅을 하고 나서

 

똑같이 작업해준다

 

# fdisk /dev/sde

(하드디스크 이름은 fdisk -l로 확인하고 하자. 혹여 e가 아닐 수도 있다.)

 

Primary 파티션으로 1기가 통으로 잡아주고

t

8e

Linux LVM으로 잡히는것 확인.
w 저장하고 나간다.

 

이제부터 명령어가 조금씩 달라진다.

다음 명령어를 입력하자.


# vgextend VG /dev/sde1

 

여기서 '볼륩그룹 생성 명령' vgcreate이 아닌 vgextend를 하는 이유는 새로운 생성이 아닌 
원래 있던 것에 확장을 해주는 것이기 때문이다.

 

이 부분을 이해해야한다. (중요!)

(이 부분을 이해하지 못하면 추가한 1기가의 sde를

언제 기존의 하드디스크와 합쳐준 것인지 이해 못할 수 있다.)

 

우리가 기존에 쓰던 3기가의 하드디스크는

/dev/VG 속에 LV라는 이름으로 되어있다.

즉, 지금 사용한 # vgextend VG /dev/sde1 라는 명령은

/dev/VG에 /dev/sde1를 extended(추가)하는 개념이다.

 

다시말해

/dev/VG 속의 LV(3기가) 와 /dev/sde1(1기가)가

합쳐지는 순간이다.

 

파티션 작업할때 로지컬파티션을 만드는 도구로

Extended 파티션을 이용했던 것을 기억하자.

 

 

 

 

확인

# vgdisplay

 

 

4기가로 늘어난 것을 확인 할 수 있다.

 

 

논리 볼륨도 만들어준다.

# lvextend -L 3.98GB /dev/VG/LV

(용량은 위에서 말한대로 설정하면된다.)

 

 

여기서도 lvcreate가 아닌 lvextend를 하는 이유는 마찬가지로

새로운 생성이 아닌 원래 있던 것에 확장을 해주는것이기 때문이다.

즉, 논리 볼륨도 확장 전용으로 만들어주는 것이다.

 

확인

# lvscan

 

 

 

 

변경사항 적용
# xfs_growfs /dev/VG/LV

 

 

 

 

 

확인
# df -h

 

 

4기가로 늘어난 것을 확인 할 수 있다.

 

 

이제 마지막으로 LVM 시스템 제거 순서이다.

제거는 항상 역순이다.

 

마운트부터 해제
# umount /VGtest

 

 

 


# vi /etc/fstab 접속
오토마운트 걸어놓은 것을 삭제

 

 

 


로지컬 볼륨 삭제
# lvremove /dev/VG/LV


볼륨 그룹 삭제
# vgremove VG

 

 

 


피지컬 볼륨 삭제
# pvremove /dev/sdb1
# pvremove /dev/sdc1
# pvremove /dev/sdd1
# pvremove /dev/sde1

 

 

 

 

확인

 

 

 

 

 

 

 

 

여기까지 LVM에 대한 설명이 끝났다.

반응형