LVM 은 물리 디스크를 그대로 쓰지 않고 세 단계로 추상화한다. 디스크나 파티션을 PV(Physical Volume) 로 표시하고, PV 여러 개를 묶어 VG(Volume Group) 라는 용량 풀을 만들고, 그 풀에서 LV(Logical Volume) 를 잘라 파일시스템을 올린다. 이 구조 덕분에 디스크를 추가해 기존 볼륨을 온라인으로 늘릴 수 있다.
/dev/sdb /dev/sdc ← 물리 디스크
│ │
PV PV ← pvcreate
└───┬────┘
VG ← vgcreate (용량 풀)
┌──┴──┐
LV LV ← lvcreate
│ │
xfs ext4 ← mkfs
# RHEL 계열
dnf install -y lvm2
# Debian 계열
apt-get install -y lvm2
대상 디스크를 확인한다. 마운트돼 있거나 데이터가 있는 장치를 고르면 되돌릴 수 없다.
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
새로 붙인 디스크가 목록에 없으면 재스캔한다.
echo 1 > /sys/class/block/sdb/device/rescan
partprobe
디스크 전체를 쓸 것이라면 파티션을 만들지 않고 장치 자체를 PV 로 써도 된다. 나중에 다른 OS 나 도구가 "빈 디스크"로 오인하는 것을 막고 싶으면 8e00(Linux LVM) 타입 파티션을 하나 만들어 그 파티션을 PV 로 쓴다.
pvcreate /dev/sdb /dev/sdc
pvs
vgcreate datavg /dev/sdb /dev/sdc
vgs
vgdisplay datavg
LV 는 크기를 절대값(-L)이나 VG 대비 비율(-l)로 지정한다.
# 고정 크기
lvcreate -L 100G -n datalv datavg
# VG 의 남은 공간 전부
lvcreate -l 100%FREE -n datalv datavg
lvs
만들어진 LV 는 /dev/<VG>/<LV> 와 /dev/mapper/<VG>-<LV> 두 경로로 보인다. 둘은 같은 장치다.
mkfs.xfs /dev/datavg/datalv
mkdir -p /data
mount /dev/datavg/datalv /data
RHEL 계열의 기본은 XFS 다. XFS 는 온라인 확장은 되지만 축소가 되지 않는다. 줄일 가능성이 있으면 ext4 를 쓴다.
부팅 시 자동 마운트는 /etc/fstab 에 적는다. 장치 이름 대신 UUID 를 쓰는 편이 안전하다.
blkid /dev/datavg/datalv
/dev/datavg/datalv /data xfs defaults 0 0
적어 넣은 뒤 재부팅 전에 반드시 문법을 확인한다. fstab 이 틀리면 부팅이 emergency 모드로 떨어진다.
umount /data
mount -a
df -h /data
디스크를 추가해 VG 에 넣고 LV 를 늘린 다음 파일시스템을 늘린다. 순서가 반대면 안 된다.
pvcreate /dev/sdd
vgextend datavg /dev/sdd
lvextend -l +100%FREE /dev/datavg/datalv
# XFS
xfs_growfs /data
# ext4
resize2fs /dev/datavg/datalv
lvextend -r 를 쓰면 파일시스템 확장까지 한 번에 한다.
parted · fdisk 로 파티션을 만드는 방법.