LVM(Logical Volume Manager)
- 저장소를 유연하게 관리하기 위한 형식
- 개별디스크의 파티션 레이아웃 등을 직접 관리하지 않고 LVM을 통해 관리
- 확장 등이 용이함
- RAID등의 추가기능을 제공함
LVM의 주요 구성요소
- PV(Physical Volume) : LVM을 구성하기 위한 가장 낮은수준의 구성요소, 물리장치, 디스크 자체, 디스크 내 파티션(/dev/sdb→/dev/sdb1)
- VG(Volume Group) : PV의 모음, 이름을 지정하여 생성, 이름으로 접근
- LV(Logical Volume) : VG에서 생성, LVM의 최종결과물, 내부에 파일시스템 생성하여 사용
LVM 구성순서
- 디스크 추가
- 디스크 인식
- 파티션 생성
- 물리볼륨 생성
- 볼륨그룹 생성
- 논리볼륨 생성 → 볼륨(파티션) 생성
- 파일시스템 생성
- 마운트
실습
5개의 10GB SCSI 디스크 VM에 추가
디스크 인식
각 디스크를 fdisk 사용하여 MBR 파티션 - 전체를 하나의 파티션
- 디스크 인식 - # echo '- - -' > /sys/class/scsi_host/host0/scan
- 각 디스크 별 파티션 초기화
> #parted -s /dev/sdb mklabel msdos
>
>
> #parted -s /dev/sdc mklabel msdos
>
> #parted -s /dev/sdd mklabel msdos
>
> #parted -s /dev/sde mklabel msdos
>
> #parted -s /dev/sdf mklabel msdos
>
- 각 디스크 별 전체 용량 사용하는 파티션 생성 (Shell의 for문 사용)
- #for i in {b..f}; do parted -s /dev/sd$i mkpart primary 0% 100%; done
- 생성된 파티션 확인 - #lsblk
- PV생성 - #pvcreate <장치명1> <장치명2> ...
- VG생성 - #vgcreate <볼륨그룹 이름> <PV장치이름1> <PV장치이름2> ...
- LV생성 - lvcreate -n <LV이름> -L <용량> <볼륨그룹 이름>
- LV는 파티션과 같은 장치이므로 내부에 파일시스템 생성
- #mkfs.xfs /dev/<볼륨그룹이름>/<논리볼륨이름>
- lvcreate 옵션
- n : 논리볼륨의 이름 지정
- L : 크기 지정 옵션(용향)
- l : 크기 지정옵션(PE갯수)
- PE (Physical Extent) - 물리볼륨을 구성할 경우, 물리볼륨 내부의 할당단위, VG 생성시 크기지정 vgcreate <볼륨그룹이름> <장치이름> -s <PE크기>
- LE (Logical Extent)
- 논리볼륨에서 사용하는 할당단위
- PE와 같은 단위
논리볼륨 구성상태 확인
- 물리볼륨 상태확인 - pvdisplay [장치명]
- 볼륨그룹 상태확인 - vgdisplay [볼륨그룹 이름]
- 논리볼륨 상태확인 - lvdisplay [논리볼륨 장치명]
- 요약정보 표시
- 물리볼륨 : pvs
- 볼륨그룹 : vgs
- 논리볼륨 : lvs
LVM(Logical Volume Manager)
- 저장소를 유연하게 관리하기 위한 형식
- 개별디스크의 파티션 레이아웃 등을 직접 관리하지 않고 LVM을 통해 관리
- 확장 등이 용이함
- RAID등의 추가기능을 제공함
LVM의 주요 구성요소
- PV(Physical Volume) : LVM을 구성하기 위한 가장 낮은수준의 구성요소, 물리장치, 디스크 자체, 디스크 내 파티션(/dev/sdb→/dev/sdb1)
- VG(Volume Group) : PV의 모음, 이름을 지정하여 생성, 이름으로 접근
- LV(Logical Volume) : VG에서 생성, LVM의 최종결과물, 내부에 파일시스템 생성하여 사용
LVM 구성순서
- 디스크 추가
- 디스크 인식
- 파티션 생성
- 물리볼륨 생성
- 볼륨그룹 생성
- 논리볼륨 생성 → 볼륨(파티션) 생성
- 파일시스템 생성
- 마운트
실습
5개의 10GB SCSI 디스크 VM에 추가
디스크 인식
각 디스크를 fdisk 사용하여 MBR 파티션 - 전체를 하나의 파티션
- 디스크 인식 - # echo '- - -' > /sys/class/scsi_host/host0/scan
- 각 디스크 별 파티션 초기화
> #parted -s /dev/sdb mklabel msdos
>
>
> #parted -s /dev/sdc mklabel msdos
>
> #parted -s /dev/sdd mklabel msdos
>
> #parted -s /dev/sde mklabel msdos
>
> #parted -s /dev/sdf mklabel msdos
>
- 각 디스크 별 전체 용량 사용하는 파티션 생성 (Shell의 for문 사용)
- #for i in {b..f}; do parted -s /dev/sd$i mkpart primary 0% 100%; done
- 생성된 파티션 확인 - #lsblk
- PV생성 - #pvcreate <장치명1> <장치명2> ...
- VG생성 - #vgcreate <볼륨그룹 이름> <PV장치이름1> <PV장치이름2> ...
- LV생성 - lvcreate -n <LV이름> -L <용량> <볼륨그룹 이름>
- LV는 파티션과 같은 장치이므로 내부에 파일시스템 생성
- #mkfs.xfs /dev/<볼륨그룹이름>/<논리볼륨이름>
- lvcreate 옵션
- n : 논리볼륨의 이름 지정
- L : 크기 지정 옵션(용향)
- l : 크기 지정옵션(PE갯수)
- PE (Physical Extent) - 물리볼륨을 구성할 경우, 물리볼륨 내부의 할당단위, VG 생성시 크기지정 vgcreate <볼륨그룹이름> <장치이름> -s <PE크기>
- LE (Logical Extent)
- 논리볼륨에서 사용하는 할당단위
- PE와 같은 단위
논리볼륨 구성상태 확인
- 물리볼륨 상태확인 - pvdisplay [장치명]
- 볼륨그룹 상태확인 - vgdisplay [볼륨그룹 이름]
- 논리볼륨 상태확인 - lvdisplay [논리볼륨 장치명]
- 요약정보 표시
- 물리볼륨 : pvs
- 볼륨그룹 : vgs
- 논리볼륨 : lvs
LVM(Logical Volume Manager)
- 저장소를 유연하게 관리하기 위한 형식
- 개별디스크의 파티션 레이아웃 등을 직접 관리하지 않고 LVM을 통해 관리
- 확장 등이 용이함
- RAID등의 추가기능을 제공함
LVM의 주요 구성요소
- PV(Physical Volume) : LVM을 구성하기 위한 가장 낮은수준의 구성요소, 물리장치, 디스크 자체, 디스크 내 파티션(/dev/sdb→/dev/sdb1)
- VG(Volume Group) : PV의 모음, 이름을 지정하여 생성, 이름으로 접근
- LV(Logical Volume) : VG에서 생성, LVM의 최종결과물, 내부에 파일시스템 생성하여 사용
LVM 구성순서
- 디스크 추가
- 디스크 인식
- 파티션 생성
- 물리볼륨 생성
- 볼륨그룹 생성
- 논리볼륨 생성 → 볼륨(파티션) 생성
- 파일시스템 생성
- 마운트
실습
5개의 10GB SCSI 디스크 VM에 추가
디스크 인식
각 디스크를 fdisk 사용하여 MBR 파티션 - 전체를 하나의 파티션
- 디스크 인식 - # echo '- - -' > /sys/class/scsi_host/host0/scan
- 각 디스크 별 파티션 초기화
> #parted -s /dev/sdb mklabel msdos
>
>
> #parted -s /dev/sdc mklabel msdos
>
> #parted -s /dev/sdd mklabel msdos
>
> #parted -s /dev/sde mklabel msdos
>
> #parted -s /dev/sdf mklabel msdos
>
- 각 디스크 별 전체 용량 사용하는 파티션 생성 (Shell의 for문 사용)
- #for i in {b..f}; do parted -s /dev/sd$i mkpart primary 0% 100%; done
- 생성된 파티션 확인 - #lsblk
- PV생성 - #pvcreate <장치명1> <장치명2> ...
- VG생성 - #vgcreate <볼륨그룹 이름> <PV장치이름1> <PV장치이름2> ...
- LV생성 - lvcreate -n <LV이름> -L <용량> <볼륨그룹 이름>
- LV는 파티션과 같은 장치이므로 내부에 파일시스템 생성
- #mkfs.xfs /dev/<볼륨그룹이름>/<논리볼륨이름>
- lvcreate 옵션
- n : 논리볼륨의 이름 지정
- L : 크기 지정 옵션(용향)
- l : 크기 지정옵션(PE갯수)
- PE (Physical Extent) - 물리볼륨을 구성할 경우, 물리볼륨 내부의 할당단위, VG 생성시 크기지정 vgcreate <볼륨그룹이름> <장치이름> -s <PE크기>
- LE (Logical Extent)
- 논리볼륨에서 사용하는 할당단위
- PE와 같은 단위
논리볼륨 구성상태 확인
- 물리볼륨 상태확인 - pvdisplay [장치명]
- 볼륨그룹 상태확인 - vgdisplay [볼륨그룹 이름]
- 논리볼륨 상태확인 - lvdisplay [논리볼륨 장치명]
- 요약정보 표시
- 물리볼륨 : pvs
- 볼륨그룹 : vgs
- 논리볼륨 : lvs
논리볼륨 제거
논리볼륨 관리
- 논리볼륨 내 개체들에 대한 확장/축소
- 볼륨그룹 축소/확장 - 볼륨그룹은 물리볼륨의 집합
- 축소 : 볼륨그룹에서 물리볼륨을 제거 - vgreduce <볼륨그룹 이름> <분리할 장치의 이름>
- 축소시 해당 볼륨그룹 내 분리할 장치의 데이터를 옮길말한 여유공간이 있어야함
- 분리할 PV의 데이터를 옮기는 명령 - pvmove <분리할 장치명>
- 확장 : 볼륨그룹에서 물리볼륨을 추가 - vgextend <볼륨그룹 이름> <추가할 장치의 이름>
- 논리볼륨 확장 - 추가용량이 필요할 때
- lvextend -L <늘릴 최종용량> <LV장치이름>
- lvextend -L +<늘릴용량> <LV장치이름>
- 현재 데이터를 유지하며 피일시스템의 크기를 함께 증가시켜야 함
- xfs : xfs_growfs <마운트된 위치>
- ext4 : resize2fs <장치이름>
- 옵션으로 즉시 파일시스템 용량 증가
- r : 용량증가 후 즉시 파일시스템 리사이즈 수행
- 축소 - 가능하기는 하나 권장하지 않음(데이터를 보장하지 않음)
RAID
Redundant Array of Inexpensive Disks, Redundant Array of Independent Disks
- 디스크를 연결하여 사용하는 기술
- 기능 향상을 목표로 사용하는 기술
- 용량
- 성능 : 읽기/쓰기
- 안정성 : 데이터의 보호
Standard RAID Levels(0~6)
RAID 0
- Stripe
- 용량, 성능을 중시
- 데이터를 연결된 디스크에 나누어 저장
- 여러 디스크에 나누어 저장하므로 디스크가 n개일 경우 용량은 n배
- 쓰기 성능 : n배
- 읽기 성능 : n배
- 안정성의 문제 : 하나의 디스크라도 손상될 경우 전체 RAID가 손상됨
RAID 1
- Mirror
- 안정성을 최우선
- 데이터를 연결된 디스크에 동일하게 저장
- 동일한 데이터를 모두 같이 저장하므로 디스크가 n개 이더라도 용량은 1배
- 쓰기 성능 : 쓰기성능 변화없음
- 읽기 성능 : 읽기 성능은 변화 없음(구성에 따라 성능 향상이 가능하기도 함, Stripe 처럼 동작하도록)
- 안정성 : n-1까지 손상되더라도 정상 동작 가능/ 데이터 유지
RAID 2,3,4
- RAID 2 : 기본적인 Parity 사용의 컨셉이 적용
- RAID 3 : 전체 데이터의 패리티를 1개의 디스크에 저장, 바이트 단위의 Stripe 및 Parity 계산
- RAID 4 : 전체 데이터의 패리티를 1개의 디스크에 저장, 블록단위의 Stripe 및 패리티 계산
- 용량, 성능 안정성 등을 종합적으로 고려
RAID5
- 분산 Parity
- 용량, 성능 , 안정성을 종합적으로 고려
- 기본적으로 Stripe를 기반으로 동작
- 디스크1개 용량을 패리티 저장용도로 사용
- Parity는 각 디스크에 분산되어 저장
- 용량 : n개의 디스크 연결시 n-1배 용량 사용가능
- 성능 : 읽기/쓰기 성능이 n-1배 향상, parity 계산시 자원 소모
- 안정성 : 1개까지 손상에서 대비할 수 있음(FT, Falut Tolerance : 내결함성)
- RAID 5는 최소 3개 이상의 디스크가 있어야 사용가능
RAID6
- 분산 이중 Parity
- 용량 성능 안정성 등을 졸합적으로 고려
- RAID5보다 안정성을 강화 : 내결함성 디스크 2개 손상까지
- 용량 성능 등은 디스크 1개만큼 더 손해
- 최소 디스크 4개 이상 있어야 사용 가능
- *리눅스 시스템의 디스크를 native RAID 구성 : mdadm
LVM을 사용한 RAID 구성
- LVM에서 사용할 수 있는 RAID방식 : 0,1 5, 6, 10(1+0)
- RAID 10(1+0) : 중첩 RAID 방식(Neted RAID)
- 일반적인 RAID 구성 시 직접 파티션 수겅을 통해 동일한 크기의 RAID 재료 디스크를 구성하여야 하나, LVM은 각 PV당 RAID를 구성하기 위한 동일한 크기만 할당할 수 있으면 구성가능
LVM을 사용한 RAID 구성 실습
- 기존 사용중인 디스크 전부 마운트 해제/ 파티션 제거
- 각 디스크 전체를 1번 파티션으로 생성 후 PV생성
- 볼륨그룹 vg_raid 생성
-
RAID 0 LV생성
lvcreate -n raid0_lv -L 1G -i 3 -I 64K vg_raid
- RAID 0 생성시 스트라이프 개수를 지정하여야 함
- 각 PV에서 동일한 개수의 PE를 가지고와야 하므로, 생성하고자 하는 크기보다 더 크게 만들어질 수 있음 (총 PE의 개수가 Stripe 개수로 나누어 떨어지도록 조정)
-
RAID 1 LV생성
lvcreate -n raid1_lv -L 1G -m 2 vg_raid
- RAID 1 생성 시 Mirror 갯수를 지정하여야 함
-
RAID 5 LV생성
lvcreate -n raid5_lv -L 1G -i 3 -I 64K --type raid5 vg_raid
- RAID 5 생성 시 Stripe 갯수 및 RAID 타입을 지정하여야 함
- RAID 0 과 같이 동일한 갯수의 PE를 각 PV로부터 가져올 수 있도록 생성되는 LV의 크기가 조정됨(Stripe 갯수로 나누어 떨어지도록)
-
RAID 6 LV생성
lvcreate -n raid6_lv -L 1G -i 3 -I 64K --type raid6 vg_raid
- RAID 6 생성 시 Stripe 갯수 및 RAID 타입을 지정하여야 함
- RAID 0 과 같이 동일한 갯수의 PE를 각 PV로부터 가져올 수 있도록 생성되는 LV의 크기가 조정됨(Stripe 갯수로 나누어 떨어지도록)
-
RAID 10 LV생성
lvcreate -n raid10_lv -L 1G -i 2 -I 64KB -m 1 --type raid10 vg_raid
- Stripe의 갯수, Mirror의 갯수를 함께 지정, RAID10타입도 지정