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)
'엔지니어 > Linux' 카테고리의 다른 글
Apache traffic server-5.2.1 install (0) | 2017.01.13 |
---|---|
SOLR 5.5.2 단독형 설치 (with jdbc, arirang.lucene-analyzer) (0) | 2017.01.11 |
본딩 해쉬 알고리즘 관련한 글 (0) | 2017.01.10 |
Linux Perfoment Tools (0) | 2017.01.10 |
pinpoint application 항목 제거 (0) | 2017.01.10 |