LVM(Logical Volume Manager) 의 개념

LVM이란

LVM(Logical Volume Manager)는 리눅스의 저장 공간을 효율적이고 유연하게 관리하기 위한 커널의 한 부분이다.

 

LVM vs. 기존 방식

LVM이 아닌 기존 방식의 경우, 하드 디스크를 파티셔닝 한 후 OS 영역에 마운트하여 read/wirte를 수행했다. 

이 경우 저장 공간의 크기가 고정되어서 증설/축소가 어렵다. 이를 보완하기 위한 방법으로 LVM을 구성할 수 있다.

LVM은 파티션 대신에 volume이라는 단위로 저장 장치를 다룬다. 

스토리지의 확장,변경에 유연하며, 크기를 변경할 때 기존 데이터의 이전이 필요 없다.

 

LVM 사용의 장점

  • 유연한 용량 조절
  • 크기 조절이 가능한 storage pool
  • 편의에 따른 장치 이름 지정
  • disk striping, mirror volume등을 제공

 

LVM 관련 용어 및 구성

img.png
  1. 물리적 볼륨 / PV (Physical Volume)
    • 실제 디스크 장치를 분할한 파티션된 상태를의미한다.
    • PV는 일정한 크기의 PE들로 구성된다.
  2. 물리적 확장 / PE (Physical Extent)
    • PV를 구성하는 일정한 크기의 Block.
    • 보통 1PE는 4MB에 해당한다.
    • PE와 LE는 1:1로 대응한다.
  3. 볼륨 그룹 / VG (Volume Group)
    •  PV들이 모여서 생성되는 단위이다. (모든걸 합친 거대한 지점토 덩어리의 느낌이다)
    • 사용자는 VG를 원하는대로 쪼개서 LV로 만들게 된다.
  4. 논리적 볼륨 / LV (Logical Volume)
    • 사용자가 최종적으로 사용하는 단위로, VG에서 필요한 크기로 할당받아 LV를 생성한다.

 

간단한 실습을 진행해 보자!

 

가상서버에 Attach한 볼륨 확인

[centos@wglee-server ~]$ sudo fdisk -l
 
Disk /dev/vda: 32.2 GB, 32212254720 bytes, 62914560 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: 0x000b6061
 
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    62914526    31456239+  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

 

lvm package 설치

[centos@wglee-server ~]$ sudo yum install lvm2

 

PV 만들기

  1. 블록 스토리지 리스트 확인 
  2. [centos@wglee-server ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 30G 0 disk `-vda1 253:1 0 30G 0 part / vdb 253:16 0 10G 0 disk vdc 253:32 0 10G 0 disk​
  3. 블록 디바이스 초기화
    pvcreate : LVM에 사용될 파티션을 생성하기 위해 물리 디스크를 초기화 한다.
    # vdb와 vdc 볼륨에 대해 pv를 생성한다.
    [centos@wglee-server ~]$ sudo pvcreate /dev/vdb
      Physical volume "/dev/vdb" successfully created.
    [centos@wglee-server ~]$ sudo pvcreate /dev/vdc
      Physical volume "/dev/vdc" successfully created.​
     
  4. 생성한 PV 확인 (pvdisplay) 
    [centos@wglee-server ~]$ sudo pvdisplay
      "/dev/vdc" is a new physical volume of "10.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/vdc
      VG Name
      PV Size               10.00 GiB
      Allocatable           NO
      PE Size               0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               oGJ5YP-EVJo-VJij-nC4o-R1d0-qQz7-QN06by
     
      "/dev/vdb" is a new physical volume of "10.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/vdb
      VG Name
      PV Size               10.00 GiB
      Allocatable           NO
      PE Size               0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               MHxcc6-RJSz-khM2-0V3L-g1Ia-hJb3-MF6rfJ

 

VG 만들기

  1. VG 생성하기 (vgcreate)
    다음과 같이 각각의 PV를 VG로 생성했다.
    # vgcreate [vg이름] [블록스토리지 경로]
    [centos@wglee-server ~]$ sudo vgcreate vg1 /dev/vdb
      Volume group "vg1" successfully created
    [centos@wglee-server ~]$ sudo vgcreate vg2 /dev/vdc
      Volume group "vg2" successfully created​
      
  2. VG 삭제하기 (vgremove)
    하지만 각 PV를 VG로 만들기 보다 하나의 VG로 합치고 싶어졌다.
    그래서 v2를 삭제하는 작업을 했다.
    [centos@wglee-server ~]$ sudo vgremove vg2
      Volume group "vg2" successfully removed​
  3. VG 확장하기 (vgextend)
    vg1에 /dev/vdc 영역을 추가하여 확장하도록 한다.
    [centos@wglee-server ~]$ sudo vgextend vg1 /dev/vdc
      Volume group "vg1" successfully extended
  4. VG 조회 (vgdisplay)
    VG1의 사이즈가 20GB인 것을 볼 수 있다. /etc/vdb와 /etc/vdc가 논리적으로 합쳐져서 하나의 묶음이 되었다.
    #VG size가 늘어났다.
    [centos@wglee-server ~]$ sudo vgdisplay
      --- Volume group ---
      VG Name               vg1
      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               It5WRf-7NyL-fjYi-2Ilc-ubF6-6HaJ-AuPnkU​

 

LV 만들기

  1. LV는 2개 생성해 보도록 한다.
    lvcreate 명령어로 LV를 생성한다. vg1의 리소스를 wglv_1과 wglv_2로 논리적으로 나눈 것을 볼 수 있다.
    # lvcreate -n [LV이름] -L [LV용량] [VG이름].
    [centos@wglee-server ~]$ sudo lvcreate -n wglv_1 -L 15G vg1
      Logical volume "wglv_1" created.
    [centos@wglee-server ~]$ sudo lvcreate -n wglv_2 -L 4.9G vg1
      Rounding up size to full physical extent 4.90 GiB
      Logical volume "wglv_2" created.​
  2. 생성된 LV 확인
    # 생성된 LV 확인
    [centos@wglee-server ~]$ sudo lvdisplay
      --- Logical volume ---
      LV Path                /dev/vg1/wglv_1
      LV Name                wglv_1
      VG Name                vg1
      LV UUID                mKRGia-Hikh-orZ0-CFlw-xMPa-jERA-zsA0Cn
      LV Write Access        read/write
      LV Creation host, time wglee-server.novalocal, 2021-01-17 21:49:41 +0900
      LV Status              available
      # open                 0
      LV Size                15.00 GiB
      Current LE             3840
      Segments               2
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           252:0
     
      --- Logical volume ---
      LV Path                /dev/vg1/wglv_2
      LV Name                wglv_2
      VG Name                vg1
      LV UUID                Pcy1Zz-THrt-LCCE-JYTC-zeGb-hOI3-F8gviF
      LV Write Access        read/write
      LV Creation host, time wglee-server.novalocal, 2021-01-17 21:49:51 +0900
      LV Status              available
      # open                 0
      LV Size                4.90 GiB
      Current LE             1255
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           252:1​

 

Mount 

  1. LV를 실제로 사용할 수 있도록 파일 시스템과 디렉터리 영역을 연결하도록 한다. 
  2. 마운트를 하기에 앞서서 lsblk 명령어로 디바이스 정보를 확인한다.
    # 방금 생성한 LV는 타입이 lvm이다. 
    
    [centos@wglee-server ~]$ lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda          253:0    0   30G  0 disk
    `-vda1       253:1    0   30G  0 part /
    vdb          253:16   0   10G  0 disk
    `-vg1-wglv_1 252:0    0   15G  0 lvm
    vdc          253:32   0   10G  0 disk
    |-vg1-wglv_1 252:0    0   15G  0 lvm
    `-vg1-wglv_2 252:1    0  4.9G  0 lvm​
  3. 실제 LV의 위치는 /dev/vg1 디렉터리에 있다.
    # 실제 LV의 위치는 /dev/vg1에 있다.
    [centos@wglee-server ~]$ ls /dev/vg1
    wglv_1  wglv_2
    
    # 참고 ) VG에 매핑된 LV은 다음 경로에서 확인된다. 
    [centos@wglee-server ~]$ ls /dev/mapper
    control  vg1-wglv_1  vg1-wglv_2​
  4. File System 만들기
    # mount [option] [device] [directory]
    [centos@wglee-server ~]$ sudo mkfs.ext4 /dev/vg1/wglv_1
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    983040 inodes, 3932160 blocks
    196608 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2151677952
    120 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
     
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done​
  5. LV를 마운트할 디렉터리 생성
    # mkdir -p 옵션 : 중간 디렉토리도 자동 생성한다.
    [centos@wglee-server ~]$ sudo mkdir -p /data/wglv_1
    [centos@wglee-server ~]$ sudo mkdir -p /data/wglv_2​
  6. Mount
    물론 재부팅 시에도 마운트 상태를 유지하려면 fstab에 정보를 등록해야 한다.
    [centos@wglee-server ~]$ sudo mount /dev/vg1/wglv_1 /data/wglv_1
    [centos@wglee-server ~]$ sudo mount /dev/vg1/wglv_2 /data/wglv_2
    [centos@wglee-server ~]$ lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda          253:0    0   30G  0 disk
    `-vda1       253:1    0   30G  0 part /
    vdb          253:16   0   10G  0 disk
    `-vg1-wglv_1 252:0    0   15G  0 lvm  /data/wglv_1
    vdc          253:32   0   10G  0 disk
    |-vg1-wglv_1 252:0    0   15G  0 lvm  /data/wglv_1
    `-vg1-wglv_2 252:1    0  4.9G  0 lvm  /data/wglv_2​
  7.  
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

서버관리

번호 제목 글쓴이 날짜 조회수
24 리눅스 TCP, UDP 방화벽 포트 오픈 확인 관리자 12-19 10
23 Excessive resource usage: 관리자 12-16 17
22 [SCP] 리눅스 터미널 환경에서 다른서버와 파일 복사 관리자 11-04 112
21 리눅스 메모리 부족 문제 해결을 위한 팁 관리자 12-14 1,049
20 Clamav clamd 프로세스가 CPU 및 메모리 사용량이 너무 높으면 관리자 11-30 919
19 리눅스 서버 cache memory 정리 관리자 10-18 569
18 리눅스 메모리 사용량 100% 관리자 10-18 612
17 Excessive resource usage: avahi 관리자 10-16 479
16 [Linux] Out Of Memory 발생 시 메모리 확인 방법 관리자 10-11 629
15 서버 정보 확인 관리자 08-09 396
14 [CentOS] YUM 초기 설치 상태로 초기화 방법 관리자 06-28 2,125
13 리눅스 / 명령어 / du / 디렉토리와 파일 용량 확인하는 명령어 관리자 06-16 1,426
12 CentOS 7에서 CentOS 스트림 8로 변환 관리자 06-02 5,954
11 Docker mac에 설치해서 컨테이너 실행해보기 관리자 05-31 1,340
10 Docker 설치 및 Nvidia docker로 GPU 사용하기 관리자 05-31 776
9 LVM(Logical Volume Manager) 의 개념 관리자 05-31 693
8 Docker 기본 명령어 관리자 05-10 591
7 MySQL/MariaDB, 슬로우 쿼리 원인 분석 및 성능 튜닝하기 관리자 05-09 920
6 리눅스 crontab 사용법 관리자 04-21 613
5 Centos Swap Space 추가 방법, 예제, 명령어 관리자 02-22 831