VM에 디스크를 25GB 줬는데 우분투 안에서 df 를 치면 12GB밖에 없습니다. 파티션을 잘못 잡았나, 디스크가 덜 붙었나 싶지만 둘 다 아닙니다. 우분투 서버 설치 기본값이 원래 그렇습니다 — LVM으로 설치하면 볼륨 그룹의 절반가량만 루트 볼륨에 할당하고 나머지는 비워 둡니다.
이 랩의 Ubuntu Server 24.04에서 실제로 겪고 12G → 23G로 확장한 과정입니다. 명령 두 줄이면 되는데, 모르면 No space left on device 를 만난 날 한참 헤매게 됩니다.
1. 증상 — 25GB 디스크에 루트가 12GB
# 설치 직후 (당시 기록)
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 12G 4.2G 6.9G 38% /
# 디스크는 분명 25GB
$ lsblk
NAME SIZE TYPE MOUNTPOINTS
sda 25G disk
└─sda3 23G part
└─ubuntu--vg-ubuntu--lv 12G lvm / <-- 파티션은 23G, LV는 12G
파티션(23G)까지는 정상인데 그 위의 논리 볼륨(LV)이 12G입니다. 어디로 갔는지는 볼륨 그룹을 보면 나옵니다.
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <23.00g <11.00g <-- 11GB가 미할당으로 대기 중
사라진 게 아니라 배정이 안 된 것입니다. 우분투 설치기의 LVM 기본값은 나중에 스냅샷이나 다른 볼륨을 만들 수 있도록 여유를 남겨 둡니다. 합리적인 설계지만, 모르고 있으면 “디스크 절반이 사라진” 것처럼 보입니다. 설치 때 “Set up this disk as an LVM group”의 크기 항목을 직접 늘리지 않았다면 대부분 이 상태입니다.
2. 해결 — 명령 두 줄
# 1) 남은 공간 전부를 루트 LV에 할당
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# 2) 파일시스템을 LV 크기에 맞게 확장 (ext4, 온라인으로 가능)
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
재부팅도, 언마운트도 필요 없습니다. 확장 후 이 랩의 실제 상태입니다.
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <23.00g 0 <-- 미할당 0
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 23G 4.8G 17G 23% /
두 명령의 역할이 다르다는 것만 기억하면 됩니다 — lvextend 는 그릇(LV)을 키우고, resize2fs 는 내용물(파일시스템)을 그릇에 맞춥니다. 하나만 하면 df 가 그대로라 “안 됐다”고 착각하기 쉽습니다.
lvextend만 하고 멈추면 어떻게 되나 — 직접 확인
말로만 하면 안 믿기니, 루프 디바이스로 미니 LVM(demo-vg)을 만들어 lvextend 만 실행해 봤습니다. 직후 상태입니다.
# LV는 분명히 커졌는데
$ sudo lvs demo-vg --noheadings -o lv_name,lv_size
demo-lv 208.00m <-- 그릇은 208M
# 파일시스템은 그대로
$ df -h /mnt/demo
/dev/mapper/demo--vg-demo--lv 109M 24K 101M 1% /mnt/demo <-- df 는 여전히 109M
그릇만 커지고 내용물은 그대로인 상태입니다. 이때 df 만 보면 “명령이 안 먹었다”고 착각하게 됩니다 — 실제로는 절반만 끝난 겁니다.
한 줄로 끝내는 버전 — -r 옵션
두 단계를 묶는 옵션도 있습니다. -r(--resizefs)을 붙이면 lvextend 가 파일시스템 확장까지 이어서 합니다. 같은 데모 볼륨에서 실행한 결과입니다.
$ sudo lvextend -r -l +100%FREE /dev/demo-vg/demo-lv
The filesystem on /dev/mapper/demo--vg-demo--lv is now 75776 (4k) blocks long.
<-- resize 까지 자동으로 이어짐
$ df -h /mnt/demo
/dev/mapper/demo--vg-demo--lv 270M 24K 255M 1% /mnt/demo <-- 바로 반영
본문에서 두 명령을 따로 쓴 건 각 단계가 뭘 하는지 보이기 위해서고, 실무에서는 -r 한 줄이 “resize2fs 를 빼먹는” 실수를 원천 차단합니다. ext4·xfs 모두 지원합니다.
3. 미리 알아두면 좋은 것
| 상황 | 기준 |
|---|---|
| 설치 시점에 다 쓰고 싶다 | 설치기 LVM 화면에서 ubuntu-lv 크기를 최대로 직접 수정 |
| 남겨둔 게 나은 경우 | LVM 스냅샷·별도 볼륨 계획이 있다면 기본값이 오히려 맞다 |
| xfs 를 쓰고 있다면 | resize2fs 대신 xfs_growfs / |
| 디스크 자체를 나중에 더 키웠다면 | 파티션 확장(growpart) → pvresize → 위 두 명령 순서 |
LVM의 구조(PV·VG·LV) 자체가 처음이라면 우분투 공식 문서의 LVM 소개가 짧고 정확합니다.
이 우분투는 랩에서 NFS 클라이언트로 쓰는 그 VM입니다 — NFS 마운트가 access denied로 거부될 때에서 마운트를 붙였고, VM 자원 배분 이야기는 가상 랩 PC 메모리 실측에 있습니다.


