2 분 소요

LVM은 리눅스의 유연한 디스크 관리 시스템으로, 파티션과 달리 서비스 중단 없이 볼륨을 확장하거나 스냅샷을 생성할 수 있습니다. 운영 중인 서버에서 디스크 공간이 부족할 때 LVM을 활용하면 무중단으로 문제를 해결할 수 있습니다.

데이터 서버 이미지

LVM으로 유연하게 관리되는 스토리지 시스템

LVM 기본 구조

물리 디스크 (/dev/sdb, /dev/sdc)
    └── PV(Physical Volume)
         └── VG(Volume Group: vg_data)
              ├── LV(Logical Volume: lv_app)  → /dev/vg_data/lv_app
              └── LV(Logical Volume: lv_log)  → /dev/vg_data/lv_log

디스크 추가 및 PV 생성

# 새 디스크 확인
lsblk
fdisk -l /dev/sdb

# 파티션 없이 디스크 전체를 PV로 사용
pvcreate /dev/sdb

# 파티션으로 PV 생성
fdisk /dev/sdc   # n → p → 1 → 기본값 → 기본값 → t → 8e → w
pvcreate /dev/sdc1

# PV 목록 확인
pvs
pvdisplay /dev/sdb

VG에 디스크 추가 (온라인 확장)

# 기존 VG에 새 PV 추가 (서비스 중단 불필요)
vgextend vg_data /dev/sdb

# VG 정보 확인
vgs
vgdisplay vg_data

# 사용 가능한 PE(Physical Extent) 확인
vgs -o +free

LV 확장 (온라인)

# 모든 여유 공간을 LV에 추가
lvextend -l +100%FREE /dev/vg_data/lv_app

# 특정 크기만큼 추가
lvextend -L +50G /dev/vg_data/lv_app

# 특정 크기로 설정
lvextend -L 200G /dev/vg_data/lv_app

# LV 확장 후 파일시스템도 즉시 확장
lvextend -L +50G -r /dev/vg_data/lv_app   # -r: --resizefs 자동 실행

# 파일시스템만 별도 확장
# ext4:
resize2fs /dev/vg_data/lv_app

# xfs:
xfs_growfs /mount/point

LV 축소 (ext4만 가능, 위험 작업)

# 반드시 언마운트 후 진행 (xfs는 불가)
umount /app

# 파일시스템 검사
e2fsck -f /dev/vg_data/lv_app

# 파일시스템 먼저 축소
resize2fs /dev/vg_data/lv_app 100G

# 그 다음 LV 축소
lvreduce -L 100G /dev/vg_data/lv_app

# 재마운트
mount /dev/vg_data/lv_app /app

LVM 스냅샷

스냅샷은 백업 전 일관된 상태를 보장하거나 롤백 포인트를 만들 때 유용합니다.

# 스냅샷 생성 (10GB 스냅샷 공간 할당)
lvcreate -L 10G -s -n lv_app_snap /dev/vg_data/lv_app

# 스냅샷 목록 확인
lvs -a | grep snap
lvdisplay /dev/vg_data/lv_app_snap

# 스냅샷 마운트 (읽기 전용 백업)
mkdir -p /mnt/snap
mount -o ro,nouuid /dev/vg_data/lv_app_snap /mnt/snap

# 스냅샷으로 백업
rsync -av /mnt/snap/ /backup/app-$(date +%Y%m%d)/
umount /mnt/snap

# 스냅샷 제거
lvremove /dev/vg_data/lv_app_snap

스냅샷으로 롤백

# 서비스 중지
systemctl stop myapp

# LV 언마운트
umount /app

# 스냅샷으로 원본 복원
lvconvert --merge /dev/vg_data/lv_app_snap

# LV 재마운트 및 서비스 시작
mount /dev/vg_data/lv_app /app
systemctl start myapp

서버 코드 이미지

LVM 볼륨 관리 명령어 실행 화면

씬 프로비저닝 (Thin Provisioning)

# 씬 풀 생성 (100GB 풀)
lvcreate -L 100G --thinpool tp_pool vg_data

# 씬 볼륨 생성 (실제 공간보다 크게 할당 가능)
lvcreate -V 200G --thin -n lv_app_thin vg_data/tp_pool

# 씬 볼륨 정보
lvs -a vg_data

LVM 캐시 (SSD 캐싱)

# SSD를 캐시 PV로 추가
pvcreate /dev/nvme0n1
vgextend vg_data /dev/nvme0n1

# 캐시 풀 생성 (SSD 디바이스에)
lvcreate -L 20G --type cache-pool \
  --cachemode writethrough \
  -n lv_cache_pool \
  vg_data /dev/nvme0n1

# 기존 LV에 캐시 연결
lvconvert --type cache \
  --cachepool vg_data/lv_cache_pool \
  vg_data/lv_app

주요 LVM 명령어 정리

# 전체 LVM 상태 한눈에 확인
pvs; vgs; lvs

# 상세 정보
pvdisplay; vgdisplay; lvdisplay

# PV/VG/LV 삭제 순서
lvremove /dev/vg_data/lv_app
vgremove vg_data
pvremove /dev/sdb

# LVM 메타데이터 백업
vgcfgbackup vg_data
# 저장 위치: /etc/lvm/backup/vg_data

# LVM 메타데이터 복원
vgcfgrestore vg_data

LVM은 한 번 익숙해지면 서버 스토리지 관리의 필수 도구가 됩니다. 특히 운영 중인 서버에서 무중단 디스크 확장이 필요할 때 진가를 발휘합니다. 스냅샷을 활용한 데이터베이스 백업 자동화와 함께 사용하면 더욱 강력한 스토리지 관리 체계를 갖출 수 있습니다.

댓글남기기