/ LVM

RHCSA: Configure local storage – Create and remove physical volumes, assign physical volumes to volume groups, and create and delete logical volumes.

LVM Volume Group Physical Volume vgcreate pvcreate pvs lvs vgs Volume Resize rhcsa-new redhat-new lsblk -a pvremove command /dev/sdb /dev/sda vgextend command vgreduce command vgremove command lvcreate command lvremove command
https://4am.kr/rhcsa-configure-local-storage-create-and-remove-physical-volumes-assign-physical-volumes-to-volume-groups-and-create-and-delete-logical-volumes/

RHCSA : 로컬 스토리지 구성 – 물리적 볼륨 생성 및 제거, 물리적 볼륨을 볼륨 그룹으로 할당, 논리적 볼륨 생성 및 삭제

RHCSA 주제입니다. 아래 참조된 사이트를 번역 및 내용 추가하였습니다.

사전 준비사항

시작하기 전에

LVM 관련 용어
  • LVM(Logical Volume Manager): 파티션을 현대적인 방법으로 다루는 시스템 구성요소를 의미한다.
  • PE(physical media): 일반적인 물리적 하드 디스크를 말한다. /dev/hda, /dev/sda 등을 예로 들 수 있다.
  • PV(Physical Volume): 각각의 파티션을 나눈 것을 말한다(/dev/hda1, /dev/hda2 등). 이 때 파일 타입은 lvm을 사용할 수 있게 0x 8e로 설정해야 한다.
  • PE(Physical Extents): 하드 디스크를 제어할 때 블럭(PE) 단위로 제어한다. 블럭 하나는 대개 MB 단위의 크기를 갖는다. 예를 들면 볼륨그룹 크기가 184MB이고, 기본 PE가 4MB일 때 PE의 개수는 46개가 된다. pvcrate에서 옵션으로 -l을 사용하면 pe 단위로 사용하게 된다.
  • VG(Volume Group): PV로 되어 있는 파티션을 그룹으로 설정한다. /dev/hda1을 하나의 그룹으로 만들 수도 있고, /dev/hda1 + /dev/hda2처럼 파티션 두 개를 하나의 그룹으로 만들 수 있다. 그밖에도 다양하게 그룹 설정을 할 수 있다.
  • LV(Logical Volume): 마운트 포인터로 사용할 실질적인 파티션이다. 크기를 바꿀 수 있다.
  • Filesystem: ext2, reiserfs 등의 리눅스에서 사용하는 모든 파일시스템을 사용할 수 있다.
LVM의 장점

LVM은 파티션에만 기반을 둔 이전 시스템에 비해 유연성을 가지고 있다.

  • 관련된 볼륨 그룹에 사용 가능한 공간이 있다면, 논리 볼륨의 크기를 쉽게 늘릴 수 있다.
  • 만약 사용 가능한 공간이 없다면, 새 디스크를 물리 볼륨으로 추가하여 볼륨 그룹으로 추가해 논리 볼륨의 크기를 늘릴 수 있다. 논리 볼륨은 추가적인 연산 없이 2개 또는 그 이상의 디스크로 확장된다.
  • 논리 볼륨을 생성하고 확장하는 과정은 더이상 다운타임을 필요로 하지 않는다.

설정 확인

다른 명령을 실행하기 전에, 먼저 현재 설정에 대해 알 필요가 있다. 다음과 같이 입력하여 확인한다.
[root@server2 ~]# lsblk -a
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   10G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0  9.5G  0 part 
  ├─centos-swap 253:0    0    1G  0 lvm  [SWAP]
  └─centos-root 253:1    0  8.5G  0 lvm  /
sdb               8:16   0   10G  0 disk 
sr0              11:0    1 1024M  0 rom  
[root@server2 ~]# 
lsblk -a의 결과에 대한 설명
  • 가상머신인지 아닌지(vda는 가상머신, sda는 물리서버임을 유추할 수 있다. 하지만 하이퍼바이저마다 다를 수 있다.)알 수 없음.
  • 2개의 디스크가 있다. /dev/sda(10GB)와 dev/sdb(10GB)이다.
  • sda1 파티션은 /boot 아래에 마운트되어 있다.
  • sda2 파티션은 centos라는 볼륨 그룹 안에 2개의 논리 볼륨(lvm) swaproot로 나뉘어져 있다
  • swap 논리 볼륨은 시스템에 의해 1GB가 스왑 공간([SWAP])으로 사용되고 있다.
  • root 논리 볼륨은 / 아래에 8.5GB의 크기로 마운트되어 있다.
  • sda2 파티션에는 사용가능한 여유공간(9.5GB-1GB-8.5GB=0)이 없다.
  • 읽기 전용(Read-Only) 모드(RO=1)인 파티션은 없다(전부 RO=0임).
  • sr0는 제거 가능(ReMovable)(RM=1)한 파티션이다.

노트1: lsblk는 파티션을 다룰 때, 가장 먼저 입력하는 커맨드가 되어야 한다.
노트2: 기본적으로 lsblk 커맨드는 비어있는 장치를 표시하지 않는다. -a 옵션을 추가하여 이 문제를 바로잡아야 한다.

Physical Volume 관리

1. 물리 볼륨(여기서는 /dev/sdb1으로 가정)을 생성하기 위해서는 다음과 같이 입력한다.
[root@server2 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@server2 ~]# 
2. 물리 볼륨들의 리스트를 출력하기 위해서는 다음과 같이 입력한다.
[root@server2 ~]# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sda2  centos lvm2 a--  9.51g    0 
  /dev/sdb1         lvm2 a--  1.00g 1.00g
[root@server2 ~]# 
3. 어떤 볼륨 그룹에도 속하지 않는 물리 볼륨(여기서는 /dev/sdb1으로 가정)을 삭제하기 위해서는 다음과 같이 입력한다.
[root@server2 ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
[root@server2 ~]# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sda2  centos lvm2 a--  9.51g    0 
[root@server2 ~]# 

Volume Group 관리

1. 물리적 사이즈 범위가 8MB인 볼륨 그룹(여기서는 물리 볼륨 /dev/sdb1myvg 볼륨 그룹을 만드는 것을 가정한다)을 생성하려면, 다음과 같이 입력한다.
[root@server2 ~]# vgcreate -s 8m myvg /dev/sdb1
  Volume group "myvg" successfully created
[root@server2 ~]# 
2. 전체 볼륨 그룹의 리스트를 출력하려면, 다음과 같이 입력한다.
[root@server2 ~]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree   
  centos   1   2   0 wz--n-    9.51g       0 
  myvg     1   0   0 wz--n- 1016.00m 1016.00m
[root@server2 ~]# 
3. 존재하는 볼륨 그룹(여기서는 myvg로 가정)에 물리 볼륨(여기서는 /dev/sdb2로 가정)을 추가하려면, 다음과 같이 입력한다.
[root@server2 ~]# vgextend myvg /dev/sdb2
  Volume group "myvg" successfully extended
[root@server2 ~]# vgs
  VG     #PV #LV #SN Attr   VSize VFree
  centos   1   2   0 wz--n- 9.51g    0 
  myvg     2   0   0 wz--n- 1.98g 1.98g
[root@server2 ~]# pvs
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--     9.51g       0 
  /dev/sdb1  myvg   lvm2 a--  1016.00m 1016.00m
  /dev/sdb2  myvg   lvm2 a--  1016.00m 1016.00m
[root@server2 ~]# 
4. 존재하는 볼륨 그룹(여기서는 myvg로 가정)에서 물리 볼륨(여기서는 /dev/sdb2로 가정)을 제거하려면, 다음과 같이 입력한다.
[root@server2 ~]# vgreduce myvg /dev/sdb2
  Removed "/dev/sdb2" from volume group "myvg"
[root@server2 ~]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree   
  centos   1   2   0 wz--n-    9.51g       0 
  myvg     1   0   0 wz--n- 1016.00m 1016.00m
[root@server2 ~]# pvs
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--     9.51g       0 
  /dev/sdb1  myvg   lvm2 a--  1016.00m 1016.00m
  /dev/sdb2         lvm2 a--     1.00g    1.00g
[root@server2 ~]# 
5. 존재하는 볼륨 그룹(여기서는 myvg로 가정)을 제거하려면, 다음과 같이 입력한다.
[root@server2 ~]# vgremove myvg 
  Volume group "myvg" successfully removed
[root@server2 ~]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree   
  centos   1   2   0 wz--n-    9.51g       0 
[root@server2 ~]# pvs
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--     9.51g       0 
  /dev/sdb1         lvm2 a--  1016.00m 1016.00m
  /dev/sdb2         lvm2 a--     1.00g    1.00g
[root@server2 ~]# 

논리 볼륨 관리

1. 논리 볼륨(여기서는 myvg 볼륨 그룹에 512MB 크기의 mylv 논리 볼륨을 생성하는 것을 가정한다)을 생성하려면, 다음과 같이 입력한다.
[root@server2 ~]# lvcreate --size 512M --name mylv myvg
  Logical volume "mylv" created
[root@server2 ~]# 
2. 논리 볼륨의 리스트를 출력하기 위해서는 다음과 같이 입력한다.
[root@server2 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  root centos -wi-ao----   8.51g                                             
  swap centos -wi-ao----   1.00g                                             
  mylv myvg   -wi-a----- 512.00m                                             
[root@server2 ~]# 
3. 논리 볼륨(여기서는 myvg 볼륨 그룹의 mylv 논리 볼륨을 제거하는 것을 가정한다)을 제거하려면, 다음과 같이 입력한다.
[root@server2 ~]# lvremove /dev/myvg/mylv 
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed
[root@server2 ~]# lvs
  LV   VG     Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 8.51g                                             
  swap centos -wi-ao---- 1.00g                                             
[root@server2 ~]# 

추가 자료