[Linux] LVM

728x90

LVM 이란

여러 개의 하드디스크를 합쳐서 한 개의 파일시스템으로 사용하는 것으로 필요에 따라서 다시 나눌 수 있다.

물리 볼륨 : /dev/sda1, /dev/sdb1 등의 파티션

볼륨 그룹 : 물리 볼륨을 합쳐서 1개의 물리 그룹으로 만드는 것

LVM 은 명령어를 통해서 RAID 구성을 할 수 있다.
최소 디스크 숫자는 지켜줘야 한다.

물리 볼륨 생성

pvcreate [장치 이름]
ex)
파티션 생성 (sdb1~4 생성)
해당 파티션를 하나의 물리 볼륨으로 구성
$ pvcreate /dev/sdb[1-4]

논리 볼륨 생성

lvcreate [vg 이름] -n [lv 이름] -L [실제 크기] 또는 -l [le 갯수]
ex)
lvcreate [vg명] -l 100%FREE -n [lv명] -> 남은 용량 모두 할당
mkfs.xfs /dev/[vg명]/[lv명] -> 논리볼륨 포맷
mkdir /mnt/disk{1..3} -> 마운트해 줄 폴더 생성
mount /dev/[vg명]/[lv명] /mnt/disk1 -> 마운트

물리볼륨 삭제

pvremove [pv 이름]

볼륨그룹 삭제

vgremove [vg 이름]

논리볼륨 삭제

lvremove [lv 경로]
논리 볼륨 삭제하기 전에 마운트 해제해줘야 한다.

LVM 실습

4G 2개, 6G 2개 되도록 설정하시오.

$ fdisk
$ n 
$ p
$ +4G, +4G
$ +6G, +6G

/dev/sdb1~4 모두 물리 볼륨으로 생성

$ pvcreate /dev/sdb[1-4]

/dev/sdb2,4 볼륨 그룹 생성 (pe 단위를 8M로) 

$ vgcreate vg0 /dev/sdb[24] -s 8M

lv01 2G (-L 옵션을 사용해서) 

$ lvcreate vg0 -n lv01 -L +2G

lv02 4G (-l  옵션을 사용해서)

8M * 512 == 4G
$ lvcreate vg0 -n lv02 -l 256

lv01 은 /mnt/disk1로 마운트 (파일시스템 xfs)

$ mkdir /mnt/disk{1..3}
$ mkfs.xfs /dev/vg0/lv01
$ mount /dev/vg0/lv01 /mnt/disk1

lv02 는 /mnt/disk2로 마운트 (파일시스템 ext4)

$ mkfs.ext4 /dev/vg0/lv02
$ mount /dev/vg0/lv02 /mnt/disk2

lv03 생성 - 나머지 용량 모두 사용해서 생성 (파일시스템 xfs) 영구마운트

$ lvcreate vg0 -n lv03 -l 100%FREE
$ mkfs.xfs /dev/vg0/lv03
$ vi /etc/fstab
/dev/vg0/lv03   /mnt/disk3   xfs   defaults    0    1

mount -a 마운트 시키고 확인

$ mount -a
$ lsblk
$ df -Th

생성한 lv,vg,pv 모두 삭제

$ umount -a
$ vi /etc/fstab
dd 로 지운다.
$ lvremove /dev/vg0/lv0[1-3]
$ vgremove vg0
$ pvremove /dev/sdb[1-4]

설정의 역순

볼륨 그룹 확장

vgextend [vg명] [pv명]
$ vgextend vg0 /dev/sdb2

볼륨 그룹 축소

vgreduce [vg명] [pv명]...
해당 물리 볼륨이 사용 중이라면 물리 볼륨의 내용을 볼륨 그룹에 옮긴 후에 축소시켜야 한다.

물리 볼륨 내용 이동

pvmove [pv명]...
$ pvmove /dev/sdb3
$ vgreduce vg0 /dev/sdb3

논리 볼륨 확장

lvextend -L [+추가 크기 또는 최종 크기][ [lv경로] -r(파일시스템 확장)
ex)
$ lvextend -L +2G /dev/vg0/lv01
또는
$ lvextend -L 7G /dev/vg0/lv02
-> 논리 볼륨만 확장된 것이고 실제 사용할 수 있게 해주는 파일 시스템을 확장하지 않았기 때문에
파일 시스템도 확장된 만큼 같이 확장시켜줘야 한다.

파일시스템의 종류에 따라 확장 방법이 다르다.
xfs 파일시스템 확장 : xfs_growfs 마운트 포인트
ex)
xfs_growfs /mnt/disk1
ext4 파일시스템 확장 : resize2fs lv경로
ex)
resize2fs /dev/vg0/lv02

즉 확장과 동시에 파일시스템도 동시에 확장시켜줘야 한다.
$ lvextend -L +0.5G /dev/vg0/lv01 -r 이런 식으로 해주면 같이 확장된다.

LVM 확장, 축소 실습

스냅샷 초기화

파티션 용량 4,6,4,6
/dev/sdb1~4 모두 물리 볼륨으로 생성

$ pvcreate /dev/sdb[1-4]

/dev/sdb1,4 으로 볼륨 그룹 생성 (pe 단위를 16M로)

$ vgcreate vg0 /dev/sdb[14] -s 16M

lv01 4G (-L 옵션을 사용해서) 

$ lvcreate vg0 -n lv01 -L +4G

lv02 4G (-l  옵션을 사용해서)

256 * 16M == 4G
$ lvcreate vg0 -n lv02 -l 256

lv03 남은 용량 모두 사용 

$ lvcreate vg0 -n lv03 -l 100%FREE

lv01 은 xfs 파일시스템으로 format 해서 /mnt/disk1로 마운트 

$ mkdir /mnt/disk/{1..3}
$ mkfs.xfs /dev/vg0/lv01
$ mount /dev/vg0/lv01 /mnt/disk1

lv02 는 ext4 파일시스템으로 format 해서 /mnt/disk2로 마운트

$ mkfs.ext4 /dev/vg0/lv02
$ mount /dev/vg0/lv02 /mnt/disk2

lv03 은 xfs 파일시스템으로 format 해서/mnt/disk3로 마운트 

$ mkfs.xfs /dev/vg0/lv03
$ mount /dev/vg0/lv03 /mnt/disk3

볼륨그룹에 /dev/sdb3 추가할 것

$ vgextend vg0 /dev/sdb3

lv01를 5G로 확장할 것(+ 옵션을 사용해서) -r 옵션 사용하지 말 것

$ lvextend -L +1G /dev/vg0/lv01

명령어로 파일시스템 확장

$ xfs_growth /mnt/disk1
$ lsblk
$ df -Th

lv02를 6G로 확장할 것(+ 옵션을 사용하지 말고) -r 옵션 사용하지 말 것

$ lvextend -L 6G /dev/vg0/lv02

명령어로 파일시스템 확장

$ resize2fs /dev/vg0/lv02
$ lsblk
$ df -Th

/dev/sdb4가 문제가 생겼습니다. /dev/sdb4를 제거하시오.

$ vgextend vg0 /dev/sdb2   =>   vgmove 할 용량이 부족하기 때문에 확장을 해줘야 한다.
$ vgmove /dev/sdb4
$ vgreduce vg0 /dev/sdb4
728x90