블록스토리지

블록스토리지 활용 - LVM(Logical Volume Mamangent) 생성

블록스토리지 LVM 활용

 LVM이란 2개이상의 물리적인 디스크영역을 1개의 논리그룹으로 만들어 원하는 파티션 형태로 운영하는 기술을 말합니다.

즉, 여러개의 디스크를 레이드도구 없이 1개의 마운트 포인트로 활용 할 수 있어 블록스토리지에 확장 / 축소에 활용하게되면 서비스 운영을 좀더 유연하게 할수 있습니다.

 

좀더 자세한 개념설명은 아래 링크를 통해 확인하시기 바랍니다.

참고 : https://access.redhat.com/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html-single/Logical_Volume_Manager_Administration/index.html

 

 

IWINV 가상서버에서는 블록스토리지 확장은 콘솔상에서 컨트롤이 가능하지만 축소는 현재 막고있습니다. 기술적으로 불가한 사항은 아니지만 예외처리 항목이 다수 존재하기에 데이타 무결성을 위해 현재 제공하지 않고 있습니다.

※ 본문에서 말하는 Volume과 블록스토리지는 동일한 의미입니다.

 

볼륨 확장은 LVM 파일시스템을 적용하지 않고도 아래와 같은 방법으로도 가능하니 참고하시기 바랍니다.

Volume 확장 : https://help.iwinv.kr/manual/read.html?idx=440

 

단, 축소를 할경우에는 사용하려는 Volume 크기만큼 신규 신청후 데이타를 이전하고 기존 Volume을 삭제(해지) 하는순으로 진행하기에 데이타양에 따라 시간도 오래걸리며 불편할수 있습니다.

이러한 부분에 보완책으로 Volume을 LVM 파일시스템으로 운영하게 되면 다양한 측면에서 장점이 있습니다.

1. 유연한 용량 
   :: 논리 볼륨을 사용할 때, 디스크 및 파티션을 단일 논리 볼륨으로 모을 수 있으므로 파일 시스템을 여러 디스크에 걸쳐 늘릴 수 있습니다.

2. 크기 조정 기능한 스토리지 풀(Pool)
   :: 기본 디스크 장치를 다시 포맷하거나 파티션하지 않고도 간단한 명령으로 논리 볼륨 크기를 늘리거나 줄일 수 있습니다.

3. 온라인 데이타 재배치
   :: 시스템이 활성화되어 있는 동안에도 데이타를 다른 물리적인 디스크로 옮길수가 있습니다. 즉 디스크를 삭제하기 전 핫스왑이 가능한 디스크 비우기를 할 수 있습니다.

4. 편의에 따라 장치 이름 지정
   :: 논리 스토리지 볼륨은 사용자 정의 그룹에서 관리되며, 편의에 따라 이름을 지정할 수 있습니다.

5. 디스크 스트라이핑
   :: 두 개 이상의 디스크에 걸쳐 데이타를 스트라이핑하는 논리 볼륨을 생성할 수 있어 처리량 성능을 높일수 있습니다.

6. 미러 볼륨
   :: 논리 볼륨은 편리한 방법으로 데이타에 미러를 설정하게 합니다.

7. 볼륨 스냅샷
   :: 논리 볼륨을 사용하여 지속적인 백업을 위한 장치 스냅샷을 찍거나 또는 실제 데이터에 영향을 미치지 않고 변경 효과를 테스트할 수 있습니다.

 

 

 

여기서는 2개의 Volume 을 가지고 구성하는 예제입니다.

본문에서는 CentOS 7 버전으로 작성되었지만 CentOS6 / RHEL 및 Ubuntu 계열에서도 크게 다르지 않습니다.

 

 

:: 패키지 설치 

# yum install lvm*

 

 

먼저 IWINV 콘솔페이지를 통해서 2개의 블록 스토리지를 추가한 후 /vdb, /vdc Volume 정보를 확인하고 8e (Linux LVM) 파일시스템으로 파티션타입을 정의해줍니다.

# fdisk -l

Disk /dev/vda: 26.8 GB, 26843545600 bytes, 52428800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0000aebb

Device Boot Start End Blocks Id System
/dev/vda1 * 2048 52420094 26209023+ 83 Linux

Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 


# fdisk /dev/vdb

Disk /dev/vda: 26.8 GB, 26843545600 bytes, 52428800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0000aebb

Device Boot Start End Blocks Id System
/dev/vda1 * 2048 52420094 26209023+ 83 Linux

Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): L


Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

==> /vdb, /vdc 동일하게 진행합니다.

 

 

[PV] Physical Volmue 생성
 :: 물리적인 디스크를 LVM 데이타 구조를 사용할 수 있도록 생성 

# pvcreate /dev/vdb1
Physical volume "/dev/vdb1" successfully created.

# pvdisplay
"/dev/vdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID jkjofL-jnZO-VAzo-c8Ii-fI5l-tCav-PI2XrK


나머지 디스크도...
# pvcreate /dev/vdc1
Physical volume "/dev/vdc1" successfully created.
# pvdisplay
"/dev/vdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID jkjofL-jnZO-VAzo-c8Ii-fI5l-tCav-PI2XrK

"/dev/vdc1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdc1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID YL3t0T-XFio-YjbI-uSJH-MvEA-IqJW-3bQo6v

# pvscan
PV /dev/vdb1 lvm2 [10.00 GiB]
PV /dev/vdc1 lvm2 [10.00 GiB]
Total: 2 [20.00 GiB] / in use: 0 [0 ] / in no VG: 2 [20.00 GiB]

 

[VG] Volume Group 생성 
 :: 1개이상의 PV들이 속해있는 그룹을 칭하며 LV(Logical Volume) 를 생성할 수 있는 그룹

# vgcreate vg0 /dev/vdb1
Volume group "vg0" successfully created

# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 10.00 GiB
PE Size 4.00 MiB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / 10.00 GiB
VG UUID 263672-aYYl-g2Bx-n4K8-lp5U-5z7q-1lt3jK

vdc1을 추가해 Volume 확장
# vgextend vg0 /dev/vdc1
Volume group "vg0" successfully extended
# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID 263672-aYYl-g2Bx-n4K8-lp5U-5z7q-1lt3jK

 

 

[LV] Logical Volume 생성
  :: PV, VG로 구성되어있는 공간을 전체 또는 분할하여 사용할수 있도록 논리적으로 할당한 공간 

논리 볼륨은 시스템에 존재하는 최종 메타 장치이며, 보통 파일 시스템에 만듭니다. 볼륨 그룹에 만들고 관리하며 /dev/VG_NAME/LV_NAME 형식으로 나타납니다. 볼륨 그룹처럼, 논리 볼륨에 사용하는 이름은 관리자가 결정하며 여기서는 LV를 따로 파티션을 나눠사용할게 아니라 100% 전체 용량으로 하였습니다.

# lvcreate -l 100%FREE -n DATA vg0
Logical volume "DATA" created.

별도 파티션을 나눠 용량을 지정하려면....
ex) lvcreate -L 5G -n test vg0


# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/DATA
LV Name DATA
VG Name vg0
LV UUID YDk7N7-EC5L-grLM-DJgc-76dE-u0kO-30Tbvu
LV Write Access read/write
LV Creation host, time mojily-2719.novalocal, 2017-05-17 09:20:42 +0900
LV Status available
# open 0
LV Size 19.99 GiB
Current LE 5118
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 252:0

 

기본적인 설정은 다 끝났으며 Volume을 마운트하여 사용하면 됩니다.

# fdisk -l
.................
Disk /dev/mapper/vg0-DATA: 21.5 GB, 21466447872 bytes, 41926656 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


# mkfs.ext4 /dev/mapper/vg0-DATA
# mkdir /DATA
# mount /dev/mapper/vg0-DATA /DATA/
# df -h |grep DATA
/dev/mapper/vg0-DATA 20G 45M 19G 1% /DATA

 

기존 데이타가 있는 상태에서 LVM으로의 활용은 데이타 망실등 위험할수 있으니 최초에 블록 디스크를 어떤식으로 활용하고 운영할지에 대해 정책을 충분히 체크하시고 적용하시기 바랍니다.

이후 문서에는 본격적으로 LVM을 유연하게 사용할수 있도록 블록스토리지 확장 / 축소에 대해서 다루도록 하겠습니다.