LVM 이야기입니다.
반드시 나오는 RHEL 7의 스토리지 실습 부분이고
생성 , 삭제 , 볼륨 증감 등의 기본적인 운영 커맨드를 숙지해야 합니다.
LVM 의 구조나 상세한 이해를 적는 공간은 아니고, 실전용 실습 용도로 설명합니다.
필수 용어
PV(Physical Volume): LVM 사용을 위해 설정한 최초의 raw 디스크.
(/dev/sdb1, /dev/sdb2 등). fdisk /dev/sdb 파티셔닝 중 반드시 t 커맨드로 8e ID 부여해야 함.
PE(Physical Extents): 블럭(PE) 단위로 제어할 때 사용.
pvcrate에서 옵션으로 -l 을 사용.
VG(Volume Group): PV 를 모아 하나의 논리적 그룹을 형성.
( RAID 로 비유하면 물리디스크를 RAID 0,1 등의 Array 로 묶은 그룹 )
LV(Logical Volume): VG에서 분할. 실제 마운트 포인트로 사용되는 LVM 파티션. 당연한 이야기지만 VG 보다 클 수는 없다.
간단 이해의 흐름 ) PV Drive 들을 모아서 VG 를 생성. VG에서 LV 를 분할.
RAID 과정 생각해도 됩니다. PV가 물리디스크. VG가 Array. LV가 파티션.
LVM 실습
/dev/sdb 8GB 포맷되지 않은 디스크.
1) LV name = LV01
2) VG name = VG01
3) LV size = 50PE ( PE Size = 20MB )
4) LV 형식은 EXT3
5) /mnt/lvm 에 mount하고, 부팅시 자동으로 마운트 되게 하시오.
6) LV 크기를 70PE 로 확장하시오.
7) LV 크기를 60PE 로 줄이시오.
1) LVM 사용할 디스크 확인 하기
= /dev/sdb 미 파티셔닝 상태로 8GB 디스크 입니다.
root@TEST1:~# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 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 Disk label type: dos Disk identifier: 0x0004769e
Device Boot Start End Blocks Id System /dev/sda1 * 2048 616447 307200 83 Linux /dev/sda2 616448 2713599 1048576 82 Linux swap / Solaris /dev/sda3 2713600 16777215 7031808 83 Linux
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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 Disk label type: dos Disk identifier: 0x6682c1f3
Device Boot Start End Blocks Id System
|
2) n 눌러서 8GB 통으로 파티션 만들어 주고 Type 변경
= PV 생성 준비 완료! ( 초급 학습이므로 단일디스크 사용합니다 )
= fdisk 종료하기 전 w 로 싱크하는거 잊지 마시구요.
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/sdb: 8589 MB, 8589934592 bytes, 16777216 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 Disk label type: dos Disk identifier: 0x6682c1f3
Device Boot Start End Blocks Id System /dev/sdb1 2048 16777215 8387584 8e Linux LVM
|
PV 생성 완료!
3) PV 지정
= 단일디스크라 별다른 옵션 줄 게 없습니다. 만듭시다!
= 생성 후 확인은 pvs (간략 ) 와 pvdisplay ( 상세 ) 두 가지 명령어가 있습니다.
vg, lv 도 똑같이 있으니, 활용해주세요.
형식) pvcreate PV이름
root@TEST1:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
root@TEST1:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <8.00g <8.00g
root@TEST1:~# pvdisplay
"/dev/sdb1" is a new physical volume of "<8.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <8.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID H5G2FT-10IQ-VZwq-QZh7-gdnR-LhNN-6VMFgX
이제 LVM 용도로 사용할 디스크 하나가 준비가 완료되었습니다.
4) VG 생성
PV 의 용량만큼 VG를 생성하거나, 여러 PV모아 그룹화할 수도 있습니다.
지금은 PV 를 그대로 VG로 만듭니다.
조건에 VG Name 이 있는데 VG부터는 Name 이 필요합니다.
PE 조건도 있는데 --help 옵션으로 보시면 -s 옵션이 PE(=블럭)크기 지정입니다.
형식) vgcreate 만들VG이름 PV ... 옵션..
[ -s|--physicalextentsize Size[m|UNIT] ]
root@TEST1:~# vgcreate vg01 /dev/sdb1 -s 20M
Volume group "vg01" successfully created
root@TEST1:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 0 0 wz--n- <7.99g <7.99g
root@TEST1:~# vgdisplay
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <7.99 GiB
PE Size 20.00 MiB
Total PE 409
Alloc PE / Size 0 / 0
Free PE / Size 409 / <7.99 GiB
VG UUID BwpXMG-oVag-8zgT-IBZg-Ctw2-3mR7-CvdDrp
5) LV 생성
이제 VG 에서 LV 만 파티션화해서 Mount 하면 실제 LVM 파티션 사용하는 겁니다.
만들 LV 용량을 지정해야 하는데 블럭단위니까 PE*수량 만큼 -l 옵션으로 지정해도 되고, 대문자 -L 10G 같은 식으로 직접 용량을 지정할 수도 있습니다.
위에도 적었지만 LV의 용량은 VG 를 넘어설 수 없습니다.
형식) lvcreate -L|--size Size[m|UNIT] VG ( -l 소문자일 경우 PE 수량 )
LV Name 이 조건에 있기 때문에 -n 만들LV이름 을 부가옵션으로 줍시다.
root@TEST1:~# lvcreate -l 50 vg01 -n lv01 PE 50개만큼의 용량
Logical volume "lv01" created.
root@TEST1:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 1000.00m PE가 20MB 이므로 * 50 = 1000M
root@TEST1:~# lvdisplay
--- Logical volume ---
LV Path /dev/vg01/lv01 중요. 실제 Mount Point.
LV Name lv01
VG Name vg01
LV UUID TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm
LV Write Access read/write
LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900
LV Status available
# open 0
LV Size 1000.00 MiB
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
6) 마운트
LV Path 를 마운트해야 합니다 fdisk 로 보이는 mapper 는 마운트가 안됩니다 ;;
lvdisplay 는 아무리봐도 안질리니까 꼭 100번 보세요.
문제 조건에 /mnt/lvm 에 마운트하라고 했으니 디렉토리를 만들어 줍니다.
마운트 전에 조건에 있는 EXT3 형식으로 포맷해줘야 마운트 됩니다.
root@TEST1:~# lvdisplay
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm
LV Write Access read/write
LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900
LV Status available
# open 0
LV Size 1000.00 MiB
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
root@TEST1:~# mkdir -p /mnt/lvm
root@TEST1:~# mkfs.ext3 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
64000 inodes, 256000 blocks
12800 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=264241152
8 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
root@TEST1:~# mount /dev/vg01/lv01 /mnt/lvm
root@TEST1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.7G 4.3G 2.4G 65% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 7.1M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/sda1 297M 146M 152M 49% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/vg01-lv01 969M 1.3M 918M 1% /mnt/lvm
마운트가 완료 되었습니다.
7) 부팅시 자동 마운트
LV_PATH 로 /etc/fstab 에 추가. ( 틀리면 부팅안되니까 꼭 재부팅해서 확인해보세요 )
root@TEST1:~# vi /etc/fstab
/dev/vg01/lv01 /mnt/lvm ext3 defaults 0 0
~
8) 용량을 70PE 로 확장
lvextend 라는 명령어가 있습니다. create 때랑 똑같아요.
-l PE 수 만큼 입력해주면 됩니다
df 쳐보면 실시간 반영은 안되므로 파일시스템의 리사이징 명령을 내려줘야 합니다.
( EX : xfs 인 경우 xfs_grown LV_PATH 치면 즉시 반영. ext 시스템은 resize2fs LV_PATH )
root@TEST1:~# lvextend -l 70 /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 1000.00 MiB (50 extents) to <1.37 GiB (70 extents).
Logical volume vg01/lv01 successfully resized.
root@TEST1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.7G 4.3G 2.4G 65% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 7.1M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/sda1 297M 146M 152M 49% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/vg01-lv01 969M 1.3M 918M 1% /mnt/lvm
용량이 1기가에서 그대로 안늘어나있음
root@TEST1:~# resize2fs /dev/vg01/lv01 // 파일시스템에서 리사이징 체크
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /mnt/lvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 358400 blocks long.
root@TEST1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.7G 4.3G 2.4G 65% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 7.1M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/sda1 297M 146M 152M 49% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/vg01-lv01 1.4G 1.5M 1.3G 1% /mnt/lvm
정상적으로 늘어난 것 확인.
9) 용량을 60PE 로 감소
TIP) XFS 파일시스템으로 되어있는 LV는 용량 축소가 안됩니다....
lvextend 다음에는 lvreduce 라는 명령이 있습니다. 줄여줍시다..
reduce 는 주의해야 할 점이 많습니다
1) 반드시 먼저 파일시스템에서 먼저 리사이징으로 줄여줍니다.
lv부터 줄이면 데이터 날아갑니다.
( /etc/lvm/backup 이용한 복원이 가능하지만 RHCSA 의 영역이 아님 )
2) lvreduce 사용 전 반드시 umount 해야 합니다.
3) lvreduce 옵션에 -r ( resize ) 옵션을 꼭 주세요. 안주면 무조건 DATA Loss물어봄.
4) 용량 감소는 가급적 PE 보다 실용량 ( -L ) 으로 하는게 좋습니다.
ex)
umount /dev/vg01/lv01 또는 /mnt/lvm
resize2fs -f /dev/vg01/lv01 1000M 파일 시스템 사이즈를 1000M 으로 변경
lvreduce -r -L -500M /dev/vg01/lv01 LVM 에서 실제로 변경. ( 1500 --> 1000 )
root@TEST1:~# lvreduce -r -l 60 /dev/vg01/lv01
WARNING: Reducing active and open logical volume to 1.17 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]:
umount 안하면 저런 DATA DESTROY 라는 무시무시한 상황이 발생!!
다만 시험에선 데이터 필요없으니까 그냥 해도 됩니다. ㅎ