본문 바로가기

01. operation/ii. base command

lvm 구성

※경고 : 아래 명령어들은 디스크를 초기화할수 있으니 사전에 충분한 인지가 필요합니다.


※본 문서는 Redhat 5.x 버전이 기준이 되어집니다

redhat 4.x 버전부터는 LVM2를 지원하고 있으며 글을 쓰는시점에서 LVM1 언급하지 않습니다. (http://www.redhat.com/magazine/009jul05/features/lvm2/)

 


(참고 : https://access.redhat.com/knowledge/docs/ko-KR/Red_Hat_Enterprise_Linux/5/pdf/Cluster_Logical_Volume_Manager/Red_Hat_Enterprise_Linux-5-Cluster_Logical_Volume_Manager-ko-KR.pdf)


LVM구축시 사용되어지는 용어와 명령어


physical medi) : 물리적 하드 디스크를 말한다. (/dev/hda, /dev/sda)

*PV(Physical Volume) : 파티션을 나눈 것을 말한다(/dev/ hda1, /dev/sda2)

PE(Physical Extents) : 하드 디스크를 제어할 때 블럭(PE) 단위로 제어한다.(PV의 크기가 1G이고 PE 블록의 크기가 4M 이면 PE는 모두 250개)

*VG(Volume Group) : PV로 되어 있는 파티션을 그룹으로 설정한다. (PV를 LVM에 쓸려면 LINUX에서는 8e type이다)

*LV(Logical Volume) : 마운트 포인트로 사용할 실질적인 파티션이다.


위에서 * 되어진 부분이 실제로 LVM작업시에 사용되어지는 부분들이다.


LVM1과 LVM2의 차이.

1. 허용용량 차이입니다. LVM1은 테라바이트, LVM2는 엑사바이트 지원이 가능합니다.

※키로 -> 메가 -> 기가 -> 테라 -> 페타 -> 엑사 -> 제타 -> 요타

2. GPFS 파일 시스템 지원 여부

3. 스트라이핑 저장 방식

4. 최대 PV 개수


SoftRaid + LVM 구성

LVM에서 미러기능을 제공을 한다(!) - 그런데 왜 softRaid가 별도로 존재하는것일까? (보통 /dev/md0가 softRaid이다) 

데이터의 보존을 이유로 SoftRaid + LVM을 같이 사용하기도 한다.

 

LVM 논리적 볼륨

선형 (linear) : 서로용량이 틀린 PV를 결합하여 사용 (가장 일반적인 방법)

스트파이프 (striped) : 디스크에 저장시 RR방식을 채택하여 저장 (*I/O 분산에 유리 : 즉 개별적인 PV에 저장)

미러 (mirrored) : 하나의 미러 leg에 장애가 발생할 경우, 논리 볼륨은 선형 볼륨으로 되어 액세스 가능



LVM 마운트 따라하기


============================================================================================

물리 볼륨 관리 (PV)

파티션 유형 설정 : pvcreate를 사용할수 있도록 setting

fdisk명령을 통해 Id type를 8e로 변경하는 작업 (#8e = Linux LVM)


#>fdisk /dev/sdb


The number of cylinders for this disk is set to 79408.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

  (e.g., DOS FDISK, OS/2 FDISK)


Command (m for help): n

Command action

  e  extended

  p  primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-79408, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-79408, default 79408):


Command (m for help): t

Partition number (1-4): 1

Hex code (type L to list codes): 8e

Changed system type of partition 1 to 8e (Linux LVM)


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks. 


위 처럼 작업을 하고 나와 fdisk로 확인하면 아래 처럼 보여질겁니다.

# fdisk -l


Disk /dev/sda: 40.9 GB, 40982151168 bytes

16 heads, 63 sectors/track, 79408 cylinders

Units = cylinders of 1008 * 512 = 516096 bytes


  Device Boot    Start      End    Blocks  Id  System

/dev/sda1            1      389    196024+  8e  Linux LVM 


그럼 실제 pv를 생성합니다.

#>pvcreate /dev/sda1

vgscan -- reading all physical volumes (this may take a while...)

vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created

vgscan -- WARNING: This program does not do a VGDA backup of your volume group 


pvcreate -- ERROR: "/etc/lvmtab" doesn't exist; please run vgscan 혹시 오류가 나면 아래 명령어를 통해 PV를 만들어줍니다.

#>touch /etc/lvmtab

#>vgscan

============================================================================================

볼륨 그룹 (디스크 묶기)

#>vgcreate vg01 /dev/sda1 (vg01이라는 볼륨그룹을 생성합니다, 묶는 파티션은 sda1만 생성합니다)

vgcreate -- INFO: using default physical extent size 4 MB

vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte

vgcreate -- doing automatic backup of volume group "vg01"

vgcreate -- volume group "vg01" successfully created and activated 


#>vgdisplay (볼륨 생성 확인)

--- Volume group ---

VG Name              vg01

VG Access            read/write

VG Status            available/resizable

VG #                  0

MAX LV                256

Cur LV                0

Open LV              0

MAX LV Size          255.99 GB

Max PV                256

Cur PV                2

Act PV                2

VG Size              500 MB #실제 VG에서 사용되어질 용량

PE Size              4 MB

Total PE              92

Alloc PE / Size      0 / 0

Free  PE / Size      92 / 368 MB

VG UUID              Ywc9nQ-8tzD-vPdN-1LR2-iVcz-1b65-OJ6ssO 

============================================================================================

로지컬 파티션(마운트 포인트 만들기)

#>lvcreate -L 500M -n data01 vg01

lvcreate -- doing automatic backup of "vg01"

lvcreate -- logical volume "/dev/vg01/data01" successfully created 


#lvcreate에서 미러링, 스트라이핑, 선형 방식 선택이 가능하며 "-n" 옵션을 따른다

미러링 : cluster에 한....

선형 : 일반적인 익스텐드 맵핑

스트라이핑 : RR방식의 데이터 저장

ex> 스트라이핑 : lvcreate -n stripedlv -i 2 -l 64 -L 500M data01 vg01



#>lvscan 확인하기 

lvscan -- ACTIVE            "/dev/vg01/data01" [500 MB]

lvscan -- 1 logical volumes with 500 MB total in 1 volume group

lvscan -- 1 active logical volumes


============================================================================================

포맷팅 (실제 마운트 하기 위해서 ext3 혹은 ext4로 포맷팅합니다)

#>mkfs.ext3 /dev/vg01/data01

#>mount /dev/vg01/data01 /data

============================================================================================

파티션 추가 (볼륨추가)

순서는 아래와 같습니다.

1. PE를 잡아주고 (맨 처음 fdisk작업)

2. VG에 extend

 #>vgextend vg01 /dev/sdc1

vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte

vgextend -- doing automatic backup of volume group "vg02"

vgextend -- volume group "vg02" successfully extended 

3. vg확인 

 #>vgscan에서 VG Size확인

4. lv 늘리기

 #>lvextend -L 용량 /dev/vg01/data01

lvextend -- extending logical volume "/dev/vg02/lvol1" to 500 MB

lvextend -- doing automatic backup of volume group "vg02"

lvextend -- logical volume "/dev/vg02/lvol1" successfully extended 

#>resize2fs /dev/vg01/data01#왜 이것에 대해서 설명한곳이 그다지 없는지는 모르겠다.

5. lv용량 줄이기
#>lvreduce -L 용량 /dev/vg01/data01

============================================================================================
pvcreate : 물리적 볼륨을 생성 (pvcreate /dev/sdc1)
pvmove : 명령으로 데이터를 다른 물리 볼륨으로 옮겨면서 지운다
vgscan : 디스크 볼륨을 검색하여 lvmtab 생성
vgcreate : 볼륨그룹을 생성한다. (vgcreate vg01 /dev/sdc1 /dev/sdc2)
vgdisplay : 볼륨그룹 속성과 정보를 보여준다
vgextend : 볼륨을 확장할때 사용되어진다 (vgextend vg01 /dev/sdd1)
vgcfrestore : 볼륨 그룹에 있는 아카이브에서 모든 물리 볼륨으로 볼륨 그룹의 메타 데이터를 복구
vgrename : 기존의 볼륨 그룹 이름을 변경
vgreduce : vg에서 pv를 제거한다 (vgreduce /dev/sdd1) #선행작업으로 pvmove를 필히 해야한다
vgchange 볼륨그룹 속성을 변경한다 (vgchange -a y vg01 : 볼륨그룹 활성화 vgchange -a n vg01 : 비활성화 vgchange -l 100 vg01 LV의 개수를 100개로 늘린다)
lvcreate : 볼륨그룹안에 LV를 생성한다 (lvcreate -L+500M -l 200 -n data01 vg01 : vg01이라는 VG그룹에서 data01이라는 이름으로 만든다)
lvscan : LV를 찾는다
lvdisplay : LV의 정보를 표현해준다
lvextend : 볼륨그륩을 확장한다 (lvextend -L 300M /dev/vg01/data01)
lvreduce : 볼륨그룹을 축소한다 (lvreduce -L 300M /dev/vg01/data01 ※테스트를 더 해봐야겠지만, 실제로 축소가 되어지지 않는다?) 
vgs : vg정보
lvs : lvm 정보
pvs : pv 정보
============================================================================================
LVM version 1과 LVM version 2 호환은 vgconvert를 통해 가능하며 메타데이터를 변환한다 (단 스냅샷, 클러스터 지원은 제외) 
============================================================================================

'01. operation > ii. base command' 카테고리의 다른 글

lvm 복구 테스트 (pv loss)  (0) 2022.05.17
iso 이미지를 통해 yum update 방법 (yum repository)  (0) 2012.09.19
리눅스 램 드라이브 (램 디스크)  (0) 2010.07.15
ps  (0) 2009.07.27
sar  (0) 2009.07.27