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 <장치명> [장치명]...
VG 생성
# vgcreate <볼륨그룹이름> <PV장치 이름> [PV장치 이름]...
LV 생성
# lvcreate -n <LV 이름> -L <용량> <볼륨 그룹 이름>
⁕ 참고 lvcreate 옵션
- -n : 논리 볼륨의 이름 지정
- -L : 크기 지정 옵션 (용량)
- -l : 크기 지정 옵션 (PE개수)
LV는 파티션과 같은 장치이므로 내부에 파일 시스템 생성
# mkfs -t xfs /dev/<볼륨 그룹 이름>/<논리 볼륨 이름>
===========================================
논리 볼륨 제거
- 생성의 역순으로 진행
- LV를 사용 중이지 않아야 제거 가능
- LV가 없어야 VG를 제거할 수 있음
- VG에 포함되어 있지 않은 PV는 PV를 제거할 수 있음
LV 마운트 해제
- umount
LV 제거
- lvremove <삭제할 장치 파일명>
VG 제거
- vgremove <삭제할 볼륨 그룹명>
PV 제거
- pvremove <삭제할 물리 볼륨 장치명>
===========================================
PE (Physical Extent)
- 볼륨 그룹을 구성할 경우, 물리 볼륨 내부의 할당 단위
- VG 생성 시 크기 지정
- -s : VG 생성시 PE 크기 지정
LE (Logical Extent)
- 논리 볼륨에서 사용하는 할당 단위
- = PE와 같은 크기 사용
볼륨 그룹 생성 시 PE 크기 지정
- vgcreate <볼륨 그룹 이름> <장치 이름> -s <PE크기>
=========================================
논리 볼륨 구성상태 확인
물리 볼륨 상태 확인
# pvdisplay
# pvdisplay [장치명]
볼륨 그룹 상태 확인
# vgdisplay
# vgdisplay [볼륨 그룹 이름]
논리 볼륨 상태 확인
# lvdisplay
# lvdisplay [논리 볼륨 장치명]
요약정보표시
- 물리 볼륨 : pvs
- 볼륨 그룹 : vgs
- 논리 볼륨 : lvs
=======================================================
논리볼륨 관리
- 논리 볼륨 내 개체들에 대한 확장/축소
볼륨 그룹 축소/확장
- 축소
- 볼륨 그룹은 물리 볼륨의 집합
- 축소 : 볼륨 그룹에서 물리 볼륨을 제거
- vgreduce <볼륨 그룹 이름> <분리할 PV의 이름>
- 축소 시 해당 볼륨 그룹 내 분리할 장치의 데이터를 옮길만한 여유공간이 있어야 함
- 분리할 PV의 데이터를 옮기는 명령
- pvmove <분리할 PV명>
- 확장
- 볼륨 그룹에서 물리 볼륨을 추가
- vgextend <볼륨 그룹 이름> <추가할 장치의 이름>
논리 볼륨 확장
- 확장
- 추가 용량이 필요할 때
- lvextend -L <늘릴 최종 용량> <LV 장치 이름>
- lvextend -L +<늘릴 용량> <LV 장치 이름>
- 현재 데이터를 유지하며 파일 시스템의 크기를 함께 증가시켜야 함
- xfs : xfs_growfs <마운트 된 위치>
- ext4 : resize2 fs <장치 이름>
- 옵션으로 즉시 파일 시스템 용량 증가
- -r : 용량 증가 후 즉시 파일시스템 리사이즈 수행
- 축소
- 가능하기는 하나 권장하지 않음 (데이터를 보장하지 않음)
===========================================================
RAID
- Redundant Array of Inexpensive Disks
- Redundant Array of Independent Disks
- 디스크를 연결하여 사용하는 기술
- 기능 향상을 목표로 사용하는 기술
- 용량
- 성능 : 읽기/쓰기
- 안정성 : 데이터의 보호 / 서비스 지속
- RAID에서 연결하는 장치는 반드시 동일한 크기를 사용
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 및 패리티 계산
- RAID 4 : 전체 데이터의 패리티를 1개의 디스크에 저장. 블록 단위의 Stripe 및 패리티 계산
- 용량, 성능, 안정성 등을 종합적으로 고려
RAID 5
- 분산 Parity
- 용량, 성능, 안정성 등을 종합적으로 고려
- 기본적으로 Stripe를 기반으로 동작
- 디스크 1개 용량을 패리티 저장 용도로 사용
- 패리티는 각 디스크에 분산되어 저장
- 용량 : n개 디스크 연결 시 n-1배 용량 사용 가능
- 성능 : 읽기/쓰기 성능이 n-1배 향상. 패리티 계산 시 자원 소모
- 안정성 : 1개까지 손상에서 대비할 수 있음 (FT, Fault Tolerance, 내결함성)
- RAID 5는 최소 3개 이상의 디스크가 있어야 사용 가능
RAID 6
- 분산 이중 Parity
- 용량, 성능, 안정성 등을 종합적으로 고려
- RAID 5보다 안정성을 강화 - 내결함성 : 디스크 2개
- 용량, 성능 등은 1개만큼 더 손해
- 최소 디스크 4개 이상 있어야 사용가능
===============================================
리눅스 시스템의 디스크를 native RAID 구성 : mdadm
===============================================
LVM을 사용한 RAID 구성
- LVM에서 사용할 수 있는 RAID 방식 : 0, 1, 5, 6, 10(1+0)
- RAID 10(1+0): 중첩 RAID 방식 (Nested RAID)
- 1+0, 5+0, 1+0+0
- 일반적인 RAID 구성시 직접 파티션 구성을 통해 동일한 크기의 RAID 재료 디스크를 구성하여야 하나, LVM은 각 PV당 RAID를 구성하기 위한 동일한 크기만 할당할 수 있으면 구성 가능
===============================================
LVM을 사용한 RAID 구성 실습
- 기존 사용 중인 디스크 전부 마운트 해제 / 파티션 제거
- 각 디스크 전체를 1번 파티션으로 생성 후 PV 생성
RAID 0 LV 생성
- RAID 0 생성 시 스트라이프 개수를 지정하여야 함
- # lvcreate -n raid0_lv -L 1G -i 3 -I 64K vg_raid
- 각 PV에서 동일한 개수의 PE를 가지고 와야 하므로, 생성하고자 하는 크기보다 더 크게 만들어질 수 있음 (총 PE의 개수가 스트라이프 개수로 나누어 떨어지도록 조정)
RAID 1 LV 생성
- RAID 1 생성 시 미러 개수를 지정하여야 함
- # lvcreate -n raid1_lv -L 1G -m 2 vg_raid
RAID 5 LV 생성
- RAID 5 생성 시 스트라이프 개수 및 RAID 타입을 지정하여야 함
- # lvcreate -n raid5_lv -L 1G -i 3 -I 64K --type raid5 vg_raid
- RAID 0과 같이 동일한 개수의 PE를 각 PV로부터 가져올 수 있도록 생성되는 LV의 크기가 조정됨 (스트라이프의 개수로 나누어 떨어지도록)
RAID 6 LV 생성
- RAID 6 생성 시 스트라이프 개수 및 RAID 타입을 지정하여야 함
- # lvcreate -n raid6_lv -L 1G -i 3 -I 64K --type raid6 vg_raid
- RAID 0 과 같이 동일한 개수의 PE를 각 PV로부터 가져올 수 있도록 생성되는 LV의 크기가 조정됨 (스트라이프의 개수로 나누어 떨어지도록)
RAID 10 LV 생성
- 스트라이프의 개수, 미러의 개수를 함께 지정, raid10 타입도 지정
- # lvcreate -n raid10_lv -L 1G -i 2 -I 64K -m 1 --type raid10 vg_raid
=====================================================
*이 포스팅은 엔코아 플레이 데이터 수업 내용을 참고로 합니다.
'IT > Linux' 카테고리의 다른 글
작업 스케줄러 (0) | 2021.03.30 |
---|---|
systemd (0) | 2021.03.29 |
저장소 관리 (파티션,파일 시스템,스왑) (0) | 2021.03.25 |
권한 / 프로세스 (0) | 2021.03.24 |
리눅스 사용자 관리 (0) | 2021.03.23 |
댓글