
이번 글에서는 Logical Volume Manager에 대해서 설명한다.
LVM(Logical Volume Manager)은 Linux에서 하드디스크나 SSD같은 저장 장치를 유연하고 효율적으로 관리하기 위해 사용하는 기술이다. 물리적으로 분산 처리를 했다면 논리적으로도 분산을 할 수 있어야 한다.
장점으로는 장치를 사용하고 있는 중에도 용량을 자유롭게 늘리거나 줄일 수 있다. 그리고 장치 이름을 편의에 따라 지정 가능하다.
RAID에서 사용하는 Striping, Mirroring등이 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
