Linux(CentOS) 저장소 관리(LVM, RAID)

박종현·2022년 5월 16일
0

리눅스(CentOS)

목록 보기
11/13

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

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

  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 <장치명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

논리볼륨 제거

  • 생성의 역순으로 진행
    • LV가 없어야 VG를 제거할 수 있음

    • LV를 사용중이지 않아야 제거 가능

    • VG에 포함되어있지 않은 PV는 제거할 수 있음

      마운트 해제 - umountLV제거 - lvremove <삭제할 장치파일명>VG제거 - vgremove <삭제할 볼륨그룹명>PV제거 - pvremove <삭제할 물리볼륨장치명>

논리볼륨 관리

  • 논리볼륨 내 개체들에 대한 확장/축소
  • 볼륨그룹 축소/확장 - 볼륨그룹은 물리볼륨의 집합
    • 축소 : 볼륨그룹에서 물리볼륨을 제거 - 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)
    • 1+0 외에도 5+0, 1+0+0
  • 일반적인 RAID 구성 시 직접 파티션 수겅을 통해 동일한 크기의 RAID 재료 디스크를 구성하여야 하나, LVM은 각 PV당 RAID를 구성하기 위한 동일한 크기만 할당할 수 있으면 구성가능

LVM을 사용한 RAID 구성 실습

  • 기존 사용중인 디스크 전부 마운트 해제/ 파티션 제거
  • 각 디스크 전체를 1번 파티션으로 생성 후 PV생성
  • 볼륨그룹 vg_raid 생성
  1. RAID 0 LV생성

     lvcreate -n raid0_lv -L 1G -i 3 -I 64K vg_raid
    • RAID 0 생성시 스트라이프 개수를 지정하여야 함
    • 각 PV에서 동일한 개수의 PE를 가지고와야 하므로, 생성하고자 하는 크기보다 더 크게 만들어질 수 있음 (총 PE의 개수가 Stripe 개수로 나누어 떨어지도록 조정)
  2. RAID 1 LV생성

     lvcreate -n raid1_lv -L 1G -m 2 vg_raid
    • RAID 1 생성 시 Mirror 갯수를 지정하여야 함
  3. 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 갯수로 나누어 떨어지도록)
  4. 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 갯수로 나누어 떨어지도록)
  5. RAID 10 LV생성

     lvcreate -n raid10_lv -L 1G -i 2 -I 64KB -m 1 --type raid10 vg_raid
    • Stripe의 갯수, Mirror의 갯수를 함께 지정, RAID10타입도 지정

0개의 댓글