리눅스 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
씬 프로비저닝 (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은 한 번 익숙해지면 서버 스토리지 관리의 필수 도구가 됩니다. 특히 운영 중인 서버에서 무중단 디스크 확장이 필요할 때 진가를 발휘합니다. 스냅샷을 활용한 데이터베이스 백업 자동화와 함께 사용하면 더욱 강력한 스토리지 관리 체계를 갖출 수 있습니다.
댓글남기기