LVM (Logical Volume Manager)
가상볼륨방식, PV(Physical Volume) 을 LV(Logical Volume) 으로 전환하여 사용하는 방식. 여러가지의 PV를 묶어서 논리적으로 연결시켜 LV 로 하여금 이용하는 방식이다.
[용어해설]
볼륨 (Volume) : 블록단위로 접근하는 스토리지(저장소) = disk / partitions
1. 장점 및 기능 : 확장성, 안정성, 편의성(관리용이) 가 유리하다.
유연한 용량
크기조정 가능한 스토리지 풀
온라인 데이터 재배치
디스크 스트라이핑 (DIsk Stripe)
미러 볼륨 (Mirror Volume)
볼륨 스냅샷 (Volume Snapshot)
* 스냅샷 (Snapshot)
파일은 inode 와 datablack 으로 구성되어있다.
백업(backup) 은 inode 와 datablack 를 모두 복사해두는 방식.
스냅샷(Snapshot) 은 inode 만 복사해두는 방식.
2. 주요 개념/용어
1) 용어
PV (Physical Volume) : 물리적인 볼륨 Disk 또는 Partitions
VG (Volume Group) : PV들의 집합 가상 디스크
LV (Logical Volume) : VG 공간을 전체 또는 분할하여 논리적으로 할당한 공간. 가상 파티션
PE (Physical Extent) : 기본단위 4M, VG 내 PV의 볼륨의 최소단위 (1m ~ 256m 사이 지정가능)
LE (Logical Extent) : 기본단위 4M LV 내 볼륨을 지정하는 최소단위
2) 가상 파티션을 나누는 방식. (LV 생성방식)
Table (LV생성 기본값)
PE 와 LE가 1:1로 지정되는 방식 하나의 PV 내 PE 를 LE와 순차적 매핑을 진행하는 방식
Mirror
PE 와 LE가 2:1 or 3:1 등으로 지정되는 방식 (tow-way, three-way)
Stripe
PE 와 LE 1:1 로 지정되는 방식, 여러 PV 내 PE 를 LE 와 동시다발적 매핑을 진행하는 방식.
3. 구성
1) 사용중이지 않은 DISK를 장착하여 확인한다.
[root@server1 ~]# ls -l /dev/sd?
brw-rw---- 1 root disk 8, 0 Apr 8 17:59 /dev/sda
brw-rw---- 1 root disk 8, 16 Apr 8 17:59 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr 8 18:03 /dev/sdc
brw-rw---- 1 root disk 8, 48 Apr 8 17:59 /dev/sdd
brw-rw---- 1 root disk 8, 64 Apr 8 17:59 /dev/sde
brw-rw---- 1 root disk 8, 80 Apr 8 17:59 /dev/sdf
2) Disk 를 하나의 파티션으로 구성. (Partition System ID: 8e)
[root@server1 ~]# fdisk /dev/sdc
Command (m for help): p
Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x86800e60
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2097151 2095104 1023M 83 Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): p
Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x86800e60
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2097151 2095104 1023M 8e Linux LVM
... 이하 모든 disk 동일작업 진행
[root@server1 ~]# fdisk -l | grep LVM
/dev/sdc1 2048 2097151 2095104 1023M 8e Linux LVM
/dev/sdd1 2048 2097151 2095104 1023M 8e Linux LVM
/dev/sde1 2048 2097151 2095104 1023M 8e Linux LVM
/dev/sdf1 2048 2097151 2095104 1023M 8e Linux LVM
3) PV 생성
* ID 8e 이어야 만 가능.
pvcreate <DISK> : PV 생성 명령어
pvs : pv 확인 명령어
pvremove : PV를 지우는 명령어
* PV 정보들을 확인하는 명령어 : pvscan, lvmdiskcan
[root@server1 ~]# pvcreate /dev/sdc1
WARNING: xfs signature detected on /dev/sdc1 at offset 0. Wipe it? [y/n]: y ( 파일시스템 포맷여부 )
Wiping xfs signature on /dev/sdc1.
Physical volume "/dev/sdc1" successfully created.
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 lvm2 --- 1023.00m 1023.00m
... 이하 모든 disk 동일작업 진행
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 lvm2 --- 1023.00m 1023.00m
/dev/sdd1 lvm2 --- 1023.00m 1023.00m
/dev/sde1 lvm2 --- 1023.00m 1023.00m
* pvs 정보 분석
PV : PV 이름
VG : PV 가 포함된 VG 이름
Fmt : LVM 버전
Attr : LVM thrtjd
PSize : PV 크기
PFree : PV 남은 공간
[실습] PV 생성, 삭제, 이름변경 등 옵션을 수행해보자
4) VG 생성
-> 최소한 하나 이상의 PV가 있어야 생성가능
vgcreate : VG를 생성하는 명령어 ( -s = pv의 size 변경 )
vgremove : VG를 삭제하는 명령어
vgextend : VG에 PV를 추가하는 명령어 / vgreduce : VG에 일부 PV를 제거하는 명령어
vgrename : VG의 이름을 재지정 하는 명령어
vgs / vgdisplay / vgscan : VG를 확인하는 명령어
[root@server1 ~]# vgcreate vg1 /dev/sd[cde]1
Volume group "vg1" successfully created
[root@server1 ~]# vgs
VG #PV #LV #SN Att r VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 0 0 wz--n- <2.99g <2.99g
[실습] VG 생성, 삭제, 이름변경 등 옵션을 수행해보자
5) LV 생성 (LV의 이름은 자동생성됨)
lvcreate : LV를 생성 (이하 옵션과 함깨 사용되어야함)
lvcreate -L 10G vg1 : 용량을 지정하여 LV 생성, (기본단위는 M 단위 단위기호 사용가능)
lvcreate -n lv1 : LV의 이름을 지정하여 생성
lvcreate -l 20% vg1 : 용량을 %로 지정하여 LV 생성
lvcreate -l 100%FREE : 남은 용량의 전체를 지정하여 LV 생성
lvremove : LV를 삭제
lvrename vg1 lv1 lv2 : LV 이름 재지정
lvextend -L 12G : LV의 용량을 12G로 맞춰라
lvextend -L +1G : LV의 용량에 1G를 추가하라
lvextend -l +100%FREE : LV의 용량에 남은공간을 모두 추가하라
lvreduce -L 3G : LV의 용량을 3G로 맞춰라
lvreduce -L -3G : LV의 용량에 3G를 제거하라
lvs / lvscan / lvdisplay : LV 정보확인용 명령어
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 0 0 wz--n- <2.99g <2.99g
[root@server1 ~]# lvcreate -L 1G -n lv1 vg1
Logical volume "lv1" created.
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 1 0 wz--n- <2.99g <1.99g
[root@server1 ~]# lvcreate -l 100%FREE -n lv2 vg1
Logical volume "lv2" created.
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 2 0 wz--n- <2.99g 0
[root@server1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg1 -wi-a----- 1.00g
lv2 vg1 -wi-a----- <1.99g
[실습] LV 생성, 삭제, 이름변경 등 옵션을 수행해보자
[참고] LV의 크기를 줄이기 위해서는 백업과정을 거친다.
-> 백업하고난 뒤 크기를 줄이고, 혹시 이상이있으면 복구과정을 진행해야함
-> 스냅샷을 뜨고 크기줄이고, 혹시 이상이 있으면 복구과정을 진행해야함.
6) F/S 생성
mkfs CMD 를 통하여 생성진행
[root@server1 ~]# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 134144 4k blocks and 33600 inodes
Filesystem UUID: 4c35b4c7-fb5b-4881-abf3-7b9a94e7a6a9
Superblock backups stored on blocks:
32768, 98304
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
7) 마운트
mount CMD를 활용하여 마운트를 진행, 및 LVM setting을 완료한다.
[root@server1 ~]# mkdir -p /lv1 /lv2
[root@server1 ~]# mount /dev/vg1/lv1 /lv1
[root@server1 ~]# mount /dev/vg1/lv2 /lv2
[root@server1 ~]# df
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 26M 1.8G 2% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 39G 5.6G 33G 15% /
/dev/sda1 xfs 1014M 240M 775M 24% /boot
/dev/mapper/cl-home xfs 19G 179M 19G 1% /home
tmpfs tmpfs 371M 1.2M 370M 1% /run/user/42
tmpfs tmpfs 371M 4.6M 367M 2% /run/user/0
/dev/sr0 iso9660 8.7G 8.7G 0 100% /run/media/root/CentOS-8-3-2011-x86_64-dvd
/dev/mapper/vg1-lv1 ext4 500M 804K 463M 1% /lv1
/dev/mapper/vg1-lv2 ext4 976M 2.6M 907M 1% /lv2
[참고] /etc/fstab 에 추가하는 방법.
/dev/mapper/vg1-lv1 /lv1 ext4 defaults 1 2
/dev/vg1/lv2 /lv2 ext4 defaults 1 2
2가지 방법으로 내용추가가 가능하다. (어느걸 사용해도 상관없음)
[참고] 이전 방식과 LVM 방식의 비교
[이전작업방식] | [LVM 작업방식] |
(ㄱ) 파티션 작업 (Partition ID 83)
# mkfs.ext3 /dev/sdc1 (ㄷ) 마운트 작업 # vi /etc/fstab # mkdir /oracle # mount /oracle |
(ㄱ) 파티션 작업(Partition ID (83 -> 8e)) (ㄴ) 파일시스템 작업 # mkfs.ext3 /dev/vg1/lv1
(ㄷ) 마운트 작업 |
3. LVM 관리
1) LVM 용량 관리 ( 파일 시스템에 따른 방법 )
[참고] 파일시스템 지정 후 LV 의 용량 관리
ext4 : 용량을 늘리고 줄이기 가능. (resize2fs [/dev/vg1/lv2] CMD로 적용 필수)
xfs : 용량을 늘리기는 가능하나 줄이기는 불가. (xfs_growfs [/mnt/point] CMD로 적용 필수)
ex1) ext4의 경우 용량 늘리기.
[root@server1 /dev/mapper]# df /lv[12]
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg1-lv1 ext4 500M 401M 63M 87% /lv1
/dev/mapper/vg1-lv2 ext4 976M 403M 507M 45% /lv2
[root@server1 /dev/mapper]# lvextend -l 100%FREE /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 524.00 MiB (131 extents) to <1.48 GiB (378 extents).
Logical volume vg1/lv1 successfully resized.
[root@server1 /dev/mapper]# df /lv[12]
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg1-lv1 ext4 500M 401M 63M 87% /lv1
/dev/mapper/vg1-lv2 ext4 976M 403M 507M 45% /lv2
[root@server1 /dev/mapper]# resize2fs /dev/vg1/lv1
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/vg1/lv1 is mounted on /lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg1/lv1 is now 387072 (4k) blocks long.
[root@server1 /dev/mapper]# df /lv[12]
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg1-lv1 ext4 1.5G 402M 1004M 29% /lv1
/dev/mapper/vg1-lv2 ext4 976M 403M 507M 45% /lv2
ex2) ext4의 경우 용량을 줄이기 (Filesystem Shrink)
파일시스템 용량을 줄이는 경우의 절차 -> 이행되지 않으면 파일이 망가질 수 있음.!!!
(ㄱ) 파일시스템 언마운트(umount)
# umount /lv1
(ㄴ) 파일시스템 점검(fsck -f/fsck.ext3 -f/e2fsck -f)
# e2fsck -f /dev/vg1/lv1
(ㄷ) 파일시스템 용량 줄이기
# resize2fs -p /dev/vg1/lv1 700M (700M 로 용량을 줄이는것이 아닌 700M로 만드는것)
(ㄹ) LV 용량 줄이기
# lvrecuce -L 700M /dev/vg1/lv1
* 파일시스템에서 지정한 용량과 lvrecuce 에서 지정하는 용량은 반드시 동일해야한다!
[참고] resize2fs -p /dev/vg1/lv1 1.5G 형식은 사용이 불가하다
(X) # resize2fs -p /dev/vg1/lv1 1.5G
(0) # resize2fs -p /dev/vg1/lv1 1500M
-> 이렇게 하게 되면.. 바로 파일시스템 망가짐
[참고] 용량증설, 감소의 비교
용량의 증설 : lvextend CMD -> resize2fs CMD
용량의 감소 : resize2fs CMD -> lvrecuce CMD * 단 두 CMD에 지정된 용량은 반드시 같아야한다.
2) VG 안의 PV 를 새로운 PV 로 교체
피지컬 디스크를 업그레이드 하는 과정에서 PV를 교체하는방법.
pvmove pv1 pv2 : pv1의 파일들을 pv2로 옮긴다.
[root@server1 ~]# fdisk /dev/sdg
[root@server1 ~]# pvcreate /dev/sdg1
Physical volume "/dev/sdg1" successfully created.
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 0
/dev/sdd1 vg1 lvm2 a-- 1020.00m 4.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 0
/dev/sdf1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdg1 lvm2 --- 1023.00m 1023.00m
[root@server1 ~]# pvmove /dev/sde1 /dev/sdg1
/dev/sde1: Moved: 9.41%
/dev/sde1: Moved: 100.00%
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 0
/dev/sdd1 vg1 lvm2 a-- 1020.00m 4.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdf1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdg1 vg1 lvm2 a-- 1020.00m 0
[root@server1 ~]# vgreduce vg1 /dev/sde1
Removed "/dev/sde1" from volume group "vg1"
3) LV/VG/PV 삭제
작업 순서
umount 작업
LV 삭제(lvremove CMD)
VG 삭제(vgremove CMD)
PV 삭제(pvremove CMD)
4. Stripe 방식, Mirror 방식 으로 LVM 구성.
1. Stripe 방식
lvcreate -L 50G -i2 -n lv1 vg1
lvcreate -L 50G -i2 -I64 -n lv1 vg1 (-I : 대문자 i)
-i 옵션: number of stripes : 볼륨의 갯수를 지정 ex) -i2=2개의 볼륨에 거쳐 생성. ( 자동으로 PV 지정 )
-I 옵션: stripe size(KB) : 볼륨의 저장기준 지정 (기본값이 64KB)
1) 생성
[root@server1 ~]# pvcreate /dev/sd[cde]1
[root@server1 ~]# vgcreate vg1 /dev/sd[cde]1
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdd1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 1020.00m
[root@server1 ~]# lvcreate -L 1500M -i3 -n stripelv vg1
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 520.00m
/dev/sdd1 vg1 lvm2 a-- 1020.00m 520.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 520.00m
2) 확장
(1) VG의 잔여 공간을 할당하기
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 1 0 wz--n- <2.99g 1.52g
[root@server1 ~]# lvextend -l +100%FREE /dev/vg1/stripelv
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 1 0 wz--n- <2.99g 0
(2) VG에 PV 추가
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 3 1 0 wz--n- <2.99g 0
[root@server1 ~]# pvcreate /dev/sd[fgh]1.
[root@server1 ~]# vgextend vg1 /dev/sd[fgh]1
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <59.00g 0
vg1 6 1 0 wz--n- <5.98g <2.99g
2.Mirror 방식
lvcreate -L 50G -m 1 -n lv1 vg1
-> -m 옵션: number of copies
lvcreate -L 12G -m 1 -n lv1 vg1 /dev/sdc1 /dev/sdd1
-> 원하는 PV로 지정을 원할 시
1) 생성
[root@server1 ~]# pvcreate /dev/sd[cdef]1
[root@server1 ~]# vgcreate vg1 /dev/sd[cdef]1
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdd1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdf1 vg1 lvm2 a-- 1020.00m 1020.00m
[root@server1 ~]# lvcreate -L 100M -m 1 -n mirrorlv vg1
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 916.00m
/dev/sdd1 vg1 lvm2 a-- 1020.00m 916.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdf1 vg1 lvm2 a-- 1020.00m 1020.00m
2) 확장
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 916.00m
/dev/sdd1 vg1 lvm2 a-- 1020.00m 916.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdf1 vg1 lvm2 a-- 1020.00m 1020.00m
[root@server1 ~]# lvextend -L +100M /dev/vg1/mirrorlv
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <59.00g 0
/dev/sdc1 vg1 lvm2 a-- 1020.00m 816.00m
/dev/sdd1 vg1 lvm2 a-- 1020.00m 816.00m
/dev/sde1 vg1 lvm2 a-- 1020.00m 1020.00m
/dev/sdf1 vg1 lvm2 a-- 1020.00m 1020.00m
'모의해킹 침해대응 과정 > Liunx 관리' 카테고리의 다른 글
리눅스 SWAP / day 10 (0) | 2021.04.12 |
---|---|
리눅스 RAID / day 9 (0) | 2021.04.09 |
리눅스 Mount / day 8 (0) | 2021.04.08 |
리눅스 파일시스템 점검, 모니터링 / day 7 (0) | 2021.04.07 |
리눅스 장치관리 / day 6, 7 (0) | 2021.04.06 |