기본 개념 이해
논리 볼륨 매니저(Logical Volume Manager, LVM)는 물리적 스토리지의 유연한 관리를 가능하게 하는 기술입니다. 주요 구성 요소는 다음과 같습니다:
- 물리 볼륨 (PV): 실제 디스크나 파티션으로,
fdisk등을 사용해 타입을8e로 설정하면 LVM이 인식할 수 있습니다. - 볼륨 그룹 (VG): 하나 이상의 물리 볼륨을 모아 만든 저장 공간 집합.
- 논리 볼륨 (LV): 특정 볼륨 그룹에서 할당된 가상 디스크 공간.
이 구조를 통해 여러 개의 작은 디스크를 하나의 큰 논리 디스크처럼 사용할 수 있으며, 크기 조정도 쉽게 수행됩니다.
왜 LVM을 사용하는가?
- 대용량 스토리지 구성: 단일 디스크로는 불가능한 용량(예: 30TB)을 여러 디스크를 병합해 구현 가능.
- 유연한 확장 및 축소: 초기 계획과 실제 사용량 사이의 차이를 보완하기 위해 런타임에 볼륨 크기를 조정할 수 있음.
디스크 추가 및 준비
- 새로운 디스크(
/dev/sdb)를 시스템에 연결. - 파티셔닝:
fdisk /dev/sdb # 파티션 1과 2 생성 후, 타입을 8e로 변경
물리 볼륨 생성
pvcreate /dev/sdb1
생성 확인:
pvs
볼륨 그룹 생성
vgcreate vg0 /dev/sdb1
# 또는 지정된 크기로 생성
vgcreate -s 2G vg0 /dev/sdb1
확인 명령:
vgs
논리 볼륨 생성
lvcreate -n app_data -L 2G vg0
확인:
lvs
파일 시스템 포맷팅
mkfs.ext4 /dev/vg0/app_data
마운트 및 자동 마운트 설정
- 마운트 포인트 생성:
- 임시 마운트:
- 자동 마운트 등록 (
/etc/fstab에 추가):
mkdir /mnt/app_data
mount /dev/vg0/app_data /mnt/app_data
/dev/vg0/app_data /mnt/app_data ext4 defaults 0 0
온라인 확장 (확장)
볼륨 그룹에 여유 공간이 있는 경우:
lvextend -L +3G /dev/vg0/app_data
resize2fs /dev/vg0/app_data
한 번에 확장 및 파일 시스템 동기화:
lvextend -r -L 6G /dev/vg0/app_data
오프라인 축소 (단, ext4만 지원)
- 마운트 해제:
- 파일 시스템 검사:
- 파일 시스템 축소:
- 논리 볼륨 축소:
- 재마운트:
umount /mnt/app_data
fsck -f /dev/vg0/app_data
resize2fs /dev/vg0/app_data 3G
lvreduce -L 3G /dev/vg0/app_data
mount -a
ext4 파일 시스템에서 스냅샷 생성
lvcreate -s -n db_snapshot -L 500M -p r /dev/vg0/app_data
읽기 전용 스냅샷 마운트:
mount /dev/vg0/db_snapshot /mnt/snap
스냅샷 복원
- 마운트 해제:
- 스냅샷 복원:
- 재마운트:
umount /mnt/app_data /mnt/snap
lvconvert --merge /dev/vg0/db_snapshot
mount -a
xfs 파일 시스템에서 스냅샷
먼저 xfs 볼륨 생성:
lvcreate -n log_vol -L 2G vg0
mkfs.xfs /dev/vg0/log_vol
mkdir /mnt/log
mount /dev/vg0/log_vol /mnt/log
스냅샷 생성 및 마운트:
lvcreate -s -n log_snap -L 500M /dev/vg0/log_vol
mount -o ro,nouuid /dev/vg0/log_snap /mnt/snap
복원 절차:
- 마운트 해제:
- 복원:
- 재마운트:
umount /mnt/log /mnt/snap
lvconvert --merge /dev/vg0/log_snap
mount -a
정리 및 리소스 제거
- 마운트 해제:
- 논리 볼륨 삭제:
- 볼륨 그룹 삭제:
- 물리 볼륨 제거:
- 파티션 삭제:
- 디스크 제거
umount /mnt/log /mnt/app_data
lvremove /dev/vg0/log_vol
lvremove /dev/vg0/app_data
vgremove vg0
pvremove /dev/sdb1
fdisk /dev/sdb
# d → 1, d → 2 → w