LVM 이야기입니다.

반드시 나오는 RHEL 7의 스토리지 실습 부분이고

생성 , 삭제 , 볼륨 증감 등의 기본적인 운영 커맨드를 숙지해야 합니다.

LVM 의 구조나 상세한 이해를 적는 공간은 아니고, 실전용 실습 용도로 설명합니다.

필수 용어

PV(Physical Volume): LVM 사용을 위해 설정한 최초의 raw 디스크. 

(/dev/sdb1, /dev/sdb2 등). fdisk /dev/sdb 파티셔닝 중 반드시 t 커맨드로 8e ID 부여해야 함. 

PE(Physical Extents): 블럭(PE) 단위로 제어할 때 사용. 

pvcrate에서 옵션으로 -l 을 사용. 

VG(Volume Group): PV 를 모아 하나의 논리적 그룹을 형성. 

( RAID 로 비유하면 물리디스크를 RAID 0,1 등의 Array 로 묶은 그룹 ) 

LV(Logical Volume): VG에서 분할. 실제 마운트 포인트로 사용되는 LVM 파티션. 당연한 이야기지만 VG 보다 클 수는 없다. 

간단 이해의 흐름 ) PV Drive 들을 모아서 VG 를 생성. VG에서 LV 를 분할. 

RAID 과정 생각해도 됩니다. PV가 물리디스크. VG가 Array. LV가 파티션. 


LVM 실습  

/dev/sdb   8GB 포맷되지 않은 디스크. 

1) LV name = LV01

2) VG name = VG01

3) LV size = 50PE  ( PE Size = 20MB ) 

4) LV 형식은 EXT3 

5) /mnt/lvm 에 mount하고, 부팅시 자동으로 마운트 되게 하시오.

6) LV 크기를 70PE 로 확장하시오.

7) LV 크기를 60PE 로 줄이시오.


1) LVM 사용할 디스크 확인 하기

= /dev/sdb   미 파티셔닝 상태로 8GB 디스크 입니다.  

root@TEST1:~# fdisk -l


Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 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: 0x0004769e


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      616447      307200   83  Linux

/dev/sda2          616448     2713599     1048576   82  Linux swap / Solaris

/dev/sda3         2713600    16777215     7031808   83  Linux


Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0x6682c1f3


   Device Boot      Start         End      Blocks   Id  System



2) n 눌러서 8GB 통으로 파티션 만들어 주고 Type 변경 

= PV 생성 준비 완료! ( 초급 학습이므로 단일디스크 사용합니다 ) 

= fdisk 종료하기 전 w 로 싱크하는거 잊지 마시구요. 


Command (m for help): t

Selected partition 1

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

Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p


Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0x6682c1f3


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    16777215     8387584   8e  Linux LVM


PV 생성 완료!


3) PV 지정

= 단일디스크라 별다른 옵션 줄 게 없습니다. 만듭시다!

= 생성 후 확인은 pvs (간략 ) 와 pvdisplay ( 상세 )  두 가지 명령어가 있습니다. 

   vg, lv 도 똑같이 있으니, 활용해주세요. 

형식) pvcreate PV이름

root@TEST1:~# pvcreate /dev/sdb1

  Physical volume "/dev/sdb1" successfully created.


root@TEST1:~# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sdb1     lvm2 ---  <8.00g <8.00g

root@TEST1:~# pvdisplay
  "/dev/sdb1" is a new physical volume of "<8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <8.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               H5G2FT-10IQ-VZwq-QZh7-gdnR-LhNN-6VMFgX

이제 LVM 용도로 사용할 디스크 하나가 준비가 완료되었습니다.


4) VG 생성

PV 의 용량만큼 VG를 생성하거나, 여러 PV모아 그룹화할 수도 있습니다.

지금은 PV 를 그대로 VG로 만듭니다. 

조건에 VG Name 이 있는데 VG부터는 Name 이 필요합니다. 

PE 조건도 있는데 --help 옵션으로 보시면 -s 옵션이 PE(=블럭)크기 지정입니다.

 형식) vgcreate 만들VG이름 PV ...  옵션..

 [ -s|--physicalextentsize Size[m|UNIT] ]

root@TEST1:~# vgcreate vg01 /dev/sdb1 -s 20M

  Volume group "vg01" successfully created

root@TEST1:~# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg01   1   0   0 wz--n- <7.99g <7.99g

root@TEST1:~# vgdisplay
  --- Volume group ---
  VG Name               vg01
  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               <7.99 GiB
  PE Size               20.00 MiB
  Total PE              409
  Alloc PE / Size       0 / 0
  Free  PE / Size       409 / <7.99 GiB
  VG UUID               BwpXMG-oVag-8zgT-IBZg-Ctw2-3mR7-CvdDrp


5) LV 생성

이제 VG 에서 LV 만 파티션화해서 Mount 하면 실제 LVM 파티션 사용하는 겁니다.

만들 LV 용량을 지정해야 하는데 블럭단위니까 PE*수량 만큼 -l 옵션으로 지정해도 되고, 대문자 -L 10G 같은 식으로 직접 용량을 지정할 수도 있습니다.

위에도 적었지만 LV의 용량은 VG 를 넘어설 수 없습니다. 

형식) lvcreate -L|--size Size[m|UNIT] VG  ( -l 소문자일 경우 PE 수량 )

LV Name 이 조건에 있기 때문에 -n 만들LV이름  을 부가옵션으로 줍시다.


root@TEST1:~# lvcreate -l 50 vg01 -n lv01     PE 50개만큼의 용량

  Logical volume "lv01" created.


root@TEST1:~# lvs

  LV   VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  lv01 vg01 -wi-a----- 1000.00m    PE가 20MB 이므로 * 50 = 1000M


root@TEST1:~# lvdisplay

  --- Logical volume ---

  LV Path                /dev/vg01/lv01             중요. 실제 Mount Point.

  LV Name                lv01

  VG Name                vg01

  LV UUID                TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm

  LV Write Access        read/write

  LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900

  LV Status              available

  # open                 0

  LV Size                1000.00 MiB

  Current LE             50

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     8192

  Block device           253:0



6) 마운트

LV Path 를 마운트해야 합니다 fdisk 로 보이는 mapper 는 마운트가 안됩니다 ;;

lvdisplay 는 아무리봐도 안질리니까 꼭 100번 보세요.

문제 조건에 /mnt/lvm 에 마운트하라고 했으니 디렉토리를 만들어 줍니다.

마운트 전에 조건에 있는 EXT3 형식으로 포맷해줘야 마운트 됩니다. 

root@TEST1:~# lvdisplay

  --- Logical volume ---

  LV Path                /dev/vg01/lv01

  LV Name                lv01

  VG Name                vg01

  LV UUID                TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm

  LV Write Access        read/write

  LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900

  LV Status              available

  # open                 0

  LV Size                1000.00 MiB

  Current LE             50

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     8192

  Block device           253:0


root@TEST1:~# mkdir -p /mnt/lvm

root@TEST1:~# mkfs.ext3 /dev/vg01/lv01

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

64000 inodes, 256000 blocks

12800 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=264241152

8 block groups

32768 blocks per group, 32768 fragments per group

8000 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376


Allocating group tables: done

Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done


root@TEST1:~# mount /dev/vg01/lv01 /mnt/lvm

root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  969M  1.3M  918M   1% /mnt/lvm


마운트가 완료 되었습니다.


7) 부팅시 자동 마운트

LV_PATH 로 /etc/fstab 에 추가. ( 틀리면 부팅안되니까 꼭 재부팅해서 확인해보세요 ) 

root@TEST1:~# vi /etc/fstab


/dev/vg01/lv01                  /mnt/lvm                ext3    defaults        0 0

~


8) 용량을 70PE 로 확장

lvextend 라는 명령어가 있습니다.  create 때랑 똑같아요.

-l PE 수 만큼 입력해주면 됩니다

df 쳐보면 실시간 반영은 안되므로 파일시스템의 리사이징 명령을 내려줘야 합니다.

( EX : xfs 인 경우 xfs_grown LV_PATH 치면 즉시 반영.  ext 시스템은 resize2fs LV_PATH ) 

root@TEST1:~# lvextend -l 70 /dev/vg01/lv01

  Size of logical volume vg01/lv01 changed from 1000.00 MiB (50 extents) to <1.37 GiB (70 extents).

  Logical volume vg01/lv01 successfully resized.


root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  969M  1.3M  918M   1% /mnt/lvm

용량이 1기가에서 그대로 안늘어나있음 


root@TEST1:~# resize2fs /dev/vg01/lv01     // 파일시스템에서 리사이징 체크

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/vg01/lv01 is mounted on /mnt/lvm; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/vg01/lv01 is now 358400 blocks long.


root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  1.4G  1.5M  1.3G   1% /mnt/lvm

정상적으로 늘어난 것 확인. 


9) 용량을 60PE 로 감소

TIP) XFS 파일시스템으로 되어있는 LV는 용량 축소가 안됩니다....

lvextend 다음에는 lvreduce 라는 명령이 있습니다. 줄여줍시다..

reduce 는 주의해야 할 점이 많습니다

1) 반드시 먼저 파일시스템에서 먼저 리사이징으로 줄여줍니다.

lv부터 줄이면 데이터 날아갑니다. 

( /etc/lvm/backup 이용한 복원이 가능하지만 RHCSA 의 영역이 아님 ) 

2) lvreduce 사용 전 반드시 umount 해야 합니다.

3) lvreduce 옵션에 -r ( resize ) 옵션을 꼭 주세요. 안주면 무조건 DATA Loss물어봄.

4) 용량 감소는 가급적 PE 보다 실용량 ( -L ) 으로 하는게 좋습니다. 


ex)

umount /dev/vg01/lv01 또는 /mnt/lvm

resize2fs -f /dev/vg01/lv01 1000M       파일 시스템 사이즈를 1000M 으로 변경

lvreduce -r -L -500M /dev/vg01/lv01    LVM 에서 실제로 변경. ( 1500 --> 1000 )



root@TEST1:~# lvreduce -r -l 60 /dev/vg01/lv01

  WARNING: Reducing active and open logical volume to 1.17 GiB.

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg01/lv01? [y/n]:

umount 안하면 저런 DATA DESTROY 라는 무시무시한 상황이 발생!! 

다만 시험에선 데이터 필요없으니까 그냥 해도 됩니다.  ㅎ



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,