LVM 아키텍처 및 작동 원리
논리 볼륨 관리자(Logical Volume Manager, LVM)는 물리적 디스크와 파일 시스템 사이에 추상화 계층을 제공합니다. 이 구조를 통해 관리자는 파티션 재구성을 하지 않고도 볼륨 크기를 동적으로 조정할 수 있으며, 여러 물리 장치를 하나의 논리적 저장소로 통합할 수 있습니다. LVM은 기존의 정적인 파티셔닝 방식에서 벗어나 서버에 새로운 디스크를 추가하더라도 기존 데이터를 이동하지 않고도 스토리지 풀을 확장할 수 있게 해줍니다.
핵심 구성 요소
- 물리적 장치(Physical Device): 파티션(
/dev/sdXN), 전체 디스크, RAID 어레이 또는 SAN 스토리지 등 실제 저장 매체입니다. - 물리 볼륨(PV, Physical Volume): 물리 장치를 LVM에서 사용할 수 있도록 초기화한 단위입니다.
pvcreate명령어로 생성됩니다. - 볼륨 그룹(VG, Volume Group): 하나 이상의 PV를 결합하여 형성되는 논리적 저장 풀입니다. 마치 가상의 큰 디스크처럼 동작하며, 여기서 논리 볼륨을 할당합니다.
- 논리 볼륨(LV, Logical Volume): VG 위에 생성되며, 일반 파티션처럼 사용됩니다. 이 위에 파일 시스템을 생성하고 마운트합니다.
- 물리 익스텐트(PE, Physical Extent): PV에서 할당 가능한 최소 단위 블록으로, 기본값은 4MiB입니다.
- 논리 익스텐트(LE, Logical Extent): LV 내부에서 사용되는 블록 단위이며, 같은 VG 내에서는 PE와 크기가 일치합니다.
데이터 흐름은 다음과 같습니다: 디스크 → 파티션 → PV → VG → LV → 파일 시스템 → 마운트.
LVM의 주요 이점
- 여러 디스크를 하나의 대용량 볼륨처럼 사용 가능.
- 파일 시스템이 여러 물리 디스크에 걸쳐 존재할 수 있음.
- 온라인 상태에서 볼륨 크기 조정이 가능 (특히 확장 시).
- 익스텐트 기반 할당으로 조각화 최소화.
- 스냅샷 기능을 통해 일관성 있는 백업 지원.
중요한 점은 LVM이 소프트웨어 기반의 볼륨 관리 도구이며, RAID와는 목적과 계층이 다릅니다. 실제 디스크 고장을 방지하기 위해선 RAID를 기반에 두고, 그 위에 LVM을 적용하는 것이 권장됩니다.
LVM 명령어 개요
| 기능 | PV 관리 | VG 관리 | LV 관리 |
|---|---|---|---|
| 스캔 | pvscan | vgscan | lvscan |
| 생성 | pvcreate | vgcreate | lvcreate |
| 정보 확인 | pvdisplay / pvs | vgdisplay / vgs | lvdisplay / lvs |
| 제거 | pvremove | vgremove | lvremove |
| 확장 | - | vgextend | lvextend |
| 축소 | - | vgreduce | lvreduce |
간단한 상태 확인에는 pvs, vgs, lvs를, 자세한 정보에는 pvdisplay 등을 사용합니다.
실습 예제: LVM 설정 및 운영
가상 환경에서 /dev/sdb 디스크에 4개의 2GiB 파티션(sdb1~sdb4)을 생성했다고 가정합니다.
1단계: 물리 볼륨 생성
# 파티션을 LVM 용도로 초기화
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
# 상태 확인
pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
...
2단계: 볼륨 그룹 생성
# 기본 PE 크기(4MiB)로 vg1 생성
vgcreate vg1 /dev/sdb1
# PE 크기를 16MiB로 지정해 vg2 생성
vgcreate -s 16M vg2 /dev/sdb2
# 결과 확인
vgs
VG #PV #LV VSize VFree
vg1 1 0 <2.00g <2.00g
vg2 1 0 1.98g 1.98g
3단계: 논리 볼륨 생성
# 64MiB 크기의 LV 생성
lvcreate -L 64M -n data_lv vg1
# 익스텐트 단위로 생성 (vg1의 PE=4MiB이므로 16 * 4 = 64MiB)
lvcreate -l 16 -n log_lv vg1
# 확인
lvs
LV VG Attr LSize
data_lv vg1 -wi-a--- 64.00m
log_lv vg1 -wi-a--- 64.00m
4단계: 파일 시스템 생성 및 마운트
# ext4 파일 시스템 생성
mkfs.ext4 /dev/vg1/data_lv
# 마운트 디렉터리 생성 및 연결
mkdir /mnt/data
mount /dev/vg1/data_lv /mnt/data
# 부팅 시 자동 마운트 등록
echo "/dev/vg1/data_lv /mnt/data ext4 defaults 0 0" >> /etc/fstab
논리 볼륨 크기 조정
확장 (온라인)
# 볼륨 그룹 여유 공간 확인
vgs
# LV 확장 + 파일 시스템 자동 조정
lvextend -L 500M -r /dev/vg1/data_lv
# 이후 df로 확인
df -h /mnt/data
축소 (주의 필요)
ext4는 축소가 가능하지만, 반드시 마운트 해제 후 수행하거나 -r 옵션을 사용해야 합니다. XFS는 축소를 지원하지 않습니다.
# ext4 볼륨 축소 예시
lvreduce -L 200M -r /dev/vg1/data_lv
XFS의 경우 lvreduce 후 xfs_growfs는 축소를 수행할 수 없으며, 데이터 손실 위험이 있으므로 추후 재구성이 필요합니다.
볼륨 그룹 확장 및 축소
VG 확장
# 새로운 PV를 기존 VG에 추가
vgextend vg1 /dev/sdb3
# 확인
vgs # VG 크기 증가 확인
VG 축소
사용 중인 PV를 제거하려면 먼저 데이터를 다른 PV로 이전해야 합니다.
# sdb1의 데이터를 sdb3으로 이동
pvmove /dev/sdb1 /dev/sdb3
# 이동 후 sdb1을 VG에서 분리
vgreduce vg1 /dev/sdb1
# 이제 sdb1은 자유 상태
pvs
LVM 삭제 절차
- 마운트 해제:
umount /mnt/data - 논리 볼륨 제거:
lvremove /dev/vg1/data_lv - 볼륨 그룹 제거:
vgremove vg1 - 물리 볼륨 초기화 해제:
pvremove /dev/sdb1
SSM 도구를 이용한 통합 스토리지 관리
System Storage Manager(SSM)은 LVM, Btrfs, 디스크 정보를 통합적으로 관리할 수 있는 편의 도구입니다.
# 설치
yum install -y system-storage-manager
# 장치 목록 확인
ssm list dev
# 볼륨 그룹 목록
ssm list pool
# 논리 볼륨 목록
ssm list vol
# 한 번에 LVM 생성 및 마운트
ssm create -s 1G -n webdata --fstype xfs -p webpool /dev/sdb4 /var/www/html
SSM은 PV/VG/LV 생성, 파일 시스템 포맷, 마운트까지 자동으로 처리하여 복잡한 절차를 단순화합니다.