클라우드 네이티브 애플리케이션 부트캠프 알림

티스토리 뷰

'마무'님의 블로그를 참고하세요 : mamu2830.blogspot.com/2019/12/lvmpv-vg-lv-pe-lvm.html

 

lvm 이란 매우 쉽게!

lvm 이란, 설정, 확장, 삭제, 구성과 모든 (pv vg lv pe le) 명령어, /dev/mapper/centos-root 크기 확장, xfs_growfs 에 대해 모두 자세히 설명한 포스트입니다

mamu2830.blogspot.com

중요한 내용만 요약하면 아래와 같습니다.

LVM 구성요소

- PV(Physical Volume): Physical Device를 Linux LVM 유형으로 나눈 Volume으로 gdisk, fdisk, parted등의 툴 사용

- PE(Physical Extent): PV를 일정 크기(보통 4MB)로 나눈 각 섹터

- VG(Volume Group): PV들을 묶은 그룹으로 LV(Logical Volume)의 Pool 역할을 함

- LV(Logical Volume): VG Pool에서 생성한 논리적 저장공간으로서 LV를 /etc/fstab에 등록한 후 마운트하여 사용함

- LE(Logical Extent): LV을 일정 크기(보통 4MB이고 PE와 1:1로 매핑 됨)로 나눈 각 섹터

Physical Device -> PV -> VG -> LV순서로 만듭니다.

 

 

왜 LVM을 사용하는가 ?

Phsical device를 파티셔닝하여 바로 사용하는것은 스토리지의 크기를 늘리거나 줄이기 매우 힘듭니다.

예를 들어 100GB 파티션을 만들었다가 200GB로 늘리려면 200GB짜리 새 파티션을 만든 후 그 파티션으로 복사하여야 합니다. 용량이 매우 큰 경우는 엄청난 작업입니다.

LVM은 스토리지의 크기를 유연하게 조정하기 위하여 사용합니다.

LVM을 사용하면 200GB짜리 PV를 만들고, 기존 VG에 추가한 후 LV를 확장하면 됩니다.

 

명령어

Object+Command형식입니다. Object에는 pv, vg, lv가 올 수 있고, Command는 create, scan, display, extend, reduce, remove가 올 수 있습니다. Command는 CRUD로 생각하시면 기억하기 쉽습니다.

scan은 간략한 정보만 표시하고, display는 자세한 정보를 표시하는 명령입니다.

pv는 extend와 reduce가 불가능합니다.

따라서 [pv,vg,lv]create, [pv,vg,lv]scan, [pv,vg,lv]display, [vg,lv]extend, [vg,lv]reduce, [pv,vg,lv]remove 가 사용될 수 있습니다.

 

LVM 생성 실습

1) PV만들기: 파티션 생성 -> PV생성

파티션을 LVM유형으로 생성합니다.

parted 사용

생성 후 parted <디바이스> set <partition번호> lvm on 으로 LVM 유형의 PV로 만들어야 합니다.

MBR(Master Boot Record)일 때..

GPT(GlobalUID Partition Table)일 때..

 

fdisk 사용

't' 명령으로 type을 Linux LVM으로 변경해 줘야 합니다. partition type 목록은 'L'을 누르면 볼 수 있습니다.

 

 

gdisk 사용

Code값을 '8e00'으로 지정해 줘야 합니다.

 

이후 실습을 위해 기존 파티션들을 모두 지우고, 아래와 같이 pv1, pv2를 생성합니다.

 

- 두번째로 PV를 생성합니다.

$ pvcreate /dev/vdb1 /dev/vdb2

 

2) VG 생성

$ vgcreate myvg /dev/vdb1 /dev/vdb2

 

3) LV 생성

lvscan -n <이름> -L <size> <VG명> 형식으로 사용합니다. -L 대신에 -l을 사용할 수 있는데 이때는 PE의 갯수를 지정하시면 됩니다.

 

4) 파일시스템 생성

LV는 /dev/<VG>/<LV> 또는 /dev/mapper/<VG>-<LV>형식으로 지정합니다.

 

lsblk로 볼 때는 위치가 조금 다르게 나오니 혼동하지 마십시오.

 

5) 마운트 하기

- 마운트할 대상 디렉토리를 생성합니다.

$ mkdir /data1
$ mkdir /data2

$ mount /dev/myvg/lv1 /data1
$ mount /dev/myvg/lv2 /data2

$ df -h

 

영구적으로 마운트 하려면 /etc/fstab에 추가하십시오. LV는 UUID가 아닌 이름으로 해도 마운트 위치가 바뀔 염려가 없습니다.

$ vim /etc/fstab

$ systemctl daemon-reload
$ systemctl reboot

 

$ df -h

 

PV, VG, LV 정보 보기

1) pvdisplay

VG의 이름, 용량 정보 등을 알 수 있습니다.

2) vgdisplay

용량 정보등을 알 수 있습니다.

 

3) lvdisplay

VG, 총용량 등을 알 수 있습니다.

 

LV 용량 늘리기

아래와 같이 /data1디렉토리는 총 크기 507M 중 30M를 쓰고 있습니다.

시간이 지나면서 점점 사용량이 많아져 디스크가 부족해질 수 있습니다.

이때 LV를 늘려 주면 용량이 커집니다.

 

xfs 타입의 LV 확장

LV를 늘리기 위해서는 먼저 VG에 여유 공간이 있어야 합니다. vgdisplay로 여유공간을 확인합니다.

 

988MB 여유가 있으니, 바로 lv크기를 늘려줍니다.

lvextend -L +<size> <LV>형식을 사용합니다.

늘리고 나서 df -h를 해보면 /data1의 총 용량이 그대로 입니다.

늘어난 LV를 파일시스템에 적용해줘야 합니다. xfs유형은 xfs_growfs <마우트 대상 디렉토리>를 이용하고, ext4유형은 resize2fs <LV>명령을 이용합니다.

 

ext4 type의 LV확장

- PV 생성

 

- PV, VG, LV생성 & 마운팅

- LV 확장

 

- Filesystem에 적용: resize2fs <LV>

 

lvextend의 -r 옵션으로 file system resize를 동시에 수행

lvextend -r 옵션을 사용하면 파일시스템유형에 따라 xfs_growfs나 resize2fs 명령을 자동으로 실행하여 매우 편합니다.

 

VG확장하기

VG를 확장하기 위해서는 먼저 PV를 만들어야 합니다. PV를 VG에 추가하여 확장합니다.

- 새로운 PV만들기

 

- VG확장하기

 

 

VG, LV 용량 줄이기

1) LV 용량 줄이기

- lvreduce -r -L -<size> <LV>

xfs타입은 용량을 줄일 수 없습니다.

ext4타입은 resize가 가능합니다.

 

2) VG 용량 줄이기

- 테스트를 위해 새로운 500MB짜리 PV를 만들고, VG를 확장합니다.

- LV를 만들고 파일시스템 생성 후 마운트 시킵니다.

- /data4에 파일을 만듭니다.

 

- VG를 줄이기 전에 제거할 PV의 데이터를 새로운 PV로 옮겨야 합니다.

아래 예제는 PV '/dev/vdb4'를 PV '/dev/vdc1'으로 스토리지를 교체하는 예제 입니다.

먼저 새로운 PV를 VG에 추가한 후, pvmove를 이용하여 데이터를 /dev/vdc1으로 옮깁니다.

그리고 /dev/vdb4를 VG에서 제거합니다.

 

PV, VG, LV 삭제하기

삭제는 작은 object부터 삭제해야 합니다. 즉, LV -> VG -> PV 순서로 삭제해야 합니다.

아래와 같이 거꾸로 삭제하려고 하면 에러가 납니다.

 

LV를 삭제하려면 먼저 mount를 해제하여야 합니다.

모든 LV를 삭제한 후에 VG를 삭제할 수 있습니다.

 

이제 PV도 삭제할 수 있습니다.

 

SWAP공간 확장/축소

파일시스템 LV는 온라인 상태에서도 확장할 수 있지만, SWAP용 LV는 오프라인에서만 확장 가능합니다.

따라서 확장 전에 swapoff한 후에 확장할 수 있습니다.

SWAP용 LV도 Linux LVM타입으로 파티션을 만들고, PV, VG, LV를 생성합니다.

 

mkswap으로 swap파일시스템을 만들고, swap공간을 활성화 시킵니다.

영구적으로 설정하려면 /etc/fstab에 추가합니다. systemctl daemon-reload 후 재부팅합니다.

 

1) swap공간 확장하기

swapoff로 비활성한 후 lvextend로 확장합니다. lvextend -r 옵션은 불필요합니다.

 

mkswap으로 다시 swap공간을 만듭니다. 그리고 swapon으로 다시 활성화 시킵니다.

 

2) swap공간 축소하기

swapoff -> lvreduce -> mkswap -> swapon 순서로 합니다.

 

TIP

1) partprobe

partition을 만들었는데 lsblk명령 결과에 안보이는 경우가 있습니다.

이땐 partprobe라는 명령을 수행하면 보입니다.

 

2) vgs

VG의 목록과 주요 정보를 볼 때 사용하십시오.

3) lvs

LV의 목록과 주요 정보를 볼 때 사용하십시오.

 

댓글

클라우드 네이티브 애플리케이션 부트캠프 알림