리눅스의 저장용량을 늘리는 방법을 알아보자.
1. 디스크 확장
가. 병목 확인

VM에 417MB 밖에 남지 않은 상황이었다.
실제 올려야할 데이터의 크기가 700MB를 넘기니 문제가 생길 수 밖에 없다.

넉넉하게 5GB 정도 확장한다.
디스크 / 파티션 / FS 중 어디가 병목인지 확인한다.
lsblk
df -h
fdisk -l

리눅스가 용량을 못 읽는 것이 아니라, 확장 단계를 하나도 안 밟은 전형적인 LVM 케이스다.
파티션이 확장되지 않아서 LVM, 파일시스템도 그대로다.
growpart → pvresize → lvextend → resize2fs 순서를 따라서 확장해야 한다.
나. 파티션 확장
# install
sudo apt update
sudo apt install cloud-guest-utils
Code language: PHP (php)
파티션을 확장하기 위해서는 growpart라는 것이 필요하다.
따라서 이를 포함하는 cloud-guest-utils 패키지를 설치한다.
# Partition Extend
sudo growpart /dev/sda 3
Code language: PHP (php)

sda3 파티션 13.2G 로 증가.
다. 볼륨 확장
lsblk를 실행했을 때 lvm이 표시된다면 볼륨을 확장해야 한다.
sudo apt install lvm2
lvm2를 설치한다.
# Physical Volume Resize
sudo pvresize /dev/sda3
# Logical Volume Extend
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Code language: PHP (php)

물리적, 논리적 볼륨 확장.
바. 파일 시스템 확장
파일 시스템 확장한다.
# install
sudo apt install e2fsprogs
Code language: PHP (php)
# FileSystem Resize (lvm)
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
Code language: PHP (php)


만약 lvm이 아닌 경우라면 파티션 경로까지만 입력하면 된다.
# lvm 아님
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 6G 0 disk
└─sda1 8:1 0 6G 0 part /
sr0 11:0 1 784M 0 rom
# 파일시스템 확장
sudo resize2fs /dev/sda1
Code language: PHP (php)
최종적으로 늘어난 용량을 확인한다.
df -h /
3. MBR + extended + logical(sda5) 구조
가. 문제 상황
growpart부터 막히는 경우가 있을 수 있다.
sda 10G
├─sda1 4.4G /
├─sda2 1K (extended)
└─sda5 641M swap
이는 디스크 공간이 없는 게 아니라 sda1 뒤에 다른 파티션이 막고 있어서다.
sda1 뒤에 extended + swap 파티션이 있어서 확장 불가하다.
용량을 확장하기 위해서는 swap 파티션 삭제 → sda1 확장 → 파일시스템 확장 → swapfile 생성을 순서대로 수행해야 한다.
나. 준비
본격적으로 시작하기 앞서 반드시 백업하고 진행한다.
free -h
total used free shared buff/cache available
Mem: 967Mi 402Mi 154Mi 1.1Mi 561Mi 564Mi
Swap: 640Mi 268Ki 640Mi
free -h: 시스템의 RAM 및 swap 메모리 사용 현황을 요약해서 보여줌
lsblk
free -h
swapon --show
NAME TYPE SIZE USED PRIO
/dev/sda5 partition 641M 268K -2
swapon --show: 현재 활성화된 swap 영역 목록을 보여줌.
다. swap 비활성화
sudo swapoff -a
swapon --show
출력 없어야 정상.
라. swap 파티션 삭제
sudo fdisk /dev/sda
fdisk /dev/sda: 디스크 레이아웃 편집기. MBR 및 GPT 파티션 테이블을 수정할 수 있다.
p # 현재 파티션 확인
d # 삭제
5 # sda5 삭제
d # 다시 삭제
2 # sda2 삭제
p # 다시 확인 (sda1만 남아야 함)
w # 저장 후 종료
Code language: PHP (php)
불필요한 파티션을 삭제한다.
OS가 설치된 파티션은 삭제하면 안된다. (여기선 sda1)
마. swapfile 생성
파티션 확장을 마치고 나서 다시 Swap을 활성화한다.
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
대신에 별도의 파티션을 할당하기 보다 파일을 할당한다.
단, swapon /swapfile은 재부팅하면 사라지기 때문에 부팅 시 실행할 명령어를 추가한다.
sudo vim /etc/fstab
# /etc/fstab
UUID-a... none swap sw 0 0 # 제거 또는 주석
/swapfile none swap sw 0 0 # 추가
Code language: PHP (php)

/swapfile만 부팅 시 자동으로 활성화되도록 /etc/fstab에 추가한다.
free -h
total used free shared buff/cache available
Mem: 967Mi 417Mi 172Mi 1.1Mi 529Mi 550Mi
Swap: 1.0Gi 0B 1.0Gi
확인.