1. LVM
일반적인 논리 기술(Logical Volume Technology)
- LVM(Logical Volume Manage)
- RAID(Redudant Array Inexpensive Disk)
- 일반적인 논리 볼륨 방식 장점: 확장성, 안정성, 편의선(관리에 용이)
C:\, D:\가 총 1TB일때 100GB만 C:\ 나머지 D;\로 나눔.
사용하다가 C는 거의 다 사용하고 D는 많이 남았을때 D의 남은 용량을 C에 나눠서 유연하게 줄 수 있음.
LVM 논리 볼륨 장점
- 유연한 용량, 크기조정 가능한 스토리지 풀, 온라인 데이터 재배치
- 편의에 따라 장치 이름 지정, 디스크 스트라이핑, 미러 볼륨, 볼륨 스냅샷

Volume Group에서 Logical Volume으로 나눌때 리니어, 스트라이프, 미러 방식이 있음.
LVM 구성요소(5장 4p 참고)
- PV (Physical Volume) - PE(Physical Extend)
- VG(Volume Group)
- LV(Logical Volume) - LE(Logical Extend)
PV를 나눈 각각을 PE, PV가 나뉠때 LV도 같이 나뉘고 LV를 나눈 각각을 LE라함. PE와 LE는 1:1매핑 // 리니어 방식
2개 디스크를 하나로 펼친것 처럼. 성능을 위해. PE,LE 1:1매핑// 스트라이프
하나로 들어갈때 둘다 들어감. 용량이 2배 필요. 한 데이터를 잃어도 다른 디스크에 저장되어있음. 성능보단 안전성.PE,LE 2:1매핑//미러

LVM 작업 절차
- partition id 변경 : fdisk
- PV 생성(pvcreate CMD)
- VG 생성(vgcreate CMD)
- LV 생성(lvcreate CMD)
- F/S 생성(mkfs CMD)
- 마운트(mount CMD, /etc/fstab)
PV 관리
#pvcreate /dev/sdc1 //생성
#pvremove /dev/sdc1 //삭제
#pvs //간단하게 확인
#pvdisplay /dev/sdc1 // 자세하게 확인.
VG 관리
■ VG 생성
#vgcreate vg1 /dev/sdc1 /dev/sdd1 /dev/sde1
#vgcreate vg1 /dev/sd[cde]1
#vgcreate vg1 /dev/sd[cde]1 -s 16M / PE Size : 16MB /
■ VG 삭제
#vgremove vg1
#vgremove /dev/vg1
■ VG에 디스크 추가/제거
#vgextend vg1 /dev/sdf1
#vgreduce vg1 /dev/sdf1
■ VG 이름 변경
#vgrename /dev/vg1 /dev/vg1_backup
#vgrename vg1 vg1_backup
■ VG 정보 확인
#vgs (# vgs -v)

#vgdisplay (# vgdisplay vg1)
#vgscan
LV 관리
방식: Linear, Stripe, Mirror
■ LV 생성
#lvcreate -L 10G vg1 / LV 이름 자동 생성 : lvol#(용량 10G) /
#lvcreate -L 1500M -n lv1 vg1
#lvcreate -L 1500 -n lv1 vg1 / 용량 단위가 없으면 MB /
■ LV 삭제
#lvremove /dev/vg1/lv1
■ LV 이름 변경
#lvrename /dev/vg1/lv1 /dev/vg1/lv2
#lvrename vg1 lv1 lv2 / vg1(lv1 -> lv2) /
■ LV 공간 늘리기/줄이기
#lvextend -L 12G /dev/vg1/lv1 / lv1 용량을 12G로 맞춤 /
#lvextend -L +1G /dev/vg1/lv1 / lv1 용량을 1G 만큼 추가 /
#lvreduce -L 3G /dev/vg1/lv1
#lvreduce -L -3G /dev/vg1/lv1
*크기를 줄일땐 백업하거나 스냅샷을 뜨고 줄인후 이상있을시 복구
■ LV 정보 확인
#lvs

#lvdisplay (# lvdisplay /dev/vg1/lv1)
F/S(file system) 관리
- mkfs -t ext4 /dev/vg1/lv2
마운트 관리
#mkdir -p /lv1 /lv2
#mount /dev/vg1/lv1 /lv1
#mount /dev/vg1/lv2 /lv2
vi /etc/fstab ->
/dev/mapper/vg1-lv1 /lv1 ext4 defaults 0 2
/dev/vg1/lv2 /lv2 ext4 defaults 0 2
:wq
![업로드중..]()
- lvm체계를 사용하면 디스크 용량을 늘릴 수 있음.
LVM 시나리오 작업
-- help: 명령어 도움말
man: 메뉴얼 페이지
-v ~ -vvvv: 자세히.
- 파일시스템(EX: /lv2) 용량을 늘리는 경우
[참고] 파일시스템 용량 늘리기/줄이기
-(ext4) (0)늘리기, (0)줄이기 가능
-(xfs ) (0)늘리기, (X)줄이기 불가능
// lv2 파일시스템이 용량이 부족하여 파일시스템 용량을 늘리기
// lv2((500M) + 1G = 1.5G)
[실습]
#lvs
#df -h /lv1 /lv2
#dd if=/dev/zero of=/lv2/file1 bs=1M count=400
#df -h /lv2
#vgs
#lvextend -l +100%FREE /dev/vg1/lv2
#lvs
#df -h /lv2
#resize2fs /dev/vg1/lv2 // 파일시스템 사이즈 재설정.
#df -h /lv2
파일시스템 만들면 상단에 슈퍼블락이 생성되고 밑에 데이터
lv용량과 파일시스템의 용량은 별개 그래서 따로 작업을 해줘야함.
umount하지않아도 됌. 물리적으론 떨어져있지만 논리적으로 붙어있음.
- VG(EX: vg1)에 PV(EX: sdf1)를 추가하는 경우
LV1(/dev/vg1/lv1(1.5G + ?)) 용량을 늘리고 싶다.
VG(/dev/vg1)에는 남는 공간이 없다.
VG(/dev/vg1)에 PV(/dev/sdf1) 추가하고 LV(/dev/vg1/lv1)에 용량 늘리기
== vg1(sdc1, sdd1, sde1) + sdf1
#df -h /lv1
#dd if=/dev/zero of=/lv1/file2 bs=1M count=500 <- 2번 실행
#df -h /lv1
#vgs
#pvs
#vgextend vg1 /dev/sdf1
#pvs
#vgs
#lvextend -l +100%FREE /dev/vg1/lv1
#resize2fs /dev/vg1/lv1
#df -h /lv1
- LV 용량 감소(Filesystem Shrinking)
[주의] ext4만 용량 감소가 가능하다.
(가정) VG에 증설할 PV는 존재하지 않는다.
/lv1 용량은 남은 상태이고, /lv2는 용량이 부족한 상태이다.
따라서, /lv1 용량을 감소 시키고(2.5G - ?), /lv2 용량을 늘린다(1.5G + ?).
== /lv1 - 용량 감소(2.5G - 500M)
== /lv2 - 용량 증설(1.5G + 500M)
#cp /etc/passwd /lv1/file10
#cp /etc/passwd /lv2/file11
#df -h /lv1 /lv2
[참고] 안전하게 데이터를 백업 받는다.
#mkdir -p /backup
#cd /lv1
#tar cvzf /backup/lv1.tar.gz .
#cd; umount /lv1
#fsck.ext4 -f /dev/vg1/lv1
#resize2fs -p /dev/vg1/lv1 2G // 만얅 2.5G일땐 2500M로 하자.
[참고] fsck 명령어를 수행하지 않은 상태에서 resize2fs 명령어 수행한 경우
#resize2fs -p /dev/vg1/lv1 2G
resize2fs 1.39 (29-May-2006)
Please run 'e2fsck -f /dev/vg1/lv1' first.
#e2fsck -f /dev/vg1/lv1
#resize2fs -p /dev/vg1/lv1 2G
#lvreduce -L 2G /dev/vg1/lv1
#lvs
#mount /lv1 <- 이상 발생했다면 아까 백업한것 파일로 복구하자.
#df -h /lv1
#cat /lv1/file10 | head // 이상없는지 확인
- VG 안의 PV를 새로운 PV로 교체
*** VG 안에 PV를 새로운 PV로 교체하는 이유
■ 성능이 좋은 디스크로 교체하는 경우(10000 rpm -> 15000 rpm)
■ 용량이 큰 디스크로 교체하는 경우(128G SCSI -> 500G SAS)
■ 작업 계획
(전제조건) 새로운 디스크 (/dev/sdg(1G), /dev/sdh(1G))가 추가되어 있고, 하나의 파티션(/dev/sdg1, /devv/sdh1)으로 설정 되어있어야함.)
새로 추가한 디스크/파티션(ex: /dev/sdg1)을 PV 선언하고, VG(ex:vg1)에 포함시킨다.
교체할 디스크 (ex: /dev/sdf1)의 내용을 pvmove를 통해 새로 추가된 디스크(ex: /dev/sdg1)로 데이터를 이동시킨다.
교체할 디스크의 내용은 전혀 사용되지 않는 상태가 되므로, VG에서 제거한다.
#fdisk /dev/sdg
#pvcreate /dev/sdg1
#vgentend vg1 /dev/sdg1
#pvmove /dev/sdf1 /def/sdg1
#vgreduce /dev/sdf1
- LV - Striping 구성
striping 특성: 성능(r/w)↑, 안정성 ↓, 디스크 사용 효율: -
-i : number of stripes
-I : stripe size(KB) [default: 64KB]
-> 2개의 PV에 걸쳐 sripte 크기는 64KB 크기로 vg1에 lv1 구성.
(Stripe LV) lvcreate -L 10G -n lv1 -i 3 vg1
(Stripe LV) lvcreate vg1 -n lv1 -L 10G -i 3
- LV Mirroring 구성
mirror 특성: 성능 read ↑, write ↓, 안정성 ↑, 디스크 사용효율 ↓
(Mirror LV) lvcreate -L 10G -n lv1 -m 1 vg1
(Mirror LV) lvcreate vg1 -n lv1 -L 10G -m 1
(Nomal LV) lvcreate -L 10G -n lv1 vg1
(Nomal LV) lvcreate vg1 -n lv1 -L 10G
(Stripe LV) lvcreate -L 10G -n lv1 -i 3 vg1 // -i 3 : 3개의 디스크에 걸쳐 스프라이트
(Stripe LV) lvcreate vg1 -n lv1 -L 10G -i 3
(Mirror LV) lvcreate -L 10G -n lv1 -m 1 vg1 // -m 1: 원본에 대한 하나의 복사본 생성
(Mirror LV) lvcreate vg1 -n lv1 -L 10G -m 1
만약 '-m 2'라면 원본에 대한 두개의 복사본 생성.
10GB디스크 3개로 총 30GB공간이 있을 때 -m 2 옵션을 주면 10GB 복사본 2개 생김
사용 공간은 그대로 10GB
5장 40p 실습 안고 혼자해보기......