개요
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