1. LVM이란?
커널에 구현된 기능으로 여러 개의 HDD 용량을 합쳐서 하나의 파일 시스템으로 구성하고 스토리지 확장 및 변경에 있어 유연한 대처를 할 수 있다
1. 구성
LVM 은 이름처럼 파티션대신 볼륨이라는 단위로 저장 장치를 다룰 수 있으며, 물리 디스크를 볼륨 그룹으로 묶고 이것을 논리 볼륨으로 분할하여 관리합니다. 스토리지의 확장이나 변경시 서비스의 변경을 할 수 있으며 특정 영역의 사용량이 많아져서 저장 공간이 부족할 경우에 유연하게 대응할 수 있습니다.
그림 예)
2. LVM 순서 및 용어 정리
1) LVM구성을 위하여 파티션 작업
하드디스크를LVM 으로 만들 수 있게 파티션 생성 또는 변경
2) PV(Physical Volume) : 물리적인 볼륨 생성 작업
/dev/sda1, /dev/sdb1, /dev/sdc1 같은 실제 파티션들을 말합니다
블록 장치 전체 또는 그 블록 장치를 이루고 있는 파티션들을 LVM에서
사용할 수 있게 변환하는 것으로 LVM으로 쓰기 위해 PV로 초기화 합니다.
(PV는 일정한 크기의 PE(Physical Extent)들로 구성)
- PE( Physical Extent) : 물리적 확장
PV를 구성하는 일정한 크기의 블록으로 기본크기는 4MB입니다
3) VG ( Volume Group) : 볼륨 그룹 작업
Physical Volume을 합친 그룹을 말하며(PE가 모여서 생성되는 큰 덩어리?)
PV들의 집합으로 PV들로 초기화된 장치들은 VG로 통합되게 되며 이 공간을 쪼개서 LV로 만들 수 있습니다
4) LV (Logical Volume) : 논리적 볼륨
합쳐진 Volume Group을 쪼개어 실제 사용하는 볼륨을 의미 하며 사용자가 최종적으로 사용하게 되는
논리적인 스토리지 입니다.
3. LVM 구성 예제
현재 시스템은 일반 파일시스템으로 구성되어 있으며 /home 파티션을 LVM 으로 만들고 파일시스템 생성 합니다.
참고로 /home 에 데이터가 있는 경우 모두 삭제 되므로 중요 데이터 있는 경우 꼭 사전에 백업을 해주어야 합니다
파티션 상태 확인
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 xfs 30G 1.3G 29G 5% /
/dev/sda1 xfs 1014M 140M 875M 14% /boot
/dev/sda3 ext4 68G 55M 65G 1% /home
1) LVM 패키지 확인하고 설치 안되어 있으면 설치 합니다.
- 설치 여부 확인
# rpm -qa |grep lvm
- 패키지 설치
# yum install lvm2
- 재부팅시 자동 실행 되도록 설정
# systemctl enable lvm2-monitor
2) 파티션 수정 작업
LVM구성을 위하여 먼저 디스크를 확인 합니다.( fdisk -l /dev/sda )
상태 확인시 LVM 구성이 안 되어 있어 LVM으로 변경 작업을 진행 합니다.
여기서는 대상 파티션인 /dev/sda3 (/home) 파티션만 LVM으로 변경 합니다
- 파티션 상태 확인
# fdisk -l /dev/sda
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 65013759 31457280 83 Linux
/dev/sda3 65013760 209715199 72350720 8e Linux
- 파티션 변경 작업
# fdisk /dev/sda
Command (m for help): **p**
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000c8e42
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 65013759 31457280 83 Linux
/dev/sda3 65013760 209715199 72350720 83 Linux
Command (m for help): **t**
Partition number (1-3, default 3): **3**
Hex code (type L to list all codes): **8e**
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): **p**
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000c8e42
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 65013759 31457280 83 Linux
/dev/sda3 65013760 209715199 72350720 8e Linux LVM
Command (m for help): **w**
3) 물리적볼륨 생성(PV)
블록 장치 전체 또는 그 블록 장치를 이루고 있는 파티션들을 LVM에서 사용할 수 있게 변환합니다.
PE(Physical Extent) : PV를 구성하는 일정한 크기의 블록으로 LVM2에서 기본크기는 4MB입니다
3-1) PV생성 (pvcreate)
# pvcreate /dev/sda3
WARNING: ext4 signature detected on /dev/sda3 at offset 1080.
Wipe it? [y/n]: y Wiping ext4 signature on /dev/sda3. Physical volume "/dev/sda3" successfully created.
# pvcreate /dev/sda3
WARNING: ext4
signature detected on /dev/sda3 at offset 1080.
Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sda3.
Physical volume "/dev/sda3" successfully created.
pvcreate /dev/sda3
WARNING: ext4 signature detected on /dev/sda3 at offset 1080.
Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sda3.
Physical volume "/dev/sda3" successfully created.
3-2) PV 생성 확인
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 lvm2 --- <69.00g <69.00g
# pvscan PV /dev/sda3
lvm2 [<69.00 GiB]Total: 1 [<69.00 GiB] / in use: 0 [0 ] / in no VG: 1 [<69.00 GiB]
# pvdisplay
VG NamePV Size <69.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated
PE 0
PV UUID dFUFjg-ETp6-aCkV-UHpw-HpP7-e40T-7L00p3
3-3) 볼륨그룹(VG) 생성
# 볼륨 그룹(VG)은 많은 물리 볼륨을 묶고 장치 파일 시스템에 /dev/VG_NAME와 같은 식으로 보여준다.
- VG 생성 하기
# vgcreate [볼륨이름] [포함되는 장치명]
vgcreate vg-home /dev/sda3Volume group "vg-home" successfully created
- 현재 VG 상태 확인
# vgs
VG #PV #LV #SN Attr VSize VFreevg-home 1 0 0 wz--n- <69.00g <69.00g
# vgscan
Reading volume groups from cache.Found volume group "vg-home" using metadata type lvm2
# vgdisplay
--- Volume group ---
VG Name vg-home
System
IDFormat lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0O
pen LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <69.00 GiB
PE Size 4.00 MiB
Total PE 17663
Alloc PE / Size 0 / 0
Free PE / Size 17663 / <69.00 GiB
VG UUID MESw3F-j0gs-yzOo-bwR9-34nn-u0dP-qHOHEC
4) 논리 볼륨 생성하기
# 볼륨 그룹 생성이 완료 되었으면 논리 볼륨(Logical Volumes)을 생성 합니다.
- LV 생성 하기
# lvcreate -n datalv L 70GB testvg --> testvg의 70G를 datalv에 할당
# lvcreate -n lv-home -l +100%FREE vg-home --> 남은 용량을 lv-home 에 할당함
# lvcreate
lvcreate -n lv-home -l +100%FREE vg-homeLogical volume "lv-home" created.
- 생성된 LV 상태 확인 (lvs, lvdisplay, lvscan)
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv-home vg-home -wi-ao---- <69.00g
# lvscan
ACTIVE '/dev/vg-home/lv-home' [<69.00 GiB] inherit
# lvdisplay
--- Logical volume ---
LV Path /dev/vg-home/lv-home
LV Name lv-home
VG Name vg-home
LV UUID AY0b7g-L0pN-DrTm-Lhgb-vqU5-T2W1-0cFe4W
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-05-11 16:20:59 +0900
LV Status available
# open 0
LV Size <69.00 GiB
Current LE 17663
Segments 1
Allocation inheritRead ahead sectors auto
- currently set to 8192
Block device 253:0
5) 파일시스템 생성 및 마운트
5-1) 생성된 LV를 파일시스템 생성 및 마운트
# lvdisplay 에서 나오는 LV Path를 ext4 타입으로 파일시스템 포맷 한 후 /home 에 마운트 합니다.
**
# mkfs.ext4 /dev/vg-home/lv-home
**mke2fs 1.42.9 (28-Dec-2013)Discarding
device blocks: done
Filesystem label=OS
type: LinuxBlock
size=4096 (log=2)Fragment size=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks4521984 inodes, 18086912 blocks904345 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=2166358016552 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424 Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done
**# mount -t ext4 /dev/vg-home/lv-home /home**
**# df -Th
**Filesystem
Type Size Used Avail Use% Mounted on/dev/sda2
xfs 30G 1.3G 29G 5% /devtmpfs devtmpfs 484M 0 484M 0%
/devtmpfs tmpfs 493M 0 493M 0%
/dev/shmtmpfs tmpfs 493M 13M 480M 3%
/runtmpfs tmpfs 493M 0 493M 0%
/sys/fs/cgroup/dev/sda1 xfs 1014M 140M 875M 14%
/boottmpfs tmpfs 99M 0 99M 0% /run/user/0*
/dev/mapper/vg--home-lv--home ext4 68G 53M 65G 1% /home*
5-2) 자동 마운트를 위하여 /etc/fstab 에 등록 해줍니다.
# /etc/fstab 확인
/dev/vg-home/lv-home /home ext4 defaults 1 2