LVM (Logical Volume Manager)
설명
여러개의 물리 또는 논리 디스크를 합쳐 한 개의 파일시스템으로 사용한다.
사용중인 디스크의 공간이 부족할 떄 여러개의 디스크를 추가로 장착해서 LVM을 통해 부족한 디스크의 공간을 확장함
쉽게 말해서 100G , 200G , 300G 디스크를 하나로 합쳐 논리적으로 600G 디스크로 사용했다는 소리.
명령어
① PV 생성 : pvcreate [파일명]
② VG 생성 : vgcreate [VG 그룹명] [파일명] [파일명]...
③ LV 생성 : lvcreate -l [볼륨크기] -n [LV 그룹명] [VG 그룹명]
LVM 구성준비
fdisk 명령어를 이용해 생성한 파티션의 타입을 LVM(8e)로 변경하면 된다.
http://chloro.tistory.com/97
(링크 참조)
LVM 3가지 구성 단계
1) PV (Physical Volmume)
- LVM을 구성하기 전에 물리적인 단위(볼륨)으로 변환한다.
- pvcreate 파일명
(예. pvcreate /dev/sdb1) -> fdisk로 인해 LVM 타입으로 생성된 파티션만 가능.
2) VG (Volume Group)
- PV로 변환된 볼륨들을 논리적인 단위(볼륨그룹)으로 묶음.
- vgcreate 생성할vg명 파일명 , 파일명...
(예. vgcreate VG /dev/sdb1 /dev/sdc1)
3) LV (Logical Volume)
- 볼륨 그룹에서 원하는 만큼 디스크 공간을 재할당. (파티션과 같은개념)
- 실제 사용하는 볼륨이다.
- lvcreate -L LV용량 -n LV명 VG명
(예. lvcreate -L 1T -n LV VG)
실습
1) LVM 타입 파티션 생성
- 1TB 하드디스크를 두개 생성 후 실습을 진행한다.
- 하드를 2개 생성하면 기존의 하드가 1개였다면 /dev/sdb , /dev/sdc로 생성될 것임.
- /dev/sdb의 파티션 생성과정은 적어놨고 , /dev/sdc도 똑같이 따라하면 된다.
[root@localhost test]# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +400M
Command (m for help): p
Disk /dev/sdb: 1073 MB, 1073741824 bytes
- 생략 -
Device Boot Start End Blocks Id System
/dev/sdb1 1 52 417658+ 83 Linux
400M 용량을 가진 /dev/sdb1 주 파티션이 생성됨.
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 1073 MB, 1073741824 bytes
-생략 -
Device Boot Start End Blocks Id System
/dev/sdb1 1 52 417658+ 8e Linux LVM
/dev/sdb1 리눅스 파티션을 LVM 타입으로 변경함.
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
2) 생성한 파티션을 대상으로 LVM을 진행.
[root@localhost test]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@localhost 바탕화면]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
위에서 생성한 LVM(8e) 타입의 파티션 2개를 각 PV볼륨으로 변환한다.
[root@localhost 바탕화면]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 VG lvm2 a-- 404.00m 404.00m
/dev/sdc1 VG lvm2 a-- 600.00m 600.00m
pvs 명령어로 변환된 PV볼륨 확인.
[root@localhost 바탕화면]# vgcreate VG /dev/sdb1 /dev/sdc1
Volume group "VG" successfully created
PV볼륨으로 변환된 sdb1 , sdc1 장치를 VG라는 이름으로 묶는다.
[root@localhost 바탕화면]# vgs
VG #PV #LV #SN Attr VSize VFree
VG 2 0 0 wz--n- 1004.00m 1004.00m
vgs 명령어로 묶어진 PV볼륨들을 확인.
[root@localhost 바탕화면]# lvcreate -L 1T -n LV VG
Volume group "VG" has insufficient free space (251 extents): 262144 required.
[root@localhost 바탕화면]# lvcreate -L 950m -n LV VG
Rounding up size to full physical extent 952.00 MiB
Logical volume "LV" created
VG 볼륨을 1TB 용량의 LV라는 이름의 LV볼륨으로 생성한다.
-> 용량부족으로 할당이 안됨. (VG 볼륨의 용량이 1TB지만 실제 사용가능한 할당량은 1TB 보다 조금 아래)
VG 볼륨을 950M 용량의 LV 라는 이름의 LV볼륨으로 생성한다.
-> 생성완료.
[root@localhost 바탕화면]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
LV VG -wi-a----- 952.00m
lvs 명령어로 생성된 LV볼륨을 확인.
3) LVM 마운트
[root@localhost 바탕화면]# ls -ld /dev/VG/LV
lrwxrwxrwx. 1 root root 7 2017-11-05 15:38 /dev/VG/LV -> ../dm-0
/dev/VG 경로에 LV라는 이름으로 LV볼륨이 생성됨.
[root@localhost 바탕화면]# mkfs.ext4 /dev/VG/LV
- 생략 -
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
LV 볼륨을 ext4 파일시스템 타입으로 포맷한다.
[root@localhost 바탕화면]# mount /dev/VG/LV /mnt
[root@localhost 바탕화면]# df -T | tail -1
/dev/mapper/VG-LV ext4 959512 17588 893184 2% /mnt
LV 볼륨을 /mnt 디렉터리에 마운트.
df 명령어로 마운트된 LV볼륨을 확인
[root@localhost /]# fsck -y /dev/VG/LV
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/mapper/VG-LV: clean, 11/60928 files, 8231/243712 blocks
LV 볼륨이 정상적인지 fsck 명령어로 확인한다.
clean 이라고 뜨면 파일 시스템이 정상인 것. (마운트시엔 확인하지 못함)
위에 마운트랑 순서가 바뀜. 이것부터 먼저 해야됨.
4) LVM 삭제
[root@localhost /]# umount /mnt
[root@localhost /]# lvscan
ACTIVE '/dev/VG/LV' [952.00 MiB] inherit
/mnt 디렉터리에 마운트 된 장치 해제.
lvscan 명령어로 LV볼륨경로를 확인한다.
[root@localhost /]# lvremove /dev/VG/LV
Do you really want to remove active logical volume LV? [y/n]: y
Logical volume "LV" successfully removed
lvremove 명령어를 이용해 LV 볼륨을 삭제한다.
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
VG 2 0 0 wz--n- 1004.00m 1004.00m
[root@localhost /]# vgremove VG
Volume group "VG" successfully removed
vgs 명령어로 VG볼륨이름 확인 후 vgremove 명령어로 삭제.
[root@localhost /]# pvscan
PV /dev/sdb1 lvm2 [407.87 MiB]
PV /dev/sdc1 lvm2 [603.98 MiB]
Total: 2 [1011.85 MiB] / in use: 0 [0 ] / in no VG: 2 [1011.85 MiB]
[root@localhost /]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped
[root@localhost /]# pvremove /dev/sdc1
Labels on physical volume "/dev/sdc1" successfully wiped
pvscan 명령어로 PV볼륨으로 변환된 장치들을 확인.
pvremove 명령어로 변환 된 장치들을 삭제한다. (장치가 삭제되진 않고 , PV볼륨으로 변환된 정보가 사라짐)