본문 바로가기

엔지니어/Linux

LVM(Logical Volume Manage)이란?

728x90
반응형

LVM(Logical Volume Manage)이란?

 

-------------------------------------------------------------------------------------------

(Virtual Volume Technology) -

 LVM(Logical Volume Manager), RAID(Redudant Array Inexpensive Disk)

가상 볼륨 방식 장점: (ㄱ) 확장성, (ㄴ) 안정성, (ㄷ) 편의성(관리 용이)

 

물리적인 디스크를 논리적 볼륨그룹으로 구성해서 이 논리적인 볼륨그룹 내에 사용자가 원하는 크기 만큼의 논리볼륨을 할당하여 사용하는 방법으로, 여러 개의 디스크를 하나의 논리적인 볼륨그룹(VG)으로 구성할 수 있으며, 각 논리볼륨(LV)는 독립적이므로, 하나의 디스크에도 여러 가지의 파일 시스템을 설치할 수 있다. 또한 디스크의 용량증설이 요구 될 경우에도 볼륨그룹에 물리볼륨(PV)만 추가하여 용량증설이 가능하고, 데이터량이 감소하여 더 이상 많은 양의 저장공간이 필요 없는 경우, 볼륨그룹에 속한 물리볼륨 개수를 축소하여 용량 감소가 가능하다.

 

Physical Volume

PV는 하나의 물리적인 Disk에 LVM을 사용할 수 있도록 LVM 데이터 구조를 생성한 것을

말한다.

디스크에 PV가 생성되면 LVM은 디스크를 하나의 물리볼륨으로 간주하게 되고, 볼륨그룹

에 포함시킬 수 있게 된다. 따라서 하나의 디스크를 몇 개의 섹션은 논리볼륨으로, 몇

개의 섹션은 전체디스크로 관리하는 등의 방법은 적용 할 수 없다.

 (예) 물리적인 디스크(EX:/dev/sda) or 물리적인 파티션(EX:/dev/sda1)

 

PE (Physical Extent) : PV가 갖는 일정한 블록

디스크에 PV를 생성하게 되면, LVM은 주소를 지정할 수 있는 PE(Physical Extent)라는 단위로 각 물리 디스크를 나눈다. extent는 주소 0번부터 시작하여 1씩 증분하며 순차적으로 디스크에 할당되고, PE의 크기는 볼륨 그룹을 만들 때 구성할 수 있다. 그리고 각 PE의 크기는 default 값이 4MB이며, 이 값은 필요에 따라 볼륨 그룹을 생성 시 1MB에서 256MB 사이의 값으로 지정할 수 있다.

 

Volume Group

VG는 하나 또는 그 이상의 PV를 포함하며, LV를 생성할 수 있는 Volume Group의 집합이

다.

vg00은 부팅정보와 OS가 있는 root Volume Group으로 변경이 불가능하다.

관리자가 관리상의 편의를 위해 DB의 경우에는 vgdb##, 일반적인 파일시스템의 경우에는

vgfil##등으로 VG이름을 지정하여 사용한다.

(예) 가상 디스크

 

 

 

Logical Volume

LV는 하나 또는 그 이상의 PV로 구성되어 있는 VG 공간을 전체 또는 분할하여 일반 파일

시스템, swap or dump area, raw disk로 사용할 수 있도록 논리적으로 할당한공간이다.

운영 중 공간이 부족할 경우 볼륨그룹에 속해 있는 또 다른 물리볼륨을 사용하여 확장이

가능하고, 필요하다면 크기를 변경하거나 다른 디스크로 데이터를 옮길 수 있다.

Volume Group vg00에 속한 Logical Volume lvol1,lvol2,lvol3은 각각 /stand, primary

swap, / 디렉토리로 변경이 불가능 하다.

(예) 가상 파티션

 

LE (Logical Extent) : LV가 갖는 일정한 블록

디스크에 PV를 생성하고, 생성된 PV를 이용하여 VG(Volume Group)을 구성한 후 이 VG에 LV(Logical Volume)를 생성할 수 있다. LV의 기본 할당 단위를 LE(Logical Extent)라고 하는데, 이 LE는 PV 생성 시 나누어진 PE 영역과 Mapping된다. 따라서 PE의 크기가 4MB이면 LE의 크기도 4MB가 된다. 그리고 LV의 크기는 구성된 LE의 개수 또는 할당할 디스크 용량에 의해 결정된다.

-------------------------------------------------------------------------------------------

 

(LVM 작업 순서)

Ÿ System Partition ID 변경(fdisk CMD)

-> PV 생성(pvcreate CMD)

-> VG 생성(vgcreate CMD)

-> LV 생성(lvcreate CMD)

-> F/S 생성(mkfs CMD)

 

-> 마운트(mount CMD, /etc/fstab)

 

-------------------------------------------------------------------------------------------

 

fdisk /dev/sdc

t -> L

기억해야할 system ID : 82, 83, 8e, fd 

 

물리적인 볼륨 생성

생성한 디스크를 LVM으로 사용하기 위한 선처리 작업으로 물리적인 볼륨으로 생성해 준다.

 

(명령어 형식)

 PV 생성

# pvcreate /dev/sda1

# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1

# pvcreate /dev/sd[abc]1

# pvcreate /dev/sda /dev/sdb /dev/sdc

 

 PV 삭제

# pvremove /dev/sda1

# pvremove /dev/sda1 /dev/sdb1 /dev/sdc1

# pvremove /dev/sd[abc]1

 

 PV 정보 확인

# pvs

# pvscan

# pvdisplay (# pvdisplay /dev/sdc1)

# lvmdiskscan

 

[참고] PV 생성시 PV 개수가 많은 경우의 예

# pvcreate /dev/sd[abcde][12]

or

# pvcreate /dev/sda1 /dev/sda2 /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2 .....

 

 

물리적인 볼륨 그룹생성(VG: Volume Group)

물리적인 볼륨을 생성하였으면 각각의 물리적인 볼륨을 하나의 그룹으로 생성해 준다.

 

(명령어 형식)

 VG 생성

# vgcreate vg1 /dev/sdc1 /dev/sdd1 /dev/sde1

# vgcreate vg1 /dev/sd[cde]1

 

 VG 삭제

# vgremove vg1

# vgremove /dev/vg1

 

 VG에 디스크 추가/제거

# vgextend vg1 /dev/sdf1

# vgreduce vg1 /dev/sdf1

 

 VG 이름 변경

# vgrename /dev/vg1 /dev/vg1_backup

# vgrename vg1 vg1_backup

 

 VG 정보 확인

# vgs

# vgscan

# vgdisplay (# vgdisplay vg1)

 

논리 볼륨 생성(LV: Logical Volume)

논리 볼륨은 LVM에서 생성하는 파티션이므로 단일 파티션 또는 다중 파티션으로 나눌 수 있는데, 이때 논리 볼륨을생성하는 방법은 용량 단위 또는 PE수를 통해 생성해 줄 수 있다.

 

(명령어 형식)

 LV 생성

# lvcreate -L 10G vg1                       /* LV 이름 자동 생성 : lvol#(용량 10G) */

# lvcreate -L 1500M -n lv1 vg1

# lvcreate -L 1500 -n lv1 vg1                             /* 용량 단위가 없으면 MB */

# lvcreate -l 60%VG -n lv1 vg1

# lvcreate -l 100%FREE -n lv1 vg1  

 

[참고] -L 옵션으로 잘못 사용하는 경우

# lvcreate -L 100%FREE -n lv3 vg3

Invalid argument 100%FREE

Error during parsing of command line.

 

 LV 삭제

# lvremove /dev/vg1/lv1

 

 LV 이름 변경

# lvrename /dev/vg1/lv1 /dev/vg1/lv2

# lvrename vg1 lv1 lv2                                             /* vg1(lv1 -> lv2) */

 

 LV 공간 늘리기/줄이기

# lvextend -L 12G /dev/vg1/lv1                           /* lv1 용량을 12G로 맞춤 */

# lvextend -L +1G /dev/vg1/lv1                         /* lv1 용량을 1G 만큼 추가 */

# lvextend -l +100%FREE /dev/vg1/lv1

 

# lvreduce -L -3G /dev/vg1/lv1

# lvreduce -l -3 /dev/vg1/lv1       /* lv1 용량을 3 LE(Logical Extend)만큼 감소 */

 

 LV 정보 확인

# lvs

# lvscan

# lvdisplay

 

-------------------------------------------------------------------------------------------

LVM 작업방식

(ㄱ) 파티션 작업(Partition ID (83 -> 82))

# fdisk /dev/sdc

# pvcreate /dev/sdc1

# vgcreate vg1 /dev/sdc1

# lvcreate -l 100%FREE -n lv1 vg1

(ㄴ) 파일시스템 작업

# mkfs.ext3 /dev/vg1/lv1

(ㄷ) 마운트 작업

# vi /etc/fstab

# mkdir /oracle

# mount /oracle

-------------------------------------------------------------------------------------------

 

 

LVM 관리

정보를 자세히 보는 방법

(ㄱ) -v, -vv, -vvv, -vvvv 옵션 사용

# lvcreate -L 50MB new_vg

# lvcreate -v -L 50MB new_vg

# lvcreate -vvvv -L 50MB new_vg

(ㄴ) command --help

# pvcreate --help

# vgcreate --help

# lvcreate --help

(ㄷ) manual page

# man pvcreate

# man vgcreate

# man lvcreate

 

관리 작업(시나리오 작업)

파일시스템 용량을 늘리려는 경우

 

# lvs

# df -h /lv1 /;v2

# dd if=/dev/zero of=/lv2/file1 bs=1M count=400

if = input file

of = output file

bs = block size

count = 개수

# vgs

# lvextend -l +100%FREE /dev/vg1/lv2

# resize2fs /dev/vg1/lv2

# df -h /lv2

 

VG에 PV를 추가하는 경우

VG에 PV 추가하고 LV에 용량늘리기

vg1(sdc1, sdd1, sde1) + sdf1

# df -h /lv1

# dd if=/dev/zero of=/lv1/file2 bs=1M count=500

# dd if=/dev/zero of=/lv1/file3 bs=1M count=500

# df -h /lv1

# vgs

# pvs

# vgextend vg1 /dev/sdf1

# pvs

# vgs

# lvextend -l +100%FREE /dev/vg1/lv1

# resize2fs /dev/vg1/lv1

# df -h /lv1

 

 

LV 용량 감소

/lv1 - 용량감소

/lv2 - 용량증설

 

파일시스템 언마운트

# umount /lv1

파일시스템 점검

# e2fsck -f /dev/vg1/lv1  ( -f 옵션 : 모든상태에 대해서 점검한다. )

파일시스템 용량 줄이기

# resize2fs -p /dev/vg1/lv1 700M  ( 줄이고 싶은 용량과 )

LV 용량 줄이기

# lvreduce -L 700M /dev/vg1/lv1  ( reduce 용량은 반드시 같아야 한다.)

 

 

VG안의 PV를 새로운 PV로 교체

VG 안에 PV를 새로운 PV로 교체하는 이유

 성능이 좋은 디스크로 교체하는 경우(10000 rpm -> 15000 rpm)

 용량이 큰 디스크로 교체하는 경우(72G SCSI -> 250G SAS)

 

(전제조건) 새로운 디스크(EX: /dev/sdg, /dev/sdh)가 추가 되어 있고

하나의 파티션(/dev/sdg1, /dev/sdh1)으로 설정

(ㄱ) 서버 전원 OFF

# poweroff

(ㄴ) 새로운 디스크 장착

VMWare > VM > Setting > Add > Hard Disk > Create a new virtual disk > SCSI > 1G

(ㄷ) 서버 전원 ON 후 새로 장착된 디스크 확인

# ls -l /dev/sd? (# fdisk -l)

brw-r----- 1 root disk 8, 0 Apr 29 14:50 /dev/sda

brw-r----- 1 root disk 8, 16 Apr 29 14:50 /dev/sdb

brw-r----- 1 root disk 8, 32 Apr 29 14:50 /dev/sdc

brw-r----- 1 root disk 8, 48 Apr 29 14:50 /dev/sdd

brw-r----- 1 root disk 8, 64 Apr 29 14:50 /dev/sde

brw-r----- 1 root disk 8, 80 Apr 29 14:50 /dev/sdf

brw-r----- 1 root disk 8, 96 Apr 29 14:50 /dev/sdg 

brw-r----- 1 root disk 8, 112 Apr 29 14:50 /dev/sdh

 

# pvs

# fdisk /dev/sdg

-> /dev/sdg1(System partition ID : 8e)

# fdisk –l /dev/sdg (# fdisk -l | grep LVM)

# pvcreate /dev/sdg1

# pvs

# vgextend vg1 /dev/sdg1

# pvs

# pvmove /dev/sdf1 /dev/sdg1

# pvs

# vgreduce vg1 /dev/sdf1

# pvs

 

 

LV/VG/PV 삭제

 작업 순서

- umount 작업

- LV 삭제(lvremove CMD)

- VG 삭제(vgremove CMD)

- PV 삭제(pvremove CMD)

 

 

LV Striping 구성

LVM Stripe 방식의 특성

- 성능이 좋아진다, 안정성은 떨어진다, 디스트 사용 효율은 보통이다 

 

(명령어 형식)

# lvcreate -L 50G -i2 -I64 -n lv1 vg1   /* -I : 대문자 i */

-> -i 옵션: number of stripes

-> -I 옵션: stripe size(KB) - 기본값이 64KB

-> 2개의 PV에 걸쳐서 stripe 크기는 64KB 크기로 vg1에 lv1 구성

 

# lvextend -L +10G /dev/vg1/lv1

# lvextend -l +100%FREEE /dev/vg1/lv1

 

# lvcreate -L 1.5G -i 3(stripe의 갯수) -I 64(stripe size) -n stripelv vg1

 

데이터 저장순서   pv1             pv2           pv3

     1                2              3

     4                5              6

     ...

구성

# pvcreate /dev/sd[cde]1 (# pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1)

# vgcreate vg1 /dev/sd[cde]1 (# vgcreate vg1 /dev/sdc1 /dev/sdd1 /dev/sde1)

# lvcreate -L 1.5G -i 3 -I 64 -n stripelv vg1 /* 대문자 i */

# pvs

 

확장

# lvextend -l +100%FREE /dev/vg1/stripelv

# pvcreate /dev/sd[fgh]1

# vgextend vg1 /dev/sd[fgh]1

# lvextend -L +1.5G /dev/vg1/stripelv

 

 

LV Mirroring 구성

Mirror 방식의 특성

- 성능(r/w) : read 좋아질 수 있는 가능성이 있다, write : 떨어진다, 안정성 : 가장 좋다,

 디스트 사용효율 : 떨어진다.

 

(명령어 형식)

# lvcreate -L 50G -m 1(Mirroring 방식 옵션) -n lv1 vg1

-> -m 옵션: number of copies

# lvcreate -L 12G -m1 -n lv1 vg1 /dev/sdc1 /dev/sdd1

# lvextend -L +5G /dev/vg1/mirrorlv —nosync(용량 증설 시 데이터 동기화 실행x)

 

 

 

tune2fs -l /dev/VG1/LV1

df -h ( mount)

반응형