우분투 LVM 확장 — 디스크 절반이 사라진 것처럼 보일 때

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 메모리 실측에 있습니다.

댓글 남기기