본문 바로가기
IT/Linux

저장소 관리(LVM,RAID)

by 혁클 2021. 3. 27.

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 구성 순서

  1. 디스크 추가
  2. 디스크 인식
  3. 파티션 생성
  4. 물리볼륨 생성
  5. 볼륨 그룹 생성
  6. 논리 볼륨 생성 → 볼륨(파티션) 생성
  7. 파일 시스템 생성
  8. 마운트



실습

  • 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

댓글