LVM 기초 — 유연한 논리 볼륨 관리자 완전 정복
LVM의 PV/VG/LV 3계층 구조 이해, pvcreate·vgcreate·lvcreate로 볼륨 생성, 온라인 확장·스냅샷까지 LVM 기초를 체계적으로 설명합니다.
지난 글에서 스왑 메모리를 다뤘습니다. 이번에는 리눅스 스토리지 관리의 핵심인 **LVM(Logical Volume Manager)**을 소개합니다. LVM은 물리 디스크를 추상화해 서비스 중단 없이 볼륨 크기를 유연하게 조정할 수 있게 해주는 커널 레이어입니다.
전통적인 파티션 방식의 가장 큰 단점은 / 파티션이 꽉 찼는데 옆 파티션에 공간이 남아있어도 못 쓴다는 점입니다. LVM은 이 문제를 해결합니다. 여러 물리 디스크를 하나의 볼륨 그룹으로 통합하고, 그 안에서 논리 볼륨을 필요에 따라 동적으로 할당합니다.
LVM 3계층 구조
| 계층 | 이름 | 설명 |
|---|---|---|
| PV | Physical Volume | 물리 디스크·파티션을 LVM에 등록 |
| VG | Volume Group | PV를 통합한 논리적 저장 풀 |
| LV | Logical Volume | VG에서 할당한 실제 사용 단위 (파티션 역할) |
LVM 설치 확인 및 현황 파악
# LVM 도구 설치 확인
which pvcreate vgcreate lvcreate
# 현재 PV/VG/LV 전체 현황
sudo pvs # Physical Volumes
sudo vgs # Volume Groups
sudo lvs # Logical Volumes
# 상세 정보
sudo pvdisplay
sudo vgdisplay
sudo lvdisplay
LVM 구성 실습 — 처음부터 만들기
# 1. 파티션 또는 디스크를 PV로 초기화
sudo pvcreate /dev/sdb1 /dev/sdc1
# 2. PV를 하나의 VG로 묶기
sudo vgcreate vg_data /dev/sdb1 /dev/sdc1
# 3. VG에서 LV 생성
sudo lvcreate -L 50G -n lv_root vg_data
sudo lvcreate -L 100G -n lv_home vg_data
# 남은 공간 전부 사용
sudo lvcreate -l 100%FREE -n lv_extra vg_data
# 4. LV에 파일시스템 생성
sudo mkfs.ext4 /dev/vg_data/lv_root
sudo mkfs.xfs /dev/vg_data/lv_home
# 5. 마운트
sudo mount /dev/vg_data/lv_root /
LV의 장치 경로는 /dev/VG이름/LV이름 또는 /dev/mapper/VG이름-LV이름 두 가지 형식으로 접근합니다.
온라인 LV 확장 (서비스 무중단)
ext4 파일시스템은 마운트 상태에서 확장할 수 있습니다.
# 방법 1: lvextend + resize2fs 분리
sudo lvextend -L +20G /dev/vg_data/lv_home
sudo resize2fs /dev/vg_data/lv_home
# 방법 2: -r 옵션으로 한 번에
sudo lvresize -L +20G -r /dev/vg_data/lv_home
# XFS는 xfs_growfs 사용
sudo lvextend -L +20G /dev/vg_data/lv_xfs
sudo xfs_growfs /mnt/xfs_mount
VG 확장 — 새 디스크 추가
VG에 공간이 부족하면 새 물리 디스크를 추가해 확장합니다.
# 새 디스크를 PV로 초기화
sudo pvcreate /dev/sdd
# 기존 VG에 추가
sudo vgextend vg_data /dev/sdd
# 이제 LV 확장 가능
sudo lvresize -l +100%FREE -r /dev/vg_data/lv_home
# 확인
sudo vgs
df -h /home
LVM 스냅샷
스냅샷은 LV의 순간 상태를 보존합니다. 백업이나 업그레이드 전 안전망으로 활용합니다.
# 스냅샷 생성 (5G 스냅샷 공간 할당)
sudo lvcreate -s -L 5G -n lv_home_snap /dev/vg_data/lv_home
# 스냅샷 마운트 (읽기 전용)
sudo mount -o ro /dev/vg_data/lv_home_snap /mnt/snap
# 스냅샷으로 복원 (원본이 손상됐을 때)
sudo lvconvert --merge /dev/vg_data/lv_home_snap
# 스냅샷 삭제
sudo lvremove /dev/vg_data/lv_home_snap
스냅샷은 원본 LV와 같은 VG에 생성됩니다. 변경된 블록만 스냅샷 공간에 COW(Copy-on-Write)로 저장하므로 스냅샷 직후에는 거의 공간을 쓰지 않습니다. 하지만 원본이 많이 변경될수록 스냅샷 공간이 소모되니 크기를 넉넉히 잡으세요.
LVM 축소 (위험 — 신중하게)
LV 축소는 데이터 손실 위험이 있어 세심한 절차가 필요합니다.
# 1. 언마운트
sudo umount /home
# 2. 파일시스템 검사
sudo e2fsck -f /dev/vg_data/lv_home
# 3. 파일시스템 먼저 축소 (80G로)
sudo resize2fs /dev/vg_data/lv_home 80G
# 4. LV 축소 (파일시스템보다 크게)
sudo lvreduce -L 80G /dev/vg_data/lv_home
# 5. 재마운트
sudo mount /home
XFS는 파일시스템 축소를 지원하지 않습니다. LV 축소가 필요하면 데이터를 백업 후 재포맷해야 합니다.
정리
- PV:
pvcreate→ VG:vgcreate→ LV:lvcreate pvs / vgs / lvs: 각 계층 현황 확인lvresize -L +크기 -r 장치: 온라인 확장 (ext4 기준)vgextend VG PV: VG에 새 디스크 추가lvcreate -s: 스냅샷 생성- 축소는 언마운트 + fsck + resize2fs(먼저) + lvreduce 순서
지난 글: swap — 리눅스 가상 메모리 스왑 완전 정복
읽어주셔서 감사합니다. 😊