개요
VMware, KVM 등 리눅스 VM Disk 증설 후 OS에서 파티션과 논리 볼륨(LV)을 확장하지 않으면 실제 파일시스템에서 늘어난 용량을 사용할 수 없습니다. Ubuntu LVM 환경에서는 hypervisor에서 디스크를 확장한 뒤 parted로 파티션을 늘리고, pvresize → lvextend → resize2fs 순서로 실제 마운트 포인트까지 용량을 반영해야 합니다. 이 글에서는 VM 디스크 16G → 30G 증설 후 전체 확장 절차를 단계별로 정리합니다.
LVM 기반 디스크 확장 절차 이해
Ubuntu Server의 기본 설치는 LVM(Logical Volume Manager) 구조를 사용합니다. 하이퍼바이저(VMware, KVM 등)에서 VM 디스크 크기를 늘려도 OS는 즉시 인식하지 못합니다. LVM 환경에서는 물리 디스크 → 파티션 → Physical Volume → Volume Group → Logical Volume → 파일시스템의 순서로 각 계층을 순차적으로 확장해야 합니다.
구체적인 확장 순서는 다음과 같습니다: parted로 파티션을 디스크 끝까지 확장 → pvresize로 Physical Volume이 새 파티션 크기를 인식 → lvextend로 Logical Volume에 여유 공간 추가 → resize2fs로 파일시스템이 새 LV 크기를 인식. 이 절차는 온라인 상태(마운트 해제 없이)에서 진행 가능하여 서비스 중단 없이 디스크를 확장할 수 있습니다.
0단계 — 파일시스템 현재 상태 확인
@ :~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 794M 14M 781M 2% /run /dev/mapper/ubuntu--vg-ubuntu--lv 9.8G 8.2G 1.1G 89% / tmpfs 3.9G 84K 3.9G 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 1.7G 242M 1.4G 15% /boot tmpfs 794M 4.0K 794M 1% /run/user/1000
1단계 — VM 디스크 증설 후 lsblk 확인
VM의 디스크를 16G에서 30G로 증설하면 lsblk에서 sda는 30G로 표시되지만, 실제 파티션 sda3와 LV는 아직 이전 크기(14.2G)를 유지합니다.
@ :~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 63.4M 1 loop /snap/core20/1974 loop1 7:1 0 63.7M 1 loop /snap/core20/2434 loop2 7:2 0 111.9M 1 loop /snap/lxd/24322 loop3 7:3 0 89.4M 1 loop /snap/lxd/31333 loop4 7:4 0 53.3M 1 loop /snap/snapd/19457 loop5 7:5 0 44.3M 1 loop /snap/snapd/23258 sda 8:0 0 30G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 14.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 10G 0 lvm / sdb 8:16 0 50G 0 disk sr0 11:0 1 1024M 0 rom
2단계 — parted로 파티션 확장
@ :~$ sudo parted GNU Parted 3.4 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: VMware Virtual disk (scsi) Disk /dev/sda: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 1881MB 1879MB ext4 3 1881MB 17.2GB 15.3GB (parted) resizepart 3 End? [17.2GB]? 32.2GB (parted) print Model: VMware Virtual disk (scsi) Disk /dev/sda: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 1881MB 1879MB ext4 3 1881MB 32.2GB 30.3GB (parted) q Information: You may need to update /etc/fstab.
3단계 — 파티션 확장 확인
@ :~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 63.4M 1 loop /snap/core20/1974 loop1 7:1 0 63.7M 1 loop /snap/core20/2434 loop2 7:2 0 111.9M 1 loop /snap/lxd/24322 loop3 7:3 0 89.4M 1 loop /snap/lxd/31333 loop4 7:4 0 53.3M 1 loop /snap/snapd/19457 loop5 7:5 0 44.3M 1 loop /snap/snapd/23258 sda 8:0 0 30G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 28.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 10G 0 lvm / sdb 8:16 0 50G 0 disk sr0 11:0 1 1024M 0 rom
3단계 결과 확인 후 주의사항
lsblk에서 sda3 크기가 28.2G로 늘어난 것을 확인했지만, LVM은 아직 이전 크기를 기억하고 있습니다. pvdisplay 실행 시 PV Size: <14.25 GiB로 표시됩니다. 이는 PV 메타데이터가 파티션 확장 사실을 모르기 때문입니다. pvresize 명령으로 PV 메타데이터를 갱신해야 VG에 여유 공간이 생깁니다.
4단계 — Physical Volume 확장 (pvresize)
@ :~$ sudo pvdisplay --- Physical volume --- PV Name /dev/sda3 VG Name ubuntu-vg PV Size <14.25 GiB / not usable 0 Allocatable yes PE Size 4.00 MiB Total PE 3647 Free PE 1087 Allocated PE 2560 PV UUID O2p8iY-2Jpm-WNGJ-viUf-nIt6-iw0x-rVgXAo @ :~$ sudo pvscan PV /dev/sda3 VG ubuntu-vg lvm2 [<14.25 GiB / <4.25 GiB free] Total: 1 [<14.25 GiB] / in use: 1 [<14.25 GiB] / in no VG: 0 [0 ] @ :~$ sudo pvresize /dev/sda3 Physical volume "/dev/sda3" changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized @ :~$ sudo pvdisplay --- Physical volume --- PV Name /dev/sda3 VG Name ubuntu-vg PV Size <28.24 GiB / not usable 1.31 MiB Allocatable yes PE Size 4.00 MiB Total PE 7228 Free PE 4668 Allocated PE 2560 PV UUID O2p8iY-2Jpm-WNGJ-viUf-nIt6-iw0x-rVgXAo
5단계 — Logical Volume 확장 (lvextend)
@ :~$ sudo vgdisplay --- Volume group --- VG Name ubuntu-vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 28.23 GiB PE Size 4.00 MiB Total PE 7228 Alloc PE / Size 2560 / 10.00 GiB Free PE / Size 4668 / 18.23 GiB VG UUID aUI3qM-tbml-FpOz-ccxw-1yk3-4hCo-a35uCK @ :~$ sudo lvdisplay --- Logical volume --- LV Path /dev/ubuntu-vg/ubuntu-lv LV Name ubuntu-lv VG Name ubuntu-vg LV UUID gFcvA9-fkuH-rNy8-wVka-93Th-r8X0-FB8giN LV Write Access read/write LV Creation host, time ubuntu-server, 2023-12-05 01:04:17 +0000 LV Status available # open 1 LV Size 10.00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 @ :~$ sudo lvextend -l +100%FREE -n /dev/ubuntu-vg/ubuntu-lv Size of logical volume ubuntu-vg/ubuntu-lv changed from 10.00 GiB (2560 extents) to 28.23 GiB (7228 extents). Logical volume ubuntu-vg/ubuntu-lv successfully resized. @ :~$ sudo vgdisplay --- Volume group --- VG Name ubuntu-vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 28.23 GiB PE Size 4.00 MiB Total PE 7228 Alloc PE / Size 7228 / 28.23 GiB Free PE / Size 0 / 0 VG UUID aUI3qM-tbml-FpOz-ccxw-1yk3-4hCo-a35uCK @ :~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 63.4M 1 loop /snap/core20/1974 loop1 7:1 0 63.7M 1 loop /snap/core20/2434 loop2 7:2 0 111.9M 1 loop /snap/lxd/24322 loop3 7:3 0 89.4M 1 loop /snap/lxd/31333 loop4 7:4 0 53.3M 1 loop /snap/snapd/19457 loop5 7:5 0 44.3M 1 loop /snap/snapd/23258 sda 8:0 0 30G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 28.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 28.2G 0 lvm / sdb 8:16 0 50G 0 disk sr0 11:0 1 1024M 0 rom
6단계 — 파일시스템 확장 및 확인 (resize2fs)
@ :~$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 4 The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 7401472 (4k) blocks long. @ :~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 794M 14M 781M 2% /run /dev/mapper/ubuntu--vg-ubuntu--lv 28G 8.2G 19G 31% / tmpfs 3.9G 84K 3.9G 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 1.7G 242M 1.4G 15% /boot tmpfs 794M 4.0K 794M 1% /run/user/1000
XFS 파일시스템 환경에서의 차이
위 절차는 ext4 파일시스템 기준입니다. RHEL/Rocky Linux의 기본 파일시스템인 XFS를 사용하는 경우 마지막 단계의 resize2fs 대신 xfs_growfs /를 사용합니다. XFS는 ext4와 달리 마운트된 상태에서만 확장 가능하므로 마운트 해제 후에는 확장할 수 없습니다. LVM과 parted를 이용한 파티션 확장 절차(1~5단계)는 동일하고 마지막 파일시스템 확장 명령만 다릅니다.
또한 lvextend -r 옵션을 사용하면 lvextend와 파일시스템 확장(resize2fs 또는 xfs_growfs)을 한 번에 처리할 수 있습니다. 단, 이 옵션은 파일시스템 타입을 자동 감지하므로 마운트된 상태에서만 정상 동작합니다.
참고
관련 포스트:
참고 문서: parted(8) man page · lvextend(8) man page
