운영팀 슬랙에 알람이 떴습니다. "DB 서버 /data 파티션 사용률 94%". 지금 당장 PostgreSQL을 내릴 수 없고, 물리 디스크를 교체하면 서비스 중단입니다. LVM으로 구성했다면 클라우드 콘솔에서 디스크 한 장 추가하고 명령어 세 줄로 서비스 중단 없이 해결됩니다. 처음 서버를 구성할 때 왜 LVM을 써야 하는지, 이 모듈이 알려줍니다.
디스크 관리와 LVM
프로덕션 서버를 운영하다 보면 디스크 용량 부족은 반드시 마주치는 상황입니다. 과거에는 서비스를 중단하고 파티션을 다시 구성해야 했지만, LVM(Logical Volume Manager)을 사용하면 서비스 중단 없이 온라인으로 볼륨을 확장할 수 있습니다. 이 챕터에서는 파티셔닝 기초부터 LVM 3계층 구조, 온라인 확장까지 실무에 바로 적용할 수 있는 기술을 학습합니다.
파티셔닝과 파일시스템 기초를 다진 뒤 LVM으로 유연한 스토리지 관리를 구현합니다. 리눅스마스터 1급 시험의 핵심 실기 주제이며, 실무에서 가장 자주 활용되는 스토리지 기술입니다.
- 1MBR과 GPT 파티션 테이블 구조 — 주/확장/논리 파티션, 2TB 한계
- 2fdisk와 parted 인터랙티브 명령으로 파티션 생성·삭제 (n/d/p/t/w/q)
- 3mkfs.ext4/mkfs.xfs로 파일시스템 생성, mount와 /etc/fstab 영구 마운트 설정
- 4LVM 3계층(PV → VG → LV) 구성과 온라인 확장(lvextend + resize2fs/xfs_growfs)
- 5LVM 스냅샷으로 서비스 중단 없이 특정 시점 데이터 보호
디스크 파티셔닝과 LVM 실습에는 root 권한과 실습용 가상 디스크(예: /dev/sdb)가 필요합니다. 운영 서버에서 직접 실습하기보다 VM 환경에서 디스크를 추가하여 진행하세요. 잘못된 파티셔닝은 데이터 손실을 유발합니다.
lsblkrpm -q lvm2 || dpkg -l lvm2 2>/dev/null | grep lvm2parted --versionsudo -vMBR과 GPT 파티션 테이블 구조
파티션 테이블이란?
디스크를 여러 논리적 영역으로 나누는 것을 파티셔닝이라 하며, 각 파티션의 시작 위치·크기·유형 정보를 저장하는 구조가 파티션 테이블입니다. 리눅스에서는 MBR과 GPT 두 가지 표준을 사용합니다.
MBR (Master Boot Record)
MBR은 디스크의 첫 번째 512바이트 섹터에 저장되는 전통적인 파티션 테이블 형식입니다.
MBR 섹터 구조 (512 bytes)
┌─────────────────────────────────────────────┐
│ 부트 코드 (446 bytes) — GRUB Stage 1 위치 │
├─────────────────────────────────────────────┤
│ 파티션 테이블 (64 bytes = 4개 × 16 bytes) │
│ ┌──────────┬──────────┬──────────┬────────┐│
│ │ 주파티션1 │ 주파티션2 │ 주파티션3 │확장파티션││
│ └──────────┴──────────┴──────────┴────────┘│
├─────────────────────────────────────────────┤
│ 매직 넘버 (2 bytes) — 0x55AA │
└─────────────────────────────────────────────┘
MBR의 파티션 구조:
- 주 파티션(Primary): 최대 4개. 직접 파일시스템을 생성하거나 부팅에 사용
- 확장 파티션(Extended): 주 파티션 1개를 확장 파티션으로 지정하면, 그 안에 논리 파티션을 여러 개 생성 가능
- 논리 파티션(Logical): 확장 파티션 내부에 생성, 장치 번호는 5번부터 시작
MBR 파티션 예시:
/dev/sda1 (주 파티션 — /boot)
/dev/sda2 (주 파티션 — swap)
/dev/sda3 (주 파티션 — /)
/dev/sda4 (확장 파티션)
/dev/sda5 (논리 파티션 — /data)
/dev/sda6 (논리 파티션 — /backup)
MBR 한계: 32비트 LBA 주소 방식으로 최대 2TB(2^32 × 512 bytes) 디스크만 지원합니다.
GPT (GUID Partition Table)
GPT는 UEFI 표준의 일부로, MBR의 한계를 극복한 현대적 파티션 테이블 형식입니다.
GPT 구조:
┌────────────────────────────────────────────┐
│ Protective MBR (섹터 0 — 하위 호환성) │
├────────────────────────────────────────────┤
│ Primary GPT Header (섹터 1) │
├────────────────────────────────────────────┤
│ Partition Entry Array (섹터 2~33) │
│ — 최대 128개 파티션 정보 저장 │
├────────────────────────────────────────────┤
│ ... 실제 파티션 데이터 영역 ... │
├────────────────────────────────────────────┤
│ Backup Partition Entry Array │
├────────────────────────────────────────────┤
│ Backup GPT Header (디스크 마지막 섹터) │
└────────────────────────────────────────────┘
| 항목 | MBR | GPT |
|---|---|---|
| 최대 디스크 크기 | 2TB | 9.4ZB (사실상 무제한) |
| 최대 파티션 수 | 4개(주) + 논리 | 128개 |
| 파티션 구분 | 주/확장/논리 | 모두 동등 |
| 헤더 복구 | 불가 (단일 MBR) | 가능 (헤더 이중화) |
| UEFI 부팅 | 불가 | 필수 |
| 부팅 파티션 | 주 파티션에 부트 플래그 | EFI System Partition (ESP) |
fdisk와 parted, 파일시스템 생성과 마운트
fdisk — 인터랙티브 파티셔닝
fdisk는 리눅스에서 가장 널리 사용되는 파티셔닝 도구입니다. 인터랙티브 모드로 동작하며, 변경 사항은 w를 입력하기 전까지 디스크에 기록되지 않습니다.
fdisk 주요 명령 정리
# /dev/sdb 파티션 테이블 편집
sudo fdisk /dev/sdb
| 명령 | 기능 |
|---|---|
m | 도움말 표시 |
p | 현재 파티션 테이블 출력 |
n | 새 파티션 생성 |
d | 파티션 삭제 |
t | 파티션 타입 변경 (82=swap, 83=Linux, 8e=LVM) |
l | 파티션 타입 코드 목록 |
w | 변경 사항 저장 후 종료 |
q | 저장 없이 종료 |
g | GPT 파티션 테이블로 변경 |
fdisk로 LVM 파티션 생성 예시
sudo fdisk /dev/sdb
Command: n
Partition type
p primary (0 primary, 0 extended, 4 free)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): [Enter]
Last sector: +10G
Command: t
Hex code: 8e # Linux LVM 타입 지정
Command: p
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 8e Linux LVM
Command: w
The partition table has been altered.
Syncing disks.
# 커널에 파티션 테이블 재인식 요청
sudo partprobe /dev/sdb
parted — 2TB+ 디스크와 GPT 지원
# GPT 파티션 테이블 생성
sudo parted /dev/sdb mklabel gpt
# 파티션 생성 (1MiB 정렬 시작, 10GiB 크기)
sudo parted /dev/sdb mkpart primary 1MiB 10GiB
# 파티션 정보 확인
sudo parted /dev/sdb print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 10.7GB 10.7GB primary
# 비대화식 parted (스크립트 자동화에 유용)
sudo parted -s /dev/sdc \
mklabel gpt \
mkpart primary 1MiB 5GiB \
mkpart primary 5GiB 10GiB \
print
파일시스템 생성과 마운트
# ext4 파일시스템 생성
sudo mkfs.ext4 /dev/sdb1
# XFS 파일시스템 생성 (대용량 파일·고성능 I/O에 유리)
sudo mkfs.xfs /dev/sdb2
# UUID 확인 (fstab 등록에 사용)
sudo blkid /dev/sdb1
# /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
/etc/fstab 영구 마운트 설정
# 마운트 포인트 생성
sudo mkdir -p /data
# /etc/fstab에 UUID 방식으로 추가 (장치명 변경에 안전)
echo 'UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /data ext4 defaults 0 2' \
| sudo tee -a /etc/fstab
# fstab 검증 및 마운트 적용
sudo mount -a
# 마운트 확인
df -hT /data
# Filesystem Type Size Used Avail Use% Mounted on
# /dev/sdb1 ext4 9.8G 24K 9.3G 1% /data
fstab 6개 필드:
<장치> <마운트포인트> <타입> <옵션> <dump> <pass>
UUID=a1b2... /data ext4 defaults 0 2
dump : 0=dump 백업 제외, 1=포함
pass : 0=fsck 검사 안 함, 1=루트(우선), 2=일반 파티션
LVM 3계층 구조 — PV, VG, LV
LVM 아키텍처
LVM(Logical Volume Manager)은 물리적 디스크를 추상화하여 유연하게 스토리지를 관리하는 리눅스 커널 기능입니다. 전통적인 파티셔닝의 고정된 크기 제한을 극복하여 온라인 확장, 스냅샷이 가능합니다.
LVM 3계층 구조:
물리 디스크 PV VG LV
────────── ── ── ──
/dev/sdb1 → pvcreate → ┐
/dev/sdc1 → pvcreate → ├→ vgcreate vg_data → lvcreate lv_app (15G)
/dev/sdd → pvcreate → ┘ → lvcreate lv_log (5G)
| 계층 | 명칭 | 설명 |
|---|---|---|
| PV | Physical Volume | LVM으로 등록된 실제 파티션 또는 디스크 |
| VG | Volume Group | 하나 이상의 PV를 묶은 스토리지 풀 |
| LV | Logical Volume | VG에서 할당한 가상 파티션. 파일시스템을 올리는 단위 |
PV (Physical Volume) 명령
# PV 생성
sudo pvcreate /dev/sdb1 /dev/sdc1
# PV 목록 (요약)
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg_data lvm2 a-- <10.00g 0
/dev/sdc1 vg_data lvm2 a-- <10.00g 5.00g
# PV 상세 정보
sudo pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg_data
PV Size 10.00 GiB / not usable 4.00 MiB
PE Size 4.00 MiB # Physical Extent 크기
Total PE 2559
Free PE 0
Allocated PE 2559
VG (Volume Group) 명령
# VG 생성
sudo vgcreate vg_data /dev/sdb1 /dev/sdc1
# VG 목록
sudo vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 2 2 0 wz--n- <20.00g 5.00g
# VG에 새 PV 추가 (스토리지 풀 확장)
sudo pvcreate /dev/sdd1
sudo vgextend vg_data /dev/sdd1
LV (Logical Volume) 명령
# 크기 지정으로 LV 생성
sudo lvcreate -L 15G -n lv_app vg_data
# VG 잔여 공간 전부 사용
sudo lvcreate -l 100%FREE -n lv_log vg_data
# LV 목록
sudo lvs
LV VG Attr LSize
lv_app vg_data -wi-ao---- 15.00g
lv_log vg_data -wi-ao---- 5.00g
# LV 장치 경로 (두 형식 모두 동일)
/dev/vg_data/lv_app
/dev/mapper/vg_data-lv_app
온라인 볼륨 확장
ext4 확장
# 1. LV 블록 확장
sudo lvextend -L +5G /dev/vg_data/lv_app
# 2. 파일시스템이 새 공간 인식
sudo resize2fs /dev/vg_data/lv_app
# 두 단계를 한 번에 (-r 옵션)
sudo lvextend -L +5G -r /dev/vg_data/lv_app
XFS 확장
sudo lvextend -L +5G /dev/vg_data/lv_xfs
# XFS는 반드시 마운트 포인트를 지정
sudo xfs_growfs /mnt/xfs_data
중요: resize2fs는 ext2/ext3/ext4 전용입니다. XFS에 사용하면 오류가 발생합니다.
LVM 스냅샷
# COW(Copy-on-Write) 방식 스냅샷 생성 (2GB COW 공간)
sudo lvcreate -L 2G -s -n lv_app_snap /dev/vg_data/lv_app
# 스냅샷 마운트 (읽기 전용으로 과거 상태 접근)
sudo mount -o ro /dev/vg_data/lv_app_snap /mnt/snap
# 원본 복원 (마운트 해제 후)
sudo umount /mnt/snap
sudo lvconvert --merge /dev/vg_data/lv_app_snap
목표
신규 가상 디스크 /dev/sdb를 파티셔닝하여 PV → VG → LV 생성 후 파일시스템을 만들고 /etc/fstab에 등록하여 영구 마운트까지 완료합니다.
mkdir -p /tmp/linux-master/part1/lvm
# 실습용 가상 디스크 이미지 생성
dd if=/dev/zero of=/tmp/linux-master/part1/lvm/vdisk1.img bs=1M count=1024 2>/dev/null
dd if=/dev/zero of=/tmp/linux-master/part1/lvm/vdisk2.img bs=1M count=1024 2>/dev/null
dd if=/dev/zero of=/tmp/linux-master/part1/lvm/vdisk3.img bs=1M count=1024 2>/dev/null
# 루프백 장치 연결
LOOP1=$(sudo losetup -f --show /tmp/linux-master/part1/lvm/vdisk1.img)
LOOP2=$(sudo losetup -f --show /tmp/linux-master/part1/lvm/vdisk2.img)
LOOP3=$(sudo losetup -f --show /tmp/linux-master/part1/lvm/vdisk3.img)
echo "루프백 장치 생성됨: $LOOP1, $LOOP2, $LOOP3"
echo "이 장치들을 PV로 사용합니다."
1단계: 디스크 상태 확인
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part /
sdb 8:16 0 20G 0 disk # 실습 대상 디스크
2단계: fdisk로 LVM 파티션 두 개 생성
sudo fdisk /dev/sdb
Command: n
Select (default p): p
Partition number: 1
First sector: [Enter]
Last sector: +10G
Command: t
Hex code: 8e # Linux LVM
Command: n
Select: p
Partition number: 2
First sector: [Enter]
Last sector: +10G
Command: t
Partition: 2
Hex code: 8e
Command: w
sudo partprobe /dev/sdb
lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 10G 0 part
└─sdb2 8:18 0 10G 0 part
3단계: PV 생성
sudo pvcreate /dev/sdb1 /dev/sdb2
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <10.00g <10.00g
/dev/sdb2 lvm2 --- <10.00g <10.00g
4단계: VG 생성
sudo vgcreate vg_practice /dev/sdb1 /dev/sdb2
Volume group "vg_practice" successfully created
sudo vgdisplay vg_practice | grep -E "VG Name|VG Size|Free"
VG Name vg_practice
VG Size <20.00 GiB
Free PE / Size 5119 / <20.00 GiB
5단계: LV 생성 및 파일시스템 포맷
# app용 LV (15GB, ext4)
sudo lvcreate -L 15G -n lv_app vg_practice
# log용 LV (잔여 공간 전부, xfs)
sudo lvcreate -l 100%FREE -n lv_log vg_practice
# 파일시스템 생성
sudo mkfs.ext4 /dev/vg_practice/lv_app
sudo mkfs.xfs /dev/vg_practice/lv_log
6단계: 마운트 및 fstab 등록
sudo mkdir -p /app /log
sudo mount /dev/vg_practice/lv_app /app
sudo mount /dev/vg_practice/lv_log /log
df -hT /app /log
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_practice-lv_app ext4 15G 24K 14G 1% /app
/dev/mapper/vg_practice-lv_log xfs 5.0G 67M 4.9G 2% /log
# fstab에 LVM 장치명으로 등록 (재부팅 후에도 자동 마운트)
cat << 'EOF' | sudo tee -a /etc/fstab
/dev/vg_practice/lv_app /app ext4 defaults 0 2
/dev/vg_practice/lv_log /log xfs defaults 0 2
EOF
# 검증
sudo mount -a && echo "fstab 검증 OK"
- df -hT /app /log 결과에 vg_practice-lv_app와 vg_practice-lv_log가 각각 마운트됐는가?
- sudo pvs, vgs, lvs 세 명령어 모두 정상 출력이 나왔는가?
- mount -a 후 'fstab 검증 OK' 메시지가 출력됐는가?
목표
서비스가 실행 중인 상태에서 /app(ext4, 15G)을 약 50% 확장(+7.5G)하고 파일시스템이 새 공간을 인식하도록 합니다.
mkdir -p /tmp/linux-master/part1/lvm
# 실습용 가상 디스크 이미지 생성
dd if=/dev/zero of=/tmp/linux-master/part1/lvm/vdisk1.img bs=1M count=1024 2>/dev/null
dd if=/dev/zero of=/tmp/linux-master/part1/lvm/vdisk2.img bs=1M count=1024 2>/dev/null
dd if=/dev/zero of=/tmp/linux-master/part1/lvm/vdisk3.img bs=1M count=1024 2>/dev/null
# 루프백 장치 연결
LOOP1=$(sudo losetup -f --show /tmp/linux-master/part1/lvm/vdisk1.img)
LOOP2=$(sudo losetup -f --show /tmp/linux-master/part1/lvm/vdisk2.img)
LOOP3=$(sudo losetup -f --show /tmp/linux-master/part1/lvm/vdisk3.img)
echo "루프백 장치 생성됨: $LOOP1, $LOOP2, $LOOP3"
echo "이 장치들을 PV로 사용합니다."
확장 전 상태 확인
df -hT /app
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_practice-lv_app ext4 15G 8.2G 5.8G 59% /app
sudo vgs vg_practice
VG #PV #LV #SN Attr VSize VFree
vg_practice 2 2 0 wz--n- <20.00g 0
# VG 여유 공간이 없으면 새 PV를 추가하여 vgextend 필요
sudo pvcreate /dev/sdc
sudo vgextend vg_practice /dev/sdc
sudo vgs vg_practice
VG #PV #LV #SN Attr VSize VFree
vg_practice 3 2 0 wz--n- <40.00g <20.00g
LV 및 파일시스템 확장 (ext4)
# LV 크기 확장 (+7.5G)
sudo lvextend -L +7.5G /dev/vg_practice/lv_app
Size of logical volume vg_practice/lv_app changed from 15.00 GiB to 22.50 GiB.
Logical volume vg_practice/lv_app successfully resized.
# ext4 파일시스템 온라인 확장 (언마운트 불필요)
sudo resize2fs /dev/vg_practice/lv_app
resize2fs 1.46.5
Filesystem at /dev/vg_practice/lv_app is mounted on /app; on-line resizing required
The filesystem on /dev/vg_practice/lv_app is now 5898240 (4k) blocks long.
df -hT /app
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_practice-lv_app ext4 23G 8.2G 14G 37% /app
XFS 볼륨 확장
sudo lvextend -L +3G /dev/vg_practice/lv_log
# XFS는 마운트 포인트 지정 (마운트 상태 필수)
sudo xfs_growfs /log
data blocks changed from 1310720 to 2097152
문제 상황
LVM 볼륨을 마운트하고 서버를 재부팅했더니 /app 디렉터리가 비어 있습니다. 데이터는 손실되지 않았지만 마운트가 해제된 상태입니다.
df -h
# /app 항목 없음
ls /app
# (비어 있음 — 언마운트 상태)
원인 분석
sudo mount 명령으로 수동 마운트했지만 /etc/fstab에 등록하지 않은 경우입니다. fstab에 없는 마운트는 재부팅 시 자동으로 복원되지 않습니다.
cat /etc/fstab
# lv_app 항목 없음 확인됨
해결 방법
# 1. LV의 UUID 확인
sudo blkid /dev/vg_practice/lv_app
# /dev/mapper/vg_practice-lv_app: UUID="b1c2d3e4-f5a6-..." TYPE="ext4"
# 2. fstab에 항목 추가
echo '/dev/vg_practice/lv_app /app ext4 defaults 0 2' \
| sudo tee -a /etc/fstab
# 3. fstab 문법 검증 (오류 시 다음 부팅 불능 위험)
sudo mount -a
# 오류 없으면 정상
# 4. 확인
df -hT /app
예방 포인트
mount명령 실행 후 항상fstab등록 여부를 확인합니다fstab수정 후 반드시sudo mount -a로 문법을 검증합니다- LVM 장치명(
/dev/vg/lv) 또는 UUID 모두 사용 가능하나 UUID 방식이 더 안전합니다
문제 상황
XFS로 포맷된 LV를 확장한 뒤 resize2fs를 실행했더니 오류가 발생합니다.
sudo lvextend -L +5G /dev/vg_practice/lv_log
sudo resize2fs /dev/vg_practice/lv_log
resize2fs 1.46.5
resize2fs: Bad magic number in super-block
while trying to open /dev/vg_practice/lv_log
Couldn't find valid filesystem superblock.
원인 분석
resize2fs는 ext2/ext3/ext4 전용 도구입니다. XFS 파일시스템에는 사용할 수 없습니다.
# 파일시스템 유형 확인
sudo blkid /dev/vg_practice/lv_log
# TYPE="xfs"
df -T /log
# Type: xfs
해결 방법
# XFS는 xfs_growfs 사용, 마운트 포인트 지정
sudo xfs_growfs /log
data blocks changed from 1835008 to 3145728
파일시스템별 확장 명령 정리
| 파일시스템 | 확장 명령 | 특이사항 |
|---|---|---|
| ext4 | resize2fs <장치> | 온라인(마운트 상태) 또는 오프라인 모두 가능 |
| xfs | xfs_growfs <마운트포인트> | 반드시 마운트된 상태에서 실행 |
| btrfs | btrfs filesystem resize max <마운트포인트> | 마운트 포인트 기준 |
상황
운영 중인 PostgreSQL DB 서버의 /var/lib/postgresql 볼륨 사용률이 92%에 달했습니다. DB를 중단하면 서비스 장애가 발생하는 상황에서 디스크를 확장해야 합니다.
조치 절차
# 1. 현재 상태 확인
df -hT /var/lib/postgresql
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_db-lv_pgdata ext4 200G 184G 7.5G 92% /var/lib/postgresql
# 2. VG 여유 공간 확인 (0이면 새 디스크 필요)
sudo vgs vg_db
# VFree: 0
# 3. 클라우드/VMware 콘솔에서 새 디스크 /dev/sdd 연결 후
lsblk | grep sdd
# sdd 8:48 0 100G 0 disk
# 4. 새 PV 생성 및 VG 확장
sudo pvcreate /dev/sdd
sudo vgextend vg_db /dev/sdd
# 5. LV 온라인 확장 (100GB 추가, DB 중단 없음)
sudo lvextend -L +100G /dev/vg_db/lv_pgdata
# 6. 파일시스템 온라인 확장 (DB 서비스 실행 중)
sudo resize2fs /dev/vg_db/lv_pgdata
# 7. 결과 확인
df -hT /var/lib/postgresql
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_db-lv_pgdata ext4 296G 184G 98G 66% /var/lib/postgresql
현업 포인트
- LVM 없이 일반 파티션으로 구성된 서버라면 동일 상황에서 DB를 중단하고 데이터를 마이그레이션해야 합니다
- 처음 서버 구성 시 데이터 볼륨을 LVM으로 구성하는 것이 운영 유연성 확보의 핵심입니다
- 클라우드 환경(AWS EBS, GCP Persistent Disk)에서도 동일한 LVM 확장 절차가 적용됩니다
- 확장 전 스냅샷(
lvcreate -s)으로 안전망을 확보하는 것이 운영 모범 사례입니다
정리
핵심 개념 요약
| 주제 | 핵심 내용 |
|---|---|
| MBR vs GPT | MBR: 주 파티션 최대 4개, 2TB 한계 / GPT: 128개 파티션, 2TB 이상 지원 |
| fdisk 핵심 키 | n=생성, d=삭제, p=출력, t=타입(8e=LVM), w=저장, q=취소 |
| parted 장점 | GPT 완전 지원, -s 옵션으로 스크립트 자동화 |
| /etc/fstab | UUID 사용 권장, 수정 후 mount -a로 검증 필수 |
| LVM 생성 순서 | pvcreate → vgcreate → lvcreate → mkfs → mount |
| 온라인 확장 ext4 | lvextend -L +크기 장치 → resize2fs 장치 |
| 온라인 확장 xfs | lvextend -L +크기 장치 → xfs_growfs 마운트포인트 |
| LVM 스냅샷 | lvcreate -s (COW 방식), lvconvert --merge로 복원 |
자주 사용하는 명령어 치트시트
# 디스크/파티션 정보 확인
lsblk # 블록 디바이스 트리 표시
sudo fdisk -l /dev/sdb # 파티션 테이블 출력
sudo parted /dev/sdb print # parted로 파티션 정보 확인
sudo blkid # UUID 및 파일시스템 유형 확인
# LVM 상태 확인
sudo pvs && sudo vgs && sudo lvs # 전체 LVM 구성 요약
# LVM 확장 (ext4)
sudo lvextend -L +5G /dev/vg/lv
sudo resize2fs /dev/vg/lv
# LVM 확장 (xfs)
sudo lvextend -L +5G /dev/vg/lv
sudo xfs_growfs /마운트포인트