blog.roondal.co.kr/posts/os-linux-lvm

ROONDAL BLOG

일상과 기술을 기록합니다.

테크 깜짝놀란파파 2026-04-09 댓글 0

🔗 도입: 리눅스 디스크 스토리지 관리의 한계점 (Introduction)

리눅스 서버를 운영하다 보면 초기 파티션 설정 이후 디스크 용량이 부족해지는 상황에 빈번하게 직면합니다. 전통적인 일반 파티션(fdisk/parted) 방식은 파티션 크기를 확장하려면 디스크 내에 연속된 물리적 빈 공간이 필요하여, 한 번 정해진 용량을 변경하기가 매우 까다롭고 위험합니다. 이번 포스팅에서는 이러한 기존 디스크 관리 방식의 경직성을 극복하고, 디스크 용량을 유연하게 확장 및 축소할 수 있게 해주는 LVM(Logical Volume Manager)에 대해 알아봅니다.


📖 1. LVM(Logical Volume Manager)의 정의 (Definition)

LVM은 리눅스 환경에서 물리적인 디스크(Storage)나 파티션을 논리적인 볼륨으로 그룹화하여, 마치 고무줄처럼 유연하게 용량을 조절할 수 있도록 해주는 고급 스토리지 관리 기술입니다.

한 줄 요약: LVM이란 디스크 파티션의 크기 변경이 어려운 단점을 해결하기 위해, 여러 물리 디스크를 하나의 논리적 가상 디스크 풀(Pool)로 묶고 필요한 만큼 자유롭게 용량을 할당하는 디스크 관리 시스템이다.


🧠 2. 핵심 내용 및 아키텍처 (Content & Architecture)

LVM은 세 가지 주요 계층(PV, VG, LV)으로 나뉘어 동작하며 스토리지의 유연성을 확보합니다.

  • PV (Physical Volume, 물리 볼륨): 실제 물리적 하드 디스크(/dev/sdb, /dev/sdc)나 파티션을 LVM에서 사용할 수 있는 블록 형태로 변환한 단위입니다.
  • VG (Volume Group, 볼륨 그룹): 여러 개의 PV를 묶어 하나의 커다란 가상 디스크 풀(Pool)로 만든 공간입니다.
  • LV (Logical Volume, 논리 볼륨): VG 안에서 사용자가 원하는 크기만큼 쪼개어 할당받은 가상 파티션으로, 이곳에 파일시스템을 포맷하고 실제 운영체제에 마운트하여 사용합니다.

🎨 동작 원리 다이어그램

LVM 아키텍처 흐름도
그림 1: 물리 디스크에서 LVM (PV -> VG -> LV) 계층을 거쳐 논리 볼륨으로 구성되는 아키텍처 흐름도

🛠️ 3. 테스트베드 구축 및 실습 (Testbed Setup)

Step 1. 환경 준비

  • OS: Ubuntu 22.04 LTS (또는 CentOS/RHEL 계열)
  • 사전 요구사항: OS 디스크 외에 추가로 장착된 빈 디스크 2개 (/dev/sdb, /dev/sdc)

Step 2. 설치 및 기본 설정

# LVM2 패키지 업데이트 및 설치
sudo apt-get update
sudo apt-get install lvm2 -y

Step 3. PV, VG, LV 생성

# 1. PV(Physical Volume) 생성
sudo pvcreate /dev/sdb /dev/sdc

# PV 생성 상태 확인
sudo pvs

# 2. VG(Volume Group) 생성 ('data_vg' 라는 이름으로 sdb와 sdc 묶기)
sudo vgcreate data_vg /dev/sdb /dev/sdc

# VG 생성 상태 확인
sudo vgs

# 3. LV(Logical Volume) 생성 ('data_vg'에서 10G 크기의 'web_lv' 논리 볼륨 생성)
sudo lvcreate -n web_lv -L 10G data_vg

# LV 생성 상태 확인
sudo lvs

Step 4. 파일시스템 포맷 및 마운트 테스트

# 생성된 LV에 ext4 파일시스템 포맷
sudo mkfs.ext4 /dev/data_vg/web_lv

# 마운트 포인트 생성
sudo mkdir -p /mnt/web_data

# 디스크 마운트 적용
sudo mount /dev/data_vg/web_lv /mnt/web_data

# 정상 마운트 여부 확인
df -h | grep web_data

Step 5. 논리 볼륨(LV) 용량 확장 실습 (온라인 확장)

# 'web_lv' 용량을 5G 추가 확장 (+5G)
sudo lvextend -L +5G /dev/data_vg/web_lv

# LV 확장 후, 적용된 실제 파일시스템 용량도 확장 (ext4 기준)
sudo resize2fs /dev/data_vg/web_lv

# 용량이 늘어났는지 최종 확인
df -h | grep web_data

⚠️ 4. 주의사항 및 실무 팁 (Precautions & Tips)

  • 🚨 데이터 유실 주의: 여러 물리 디스크가 하나의 VG로 묶여 있기 때문에, VG에 속한 물리 디스크 중 하나라도 고장나면 VG 전체 데이터에 손상이 갈 수 있습니다. 따라서 실무에서는 하드웨어 RAID(RAID 1, 5 등) 기반 위에서 LVM을 구성하여 가용성을 확보하는 것이 중요합니다.
  • 📉 LV 축소 위험: LV 용량 확장(lvextend)은 서비스(온라인) 중에도 비교적 쉽게 가능하지만, 축소(lvreduce)는 파일시스템 손상 위험이 커서 권장하지 않습니다. 만약 해야 한다면 반드시 언마운트 상태에서 파일시스템 축소(resize2fs)를 선행하고 신중하게 작업해야 합니다.
  • 💡 Best Practice: 처음부터 VG의 전체 남은 용량을 LV에 전부 할당하지 마세요. 필요한 최소한의 용량만 할당해두고 추후 디스크 공간이 부족할 때마다 VG의 여유 공간을 이용해 확장하는 방식으로 운영하는 것을 권장합니다.

❓ 5. 자주 묻는 질문 (FAQ)

Q1. 기존 일반 파티션(fdisk/parted) 방식과 비교해 LVM을 도입하면 어떤 장점이 있나요?
A1. '파티션 확장의 유연성'이 가장 큽니다. 기존 방식은 파티션 뒤에 빈 연속된 공간이 있어야만 파티션을 확장할 수 있지만, LVM은 VG에 새로운 디스크(PV)만 꽂아 추가하면 파티션의 물리적 위치에 상관없이 언제든지 LV의 용량을 유연하게 늘릴 수 있습니다.

Q2. 실습 중 pvcreate /dev/sdb 명령어 실행 시 Device /dev/sdb not found 에러가 발생합니다.
A2. 가상 머신(VM)이나 클라우드 인스턴스에 실제로 디스크가 추가되지 않았거나, OS에서 새 디스크를 인식하지 못한 상태일 확률이 높습니다. lsblk 명령어를 먼저 실행하여 리눅스가 물리적인 /dev/sdb 블록 디바이스를 정상적으로 인식하고 있는지 확인해 보세요.

댓글 0