[OS] LVM

hugingstar·2025년 12월 26일

Operating system

목록 보기
22/34
post-thumbnail

이번 글에서는 Logical Volume Manager에 대해서 설명한다.

LVM(Logical Volume Manager)은 Linux에서 하드디스크나 SSD같은 저장 장치를 유연하고 효율적으로 관리하기 위해 사용하는 기술이다. 물리적으로 분산 처리를 했다면 논리적으로도 분산을 할 수 있어야 한다.

장점으로는 장치를 사용하고 있는 중에도 용량을 자유롭게 늘리거나 줄일 수 있다. 그리고 장치 이름을 편의에 따라 지정 가능하다.
RAID에서 사용하는 Striping, Mirroring등이 LVM에서도 가능하다.

구성요소

  • PV(Physical Volume) : 실제로 존재하는 물리 볼륨(물리 디스크)
  • VG(Volume Group) : 1개 이상의 PV를 묶어서 그룹화해둔 것
  • LV(Logical Volume) : VG에서 논리적으로 존재하는 볼륨(VG 용량 초과 X)
  • PE/LE(Physical Extent/Logical Extent) : PV랑 LV를 이루는 최소 단위 (Sector) Default 4MB

1. LVM 구현 방법

먼저 가상환경 시작할 때 SCSI 디스크 2개를 생성하고, 파티션 작업을 해준다.
용량은 연습에 헷갈리지 않게 3기가, 2기가를 설정했다.

먼저 lvm 관련하여 어떤 패키지 들이 있는지 훑어본다.

dnf list | grep lvm

(1) fdisk로 파티션 작업을 해준다.

fdisk /dev/sdb
n 생성
Primary 타입
전부 기본값으로하고
p로는 확인
w로 저장

fdisk /dev/sdc
n 생성
Primary 타입
전부 기본값으로하고
p로는 확인
w로 저장

(2) 파티션이 나눠졌으면 물리 볼륨을 잡아줘야한다.

pvcreate /dev/sdb1

pvcreate /dev/sdc1

물리 볼륨이 올바르게 잡혔는지 확인한다. sdb와 sdc가 올바르게 잡혀있는 것이 보인다.

pvdisplay

(3) 볼륨 그룹을 생성해준다. 파티션 이름을 마음대로 지을 수 있기 때문에 testVG로 짓는다.

vgcreate /dev/testVG /dev/sdb1 /dev/sdc1

디스플레이에서 VG size 부분을 보면 용량을 확인할 수 있다. Free는 최대 쓸 수 있는 용량을 의미한다.

vgdisplay

(4) Logical Volume을 생성한다. lvcreate에서는 사이즈를 지정해줄 수 있다. 1기가로 설정하였다. 이 testVG 그룹에 있는 것을 testLV1, testLV2로 지정하였다. 최대 용량을 넘지 않게 잘 설정하면된다.

lvcreate --size 1G --name testLV1 testVG

lvcreate --size 1G --name testLV2 testVG

남을 것들을 계산하기 어려운 경우 100%FREE를 적용해서 나머지를 모두 할당한다. lvdisplay로 LV1(1 기가), LV2(1 기가), LV3(3 기가) 을 모두 확인한다.

lvcreate --extents 100%FREE --name testLV3 testVG
lvdisplay

testVG를 확인해본다.

ls -l /dev/testVG/

여기서 보면 상대적으로 생각해보면 /dev가 testVG의 상위 디렉토리 이므로 dm-로 시작하는 모든 애들을 찾아본다. 여러개의 disk가 나올 것이다.

ls -l /dev | grep dm-*

(5) 파티션을 모두 만들었으면 파일 시스템의 타입을 적용시킨다. testVG라는 볼륨 그룹에 LV testLV1에 있는 논리적 볼륨에 ext4 타입의 파일시스템을 적용시킨 것이다.

mkfs -t ext4 /dev/testVG/testLV1
mkfs -t ext4 /dev/testVG/testLV2
mkfs -t ext4 /dev/testVG/testLV3

파일시스템이 적용된 곳에다가 마운팅해준다. 먼저 최상위 디렉토리에 디스크 저장할 /lvm1 /lvm2 /lvm3을 생성한다.

mkdir /lvm1 /lvm2 /lvm3

드디어 진짜 마운팅 한다. 잘못했으면 umount하고 다시 설정하면 된다.

mount /dev/testVG/testLV1 /lvm1
mount /dev/testVG/testLV2 /lvm2
mount /dev/testVG/testLV3 /lvm3
df -h

lsblk는 디스크의 파티션 정보만 보고 싶을 때 사용한다. 각 디스크별로 파티션이 어떻게 나뉘어졌는디 확인할 수 있다.

lsblk

아래 명령어로는 자세하게 볼 수도 있다.

ls -l

추가 내용

예를 들어서 LVM은 볼륨만 다시 잡아주면 된다. 그럼 기존 내용 유지하면서도 용량을 늘릴 수 있다. 구현해볼려면 일단 전원을 끄고 SCSI 하드디스크를 추가한다.

여기서 그냥 꺼버리면 마운트 제거되서 다시 설정해야 한다. 마운트만 다시 해주면 된다.

mount /dev/testVG/testLV1 /lvm1
mount /dev/testVG/testLV2 /lvm2
mount /dev/testVG/testLV3 /lvm3

한번 확인해준다. sdb와 sdc가 정상적으로 연결되어 있다. LV1, LV2, LV3이 있다.

lsblk

새롭게 추가된 디스크의 파티션을 설정한다. 만약에 이미 디스크가 잡혀있으면 다른 것으로 사용해야 한다.

fdisk /dev/sdd
n 생성
엔터
w 저장

파티션 안나눠진애 사용할려면? 아래 명령어 쳐서 뒤에 숫자 1이 없으면 아직 파티션 설정 안된 것이다.

fdisk /dev/sd

Pvcreate 하고,
Vgextend 진행한다.

VG는 볼륨 그룹이다.

Linear와 다르게 Extend로 추가만 해주면 된다.

먼저 물리 볼륨을 추가해준다.

pvcreate /dev/add1

볼륨 그룹을 확장해준다.

vgextend testVG /dev/sdd1

Logical volume을 확장해준다.

lvestend -l +100%FREE /dev/testVG/testLV1

그리고 새로운 것이 추가되었기 때문에 파일 시스템도 새롭게 조정해줘야 한다. 용량이 바꼈을 것이다.

resize2fs /dev/testVG/testLV1
lsblk

이제 꺼도 mount 풀리지 안도록 최종 작업을 해준다.

test라는 글씨가 있는 것만 잡아서 UUID를 확인한다. UUID에 오타 섞이면 복구모드로 빠진다.

blkid | grep test

vi 편집기를 사용해서 UUID를 아래에 추가한다. /lvm1 /lvm2 /lvm3 추가 된 것이 보인다.

재부팅해보고 df -h로 잘 연결되어 있는지 확인한다. 잘 연결되어 있는 것이 보인다.

/dev/mapper/testVG-testLV1
/dev/mapper/testVG-testLV2
/dev/mapper/testVG-testLV3

0개의 댓글