마루옵스서버 · 네트워크 · AI 기술 노트

소개문의

Linux 루트(/) 확장: LVM·XFS·ext4와 가상 디스크 증설

PCIe 확장 카드 형태의 Plextor SSD

참고 사진 · PCIe 확장 카드 형태의 Plextor SSD · 사진: Jacek Halicki / 원본 / CC BY-SA 4.0 · 목록용 크기 조정

VMware에서 디스크를 늘렸는데 df -h /가 그대로라면 중간 단계가 남아 있을 가능성이 큽니다. 가상 디스크, 파티션, LVM 볼륨, 파일시스템은 크기를 각각 관리합니다. 어느 층까지 늘어났는지 찾으면 필요한 명령도 정리돼요.

이 글은 일반적인 선형 LVM 위의 XFS 또는 ext4 루트 파일시스템을 늘리는 작업을 다룹니다. Rocky Linux 9와 Ubuntu 24.04·26.04에 공통인 원리이며, 장치명은 설치마다 다릅니다. 축소, LUKS 암호화 계층, RAID·multipath, thin pool, Btrfs·ZFS는 이 절차의 대상이 아닙니다. 구조가 다르면 해당 계층의 확장 절차부터 확인합니다.

함께 보는 Linux 운영 글 · Rocky 9 고정 IP · Ubuntu 24.04 Netplan · Ubuntu 26.04·nmtui · systemd 서비스·로그 · LVM 루트 확장 · 일반 파티션 루트 확장

이 글의 목차

1. /가 무엇 위에 올라가 있는지 확인한다

findmnt -no SOURCE,FSTYPE,OPTIONS /
df -hT /
df -ih /
lsblk -e 7 -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo pvs -o pv_name,pv_size,pv_free,vg_name
sudo vgs -o vg_name,vg_size,vg_free
sudo lvs -a -o lv_path,lv_size,segtype,devices

findmnt에서 /의 소스·파일시스템을 확인하고 lsblk로 부모 장치까지 따라갑니다. /dev/mapper라는 이름만 보고 단순 LVM이라고 판단하지 않습니다. lvs의 segtype과 중간에 crypt·raid 계층이 있는지도 봅니다. LVM을 쓰지 않는 루트라면 일반 파티션 루트 확장로 이동합니다.

가상 디스크 /dev/sda
  └─ 파티션 /dev/sda3
      └─ PV: LVM에 제공한 물리 공간
          └─ VG: rl 같은 공간 풀
              └─ LV: /dev/rl/root
                  └─ XFS 또는 ext4 → /
현재 상태늘려야 할 곳
VG에 필요한 만큼 VFree가 있음LV → 파일시스템
가상 디스크만 커지고 PV 파티션은 그대로파티션 → PV → LV → 파일시스템
파티션은 커졌는데 PV 크기는 그대로PV → LV → 파일시스템
새 빈 디스크를 같은 VG에 추가할 계획새 PV → VG → LV → 파일시스템

df -ih에서 inode가 가득 찼는지도 함께 확인합니다. 저장 공간이 남아 있어도 작은 파일 수가 많으면 생성이 실패할 수 있어요. 삭제한 파일을 프로세스가 계속 열고 있거나 로그가 계속 커지는 문제라면 확장과 별개로 증가 원인을 찾아야 합니다.

2. 작업 전에 남길 것과 준비할 도구

복원 가능한 VM·데이터 백업을 다른 저장 위치에 확보합니다. 스냅샷만을 유일한 백업으로 삼지 않습니다. 파티션 표와 LVM 메타데이터 백업은 복구 자료이지만 파일 데이터 백업을 대신하지 못합니다. /가 꽉 찬 상태에서는 패키지 설치와 메타데이터 기록도 실패할 수 있으므로 작업 공간을 먼저 확보합니다.

# Rocky Linux 9
sudo dnf install -y lvm2 xfsprogs e2fsprogs cloud-utils-growpart util-linux
# Ubuntu 24.04 / 26.04
sudo apt update
sudo apt install -y lvm2 xfsprogs e2fsprogs cloud-guest-utils util-linux

다음은 VG가 rl, 루트 LV가 /dev/rl/root, PV가 /dev/sda3인 경우의 예시입니다. Ubuntu 설치에서는 /dev/ubuntu-vg/ubuntu-lv 같은 이름일 수 있습니다. 자신의 findmnt·pvs·lvs 출력으로 바꾸고, 현재 경로와 크기를 기록합니다.

ROOT_LV='/dev/rl/root'
sudo vgcfgbackup rl
sudo sfdisk --dump /dev/sda > partition-table-before.sfdisk

vgcfgbackup의 결과는 기본적으로 /etc/lvm/backup에 저장됩니다. 파티션 표 덤프와 함께 별도 저장소로 복사합니다. 이후 A·B·C는 공간을 확보하는 서로 다른 경로입니다. 자신의 상태에 맞는 경로를 고르고, 같은 용량을 여러 번 더하지 않도록 실행 기록을 남깁니다.

A. VG에 이미 여유 공간이 있는 경우

vgs의 VFree가 충분하면 디스크나 파티션을 건드릴 필요가 없습니다. 아래는 루트 LV에 10GiB를 추가하는 예입니다. -L +10G는 증가분이고 -L 10G는 목표 총크기입니다. 실행 전에 ROOT_LV가 실제 /의 LV인지 다시 확인합니다.

sudo vgs -o vg_name,vg_size,vg_free
sudo lvs "$ROOT_LV" -o lv_path,lv_size,segtype
sudo lvextend -L +10G "$ROOT_LV"

그다음 아래 “파일시스템을 늘린다” 절에서 실제 형식에 해당하는 명령 하나를 실행합니다. VG 전체 여유를 한 번에 쓰는 -l +100%FREE도 있지만, 다른 LV나 향후 작업에 필요한 여유까지 소진할 수 있습니다. 공간 배분을 정한 뒤 증가량을 지정하는 편이 관리하기 쉽습니다. lvextend의 크기 옵션을 참고하세요.

B. 기존 가상 디스크의 끝에 공간을 추가한 경우

가상 디스크 크기를 먼저 늘린다

Workstation에서는 백업과 디스크의 스냅샷·상태를 확인한 뒤 VM을 종료하고 해당 Hard Disk의 Expand 기능으로 용량을 늘립니다. 확장 제약은 설치된 제품·디스크 유형에 맞춰 확인합니다. 스냅샷 파일을 탐색기에서 임의 삭제하지 않습니다. Broadcom의 가상 디스크 확장 안내도 VMDK 확장과 게스트 파티션 확장이 별개임을 설명합니다.

VM을 부팅해 lsblk에서 /dev/sda 전체 크기가 커졌는지 확인합니다. OS가 새 크기를 인식하지 못했다면 장치에 맞는 재검색이나 계획된 재부팅이 먼저입니다. 크기가 그대로인데 다음 명령부터 반복하지 않습니다.

PV가 들어 있는 파티션을 늘린다

아래는 /dev/sda3의 끝에 연속된 미할당 공간이 있고 시작 섹터는 유지할 수 있는 경우입니다. 뒤쪽에 다른 파티션이 있으면 그 공간을 넘어 늘릴 수 없습니다. dry-run의 변경 대상을 먼저 확인합니다.

sudo growpart -N /dev/sda 3
sudo growpart /dev/sda 3
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS /dev/sda
sudo blockdev --getsize64 /dev/sda3

growpart의 인자는 /dev/sda와 3으로 나뉩니다. /dev/sda3 하나를 인자로 넣는 명령이 아닙니다. 커널이 사용 중인 파티션 표의 변경을 반영하지 못했다면 장치 크기가 갱신될 때까지 중지합니다. 필요한 재부팅을 계획하고 부팅 후 다시 확인합니다. growpart 매뉴얼의 dry-run과 변경 조건을 확인하세요.

PV에 증가한 크기를 알린다

sudo pvresize /dev/sda3
sudo pvs -o pv_name,pv_size,pv_free,vg_name
sudo vgs -o vg_name,vg_size,vg_free

PV가 파티션이 아니라 디스크 전체인 /dev/sda로 확인된 구성은 growpart를 생략하고 pvresize /dev/sda를 검토합니다. 이 분기는 pvs가 실제로 디스크 전체를 PV로 표시하는 경우에만 해당합니다. 기존 파티션이 있는 부팅 디스크를 새 PV로 초기화하는 절차가 아닙니다. pvresize 문서가 이 계층을 설명합니다.

VFree 증가를 확인한 뒤 A 절의 lvextend를 한 번 실행하고 파일시스템을 늘립니다. 파티션 확장 뒤 PV를 생략하면 VG에 여유가 나타나지 않는 이유가 여기 있습니다.

C. 새 빈 디스크를 VG에 추가하는 경우

이 경로는 기존 디스크 확장과 다른 선택입니다. 새 가상 디스크 /dev/sdb가 이번 작업에 배정된 빈 장치인지 하이퍼바이저의 디스크 식별 정보와 대조합니다. 장치 이름만 믿지 않습니다. 다음 두 명령은 파티션·서명을 읽는 확인 단계입니다.

lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS /dev/sdb
sudo wipefs -n /dev/sdb
sudo pvs

마운트·기존 파티션·파일시스템·다른 VG 사용 여부와 장치 소유를 확인한 다음에만 아래 초기화를 진행합니다. 서명이 없다는 출력만으로 중요한 데이터가 없는 디스크라고 보장되지는 않습니다. pvcreate는 새 PV 메타데이터를 기록하는 변경 명령입니다. 기존 루트 PV에 실행하지 않습니다.

# 새 빈 디스크 /dev/sdb를 디스크 전체 PV로 쓰기로 확인한 경우만 실행
sudo pvcreate /dev/sdb
sudo vgextend rl /dev/sdb
sudo vgs -o vg_name,vg_size,vg_free

이후 LV와 파일시스템을 확장합니다. VG에 디스크를 추가했다고 RAID가 만들어지는 것은 아닙니다. 루트 LV가 두 디스크에 걸쳐 배치되면 어느 한쪽의 장애도 루트 데이터에 영향을 줄 수 있으므로 백업·가용성 설계에 반영합니다. VG에 PV를 추가하는 공식 절차를 기준으로 확인하세요.

3. 파일시스템을 늘린다

A·B·C 중 하나를 통해 LV까지 커졌다면 실제 /의 형식을 다시 확인합니다. 아래 두 경로 중 해당 형식 하나만 실행합니다. 이 작업은 파일시스템을 새로 만드는 mkfs 작업이 아닙니다.

findmnt -no SOURCE,FSTYPE /
sudo lvs "$ROOT_LV" -o lv_path,lv_size

XFS인 경우

sudo xfs_growfs /

XFS 확장은 마운트된 파일시스템의 마운트 지점을 지정합니다. 블록 장치가 커진 상태에서 실행하며, 이 글의 /는 루트 XFS 마운트 지점입니다. RHEL 9 기준 XFS 축소는 지원하지 않으므로 확장을 취소하려고 LV 크기를 줄이지 않습니다. XFS 확장 문서를 참고하세요.

ext4인 경우

sudo resize2fs "$ROOT_LV"

ext4는 블록 장치 경로를 지정합니다. 지원되는 조건에서는 마운트 중 온라인 확장이 가능합니다. 마운트된 /에 e2fsck를 강제로 실행하는 절차를 추가하지 않습니다. 오프라인 검사가 필요한 상태라면 복구 환경과 점검 시간을 별도로 준비합니다. resize2fs 매뉴얼이 파일시스템과 파티션 크기의 관계를 설명합니다.

lvextend -r로 묶어서 실행할 수도 있다

별도 두 단계 대신 sudo lvextend -r -L +10G "$ROOT_LV"로 LV와 지원 파일시스템의 확장을 요청할 수 있습니다. 이미 앞에서 +10G를 더했다면 이 명령을 다시 실행하지 않습니다. 파일시스템 확장 단계만 실패했을 수도 있으므로 오류 뒤에는 lvs와 df를 비교합니다. LV가 커진 상태에서 lvextend를 반복하면 계획보다 더 커질 수 있습니다. RHEL 9의 LV 확장 절차에서도 resizefs 옵션을 안내합니다.

4. /까지 늘어났는지 확인한다

findmnt -no SOURCE,FSTYPE,OPTIONS /
df -hT /
df -ih /
sudo lvs -o lv_path,lv_size,vg_name
sudo vgs -o vg_name,vg_size,vg_free
sudo journalctl -k -b -p warning --no-pager

lvs는 커졌는데 df가 그대로라면 파일시스템 단계부터 확인합니다. 루트가 읽기 전용으로 바뀌거나 I/O 오류가 발생했다면 확장 명령을 더 실행하지 말고 저장장치·파일시스템 상태를 살펴봅니다. 기존 부팅 경로와 UUID를 유지한 단순 확장에서는 보통 fstab을 새 장치로 바꿀 일이 없지만, 재부팅 가능 여부와 앱의 쓰기 동작도 확인해야 합니다.

확인 범위 · 2026-10-18: Ubuntu 24.04.5 VM의 추가 가상 디스크에서 일반 선형 LVM 위의 ext4·XFS 확장, PV 파티션과 디스크 전체 PV의 크기 증가, 새 PV의 VG 추가와 lvextend -r를 실행했습니다. 실습 볼륨의 기존 파일은 전후 SHA-256 비교로 확인했습니다. 각 배포판의 실제 루트 LVM 볼륨을 직접 확장한 결과는 아니며, 예시 증가량 +10G는 필요한 여유 공간에 맞춰 정해야 합니다.

네트워크·systemd 예제 파일 내려받기 · Netplan YAML, 서비스·환경 파일과 스토리지 구조를 읽는 스크립트를 묶었습니다. 주소와 장치 이름은 실제 환경에 맞춰 바꿉니다. 디스크를 자동 확장하는 스크립트는 포함하지 않습니다.

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

닉네임·이메일·댓글 내용·IP 주소·브라우저 정보는 댓글 게시 및 관리에 사용됩니다. 이메일과 접속 정보는 공개 댓글에 표시하지 않습니다. 개인정보 요청은 운영자 이메일로 보내 주세요. 개인정보처리방침