[Linux] LVM, RAID 개념
LVM이란?
Logical Volume Manager. Linux에서 유연한 디스크 관리 및 파티션 관리를 제공하는 시스템. 기존 파티션 구조보다 더 유연하게 스토리지를 확장하거나 축소할 수 있음
LVM의 장점
- 유연한 디스크 관리: 디스크를 추가하거나 제거하여 쉽게 확장 가능함
- 스냅샷 기능: 현재 데이터를 기반으로 스냅샷 생성 가능함
- 파티션 크기 조정: LV 크기를 필요에 따라 쉽게 조정 가능함
LVM의 구성 요소
- Physical Volume(PV)
- LVM의 가장 기본 단위로, 실제 디스크 또는 디스크 파티션을 의미
- (예시) /dev/sda1, /dev/sdb1 등
- Volume Group (VG)
- 여러 Physical Volume(PV)을 결합하여 하나의 논리적 스토리지 풀을 만듦
- VG 내의 공간은 논리적 볼륨(Logical Volume) 생성에 사용함
- Logical Volume (LV)
- 사용자에게 제공되는 최종 논리적 파티션
- VG에서 원하는 크기의 공간을 할당받아 생성됨
- 파일 시스템을 생성하여 실제 데이터 저장소로 사용함
LVM 구성 절차
- Physical Volume 생성
# physical Volume 생성 sudo pvcreate /dev/sda1 /dev/sdb1
- Volume Group 생성
# Volume Group 생성 sudo vgcreate my_vg /dev/sda1 /dev/sdb1
- Logical Volume 생성
# Logical Volume 생성 sudo lvcreate -L 20G -n my_lv my_vg
- 파일 시스템 생성
# 파일 시스템 생성 sudo mkfs.ext4 /dev/my_vg/my_lv
- Logical Volume 마운트
# 마운트할 디렉토리 생성 sudo mkdir /mnt/my_volume # Logical Volume 마운트 sudo mount /dev/my_vg/my_lv /mnt/my_volume
LVM 관리 명령어
- Physical Volume 확인
sudo pvdisplay
- Volume Group 확인
sudo vgdisplay
- Logical Volume 확인
sudo lvdisplay
- Logical Volume 확장
sudo lvextend -L +10G /dev/my_vg/my_lv sudo resize2fs /dev/my_vg/my_lv # 파일 시스템 크기 확장
- Logical Volume 축소
sudo resize2fs /dev/my_vg/my_lv 10G # 파일 시스템 크기 조정 sudo lvreduce -L 10G /dev/my_vg/my_lv # LV 크기 축소
- Logical Volume 삭제
sudo lvremove /dev/my_vg/my_lv
- Volume Group 삭제
sudo vgremove my_vg
- Physical Volume 삭제
sudo pvremove /dev/sda1
LVM 구성 예시
구성 목표:
- 두 개의 디스크
/dev/sda1(50GB)
,/dev/sdb1(50GB)
를 사용해 LVM을 구성. - 하나의 VG
my_vg
생성. - 80GB 크기의 LV
my_lv
생성 후 마운트.
명령어:
# 80GB 논리 볼륨 생성 코드
sudo pvcreate /dev/sda1 /dev/sdb1 # PV 생성
sudo vgcreate my_vg /dev/sda1 /dev/sdb1 # VG 생성
sudo lvcreate -L 80G -n my_lv my_vg # LV 생성
sudo mkfs.ext4 /dev/my_vg/my_lv # 파일 시스템 생성
sudo mkdir /mnt/my_volume # 마운트
sudo mount /dev/my_vg/my_lv/mnt/my_volume
RAID란?
RAID(Redundant Array of Independent Disks). 직역하면 복수 배열 독립 디스크, 풀어쓰면 여러 개의 하드 디스크를 하나의 하드 디스크처럼 사용하는 것.
데이터 스트라이핑과 패리티 정보를 활용하여 높은 데이터 읽기 성능과 안정성을 제공함.
RAID의 종류
RAID 레벨 | 최소 디스크 수 | 데이터 안전성 | 읽기 성능 | 쓰기 성능 | 저장 공간 효율성 | 구성 방식 | 사용 용도 |
---|---|---|---|---|---|---|---|
RAID-0 (Striping) | 2 | 없음 | 매우 높음 | 매우 높음 | 100% | 데이터를 디스크에 나누어 저장 | 고속 데이터 처리(영상편집시스템, 캐시 데이터) |
RAID-1 (Mirroring) | 2 | 매우 높음 | 높음 | 중간 | 50% | 데이터를 동일하게 복제(Mirroring)하여 저장 | 높은 데이터 안전성이 필요한 환경(DB 서버, 금융 데이터 DB) |
RAID-5 (Striping with Parity) | 3 | 높음 | 높음 | 중간 | (N-1)/N | 데이터 스트라이핑과 패리티 블록 사용 | 읽기 성능과 데이터 안정성을 모두 요구하는 서버 환경(웹 서버, 파일 서버) |
RAID-6 (Striping with Double Parity) | 4 | 매우 높음 | 높음 | 낮음 | (N-2)/N | RAID-5의 패리티를 두 개로 확장 | 높은 데이터 안정성이 필요한 대규모 스토리지(백업 서버, 데이터 아카이빙) |
RAID-10 (RAID-1+0, Mirroring and Striping) | 4 | 매우 높음 | 매우 높음 | 매우 높음 | 50% | 데이터를 먼저 미러링(RAID-1)한 후 스트라이핑(RAID-0) | 데이터 안전성과 성능을 모두 요구하는 환경(고속 DB) |
RAID-50 (RAID-5+0, Striping or RAID-5 Groups) | 6 | 높음 | 매우 높음 | 높음 | (N-1)/N | 여러 RAID-5 배열을 스트라이핑으로 결합 | 대용량 데이터를 다루는 서버/데이터 센터(빅데이터 분석 서버, 대용량 파일 스토리지) |
RAID-60 (RAID-6+0, Striping or RAID-6 Groups) | 8 | 매우 높음 | 매우 높음 | 중간 | (N-2)/N | 여러 RAID-6 배열을 스트라이핑으로 결합 | 매우 높은 안정성과 성능이 요구되는 대규모 데이터 센터(클라우드 데이터 센터, 연구 DB) |
서버 개발자가 아니어서 실상은 알 수 없지만, GPT는 RAID 레벨을 성능, 안정성, 용량 요구에 따라 다음과 같이 선택하는 경향이 있다고 소개했다. 확실하지 않으므로 참고만 하자.
- 성능 중시: RAID-0, RAID-10
- 안전성 중시: RAID-1, RAID-6
- 균형 중시: RAID-5, RAID-50
RAID 구성 계산
리눅스 마스터 2차 기출문제
문제: 10GB 하드 디스크 8개 중 하나를 스페어 디스크로 설정하고, 나머지 디스크로 RAID-5를 구성할 때 실제로 사용할 수 있는 용량은 몇 GB인가?
답: 60GB
해설:
- RAID-5 구성 원리:
- RAID-5에서는 데이터를 스트라이핑하고, 추가로 패리티 정보를 저장한다.
- 총 디스크 수 중 1개는 패리티 저장용으로 사용되므로 사용 가능한 용량은 (N-1) x 디스크 용량이 된다.(N: RAID에 사용된 디스크 수)
- 스페어 디스크 고려:
- 스페어 디스크는 RAID에 직접 사용되지 않고, 디스크 장애 발생 시 복구를 위해 준비된 디스크이다.
- 스페어 디스크는 RAID-5의 유효 디스크 수에서 제외된다.
- 적용:
- 총 8개의 디스크 중 1개는 스페어 디스크로 설정되므로, RAID-5에 사용 가능한 디스크는 7개이다.
- RAID-5 구성에서는 1개 디스크가 패리티 용도로 사용되므로, 실제 데이터 저장에 사용 가능한 디스크는 7 - 1 = 6개이다.
- 계산:
- 각 디스크 용량: 10GB
- 사용 가능한 디스크 수: 6개
- 총 사용 가능한 용량: 6 x 10GB = 60GB
1. RAID-0 (Striping)
- 구성: 4개의 디스크, 각 디스크 용량 10GB.
- 계산: 모든 디스크의 용량을 합산.
- 특징: 데이터 스트라이핑으로 성능은 높지만 장애 복구 불가.
- 가용 용량: 10GB × 4 = 40GB
2. RAID-1 (Mirroring)
- 구성: 2개의 디스크, 각 디스크 용량 10GB.
- 계산: 한 디스크가 복제본으로 사용, 실질적으로 1개의 디스크 용량만 사용 가능.
- 특징: 높은 안정성(디스크 장애 시 복구 가능), 용량 효율 50%.
- 가용 용량: 10GB × 1 = 10GB
3. RAID-5 (Striping with Parity)
- 구성: 5개의 디스크, 각 디스크 용량 10GB.
- 계산: 총 디스크 수 중 1개는 패리티로 사용되므로 (N-1)개의 용량만 사용 가능.
- 특징: 단일 디스크 장애 복구 가능, 패리티 계산으로 쓰기 성능 다소 저하.
- 가용 용량: 10GB × (5 - 1) = 40GB
4. RAID-6 (Striping with Double Parity)
- 구성: 6개의 디스크, 각 디스크 용량 10GB.
- 계산: 총 디스크 수 중 2개는 패리티로 사용, (N-2)개의 용량만 사용 가능.
- 특징: 동시에 2개의 디스크 장애 복구 가능.
- 가용 용량: 10GB × (6 - 2) = 40GB
5. RAID-10 (RAID-1+0, Mirroring and Striping)
- 구성: 4개의 디스크, 각 디스크 용량 10GB.
- 계산: RAID-1로 미러링 -> RAID-0로 스트라이핑, 절반 용량만 사용 가능.
- 특징: 높은 성능과 안정성 제공, 용량 효율 50%.
- 가용 용량: 10GB × (4 ÷ 2) = 20GB
6. RAID-50 (Striping of RAID-5 Groups)
- 구성: 6개의 디스크, 각 디스크 용량 10GB. RAID-5 그룹 2개로 구성.
- 계산: RAID-5 그룹당 1개 패리티 디스크 사용 -> 그룹별 용량 계산 후 스트라이핑.
- 특징: RAID-5보다 성능이 높고, 안정성도 우수.
- 가용 용량: RAID-5 그룹: 10GB × (3 - 1) = 20GB -> 그룹 2개를 스트라이핑: 20GB + 20GB = 40GB
7. RAID-60 (Striping of RAID-6 Groups)
- 구성: 8개의 디스크, 각 디스크 용량 10GB. RAID-6 그룹 2개로 구성.
- 계산: RAID-6 그룹당 2개 패리티 디스크 사용 -> 그룹별 용량 계산 후 스트라이핑.
- 특징: 매우 높은 안정성과 중간 수준의 성능.
- 가용 용량: RAID-6 그룹: 10GB × (4 - 2) = 20GB 그룹 -> 2개를 스트라이핑: 20GB + 20GB = 40GB
Leave a comment