LVM

메론보이·2024년 5월 29일

리눅스

목록 보기
10/17
post-thumbnail

1. 개념과 정의

  • Logical Volume Manager (LVM)는 리눅스에서 디스크 드라이브의 파티션 관리를 유연하게 할 수 있도록 도와주는 시스템입니다.
  • 물리적 디스크 공간을 논리적 볼륨으로 추상화하여 더 유연하고 효율적인 디스크 공간 관리를 가능하게 합니다.

2. 왜 사용하는가?

LVM을 사용하는 주요 이유는 다음과 같습니다:

  • 유연성: 논리 볼륨을 쉽게 확장하거나 축소할 수 있습니다.
  • 관리 용이성: 여러 디스크를 하나의 논리 볼륨으로 묶어 관리할 수 있습니다.
  • 스냅샷: 데이터의 특정 시점 복제본을 쉽게 생성할 수 있습니다.
  • 디스크 공간의 효율적 사용: 디스크 추가 및 제거가 쉬워서 효율적으로 디스크 공간을 사용할 수 있습니다.

3. 언제 사용하는가?

LVM은 다음과 같은 상황에서 유용합니다:

  • 디스크 공간이 자주 변경되는 환경
  • 고가용성을 위해 데이터 스냅샷을 자주 생성해야 하는 경우
  • 여러 개의 디스크를 하나의 파일 시스템으로 통합 관리하려는 경우
  • 디스크 용량 확장이 빈번히 요구되는 상황

4. 어떻게 사용하는가?

LVM은 다음의 단계로 사용됩니다:

  1. 물리 볼륨 생성 (Physical Volume, PV): 디스크나 파티션을 물리 볼륨으로 초기화합니다.

pvcreate /dev/sda1
  1. 볼륨 그룹 생성 (Volume Group, VG): 하나 이상의 물리 볼륨을 묶어서 볼륨 그룹을 생성합니다.

vgcreate myvg /dev/sda1 /dev/sda2
  1. 논리 볼륨 생성 (Logical Volume, LV): 볼륨 그룹 내에서 논리 볼륨을 생성합니다.

lvcreate -n mylv -L 10G myvg
  1. 파일 시스템 생성 및 마운트: 논리 볼륨에 파일 시스템을 생성하고 마운트합니다.

mkfs.ext4 /dev/myvg/mylv
mount /dev/myvg/mylv /mnt

5. 실제 사용 예시

디스크 추가 및 확장:

새 디스크 추가 후 물리 볼륨으로 초기화


pvcreate /dev/sdb1

볼륨 그룹에 물리 볼륨 추가


vgextend myvg /dev/sdb1

논리 볼륨 크기 확장


lvextend -L +10G /dev/myvg/mylv

파일 시스템 크기 조정


resize2fs /dev/myvg/mylv

스냅샷 생성:

스냅샷 논리 볼륨 생성

lvcreate -s -n mylv_snap -L 1G /dev/myvg/mylv

6. 작동 원리

  • LVM은 디스크 파티션을 물리 볼륨(PV)으로 변환하고, 여러 PV를 묶어 볼륨 그룹(VG)을 생성합니다.
  • VG에서 논리 볼륨(LV)을 생성하여 사용자가 원하는 크기의 논리적 저장 공간을 만듭니다.
  • 논리 볼륨은 물리적 디스크와 독립적으로 확장, 축소가 가능하여 유연한 디스크 공간 관리를 제공합니다.

LVM은 이러한 논리적 계층 구조를 통해 디스크 공간을 추상화하고, 사용자가 직접 물리적 디스크를 관리하지 않아도 되게 하여 편리함을 제공합니다.

LVM을 이용한 RAID 설정

  • LVM(Logical Volume Manager)은 논리 볼륨 관리 시스템으로, 논리 볼륨을 쉽게 생성하고 관리할 수 있게 해줍니다.
  • LVM에서도 RAID를 지원합니다.
  • lvcreate 명령어를 사용하여 LVM을 통해 RAID 볼륨을 만드는 방법을 설명하겠습니다.

1. 물리 볼륨 생성

  • 먼저 RAID에 사용할 디스크를 물리 볼륨(PV)으로 생성합니다.
pvcreate /dev/sd[b-d]

2. 볼륨 그룹 생성

  • 물리 볼륨을 포함하는 볼륨 그룹(VG)을 생성합니다.
vgcreate vg_raid /dev/sd[b-d]

3. RAID 논리 볼륨 생성

  • 이제 lvcreate 명령어를 사용하여 RAID 논리 볼륨을 생성할 수 있습니다.

RAID 0

  • RAID 0은 성능 향상을 위해 스트라이핑을 사용합니다.
lvcreate --type raid0 -l 100%FREE -n lv_raid0 vg_raid

RAID 1

  • RAID 1은 데이터 복제를 위해 미러링을 사용합니다.
lvcreate --type raid1 -m1 -l 100%FREE -n lv_raid1 vg_raid

RAID 5

  • RAID 5는 스트라이핑과 패리티 정보를 사용하여 데이터를 보호합니다.
lvcreate --type raid5 -l 100%FREE -n lv_raid5 vg_raid

RAID 6

  • RAID 6은 이중 패리티 정보를 사용하여 데이터를 보호합니다.
lvcreate --type raid6 -l 100%FREE -n lv_raid6 vg_raid

RAID 10

  • RAID 10은 스트라이핑과 미러링을 결합합니다.
lvcreate --type raid10 -l 100%FREE -n lv_raid10 vg_raid

4. 파일 시스템 생성

  • 논리 볼륨에 파일 시스템을 생성합니다.
mkfs.ext4 /dev/vg_raid/lv_raid0
mkfs.ext4 /dev/vg_raid/lv_raid1
mkfs.ext4 /dev/vg_raid/lv_raid5
mkfs.ext4 /dev/vg_raid/lv_raid6
mkfs.ext4 /dev/vg_raid/lv_raid10

5. 마운트 포인트 생성 및 마운트

  • 마운트 포인트를 생성하고, RAID 논리 볼륨을 마운트합니다.
mkdir /mnt/lv_raid0
mkdir /mnt/lv_raid1
mkdir /mnt/lv_raid5
mkdir /mnt/lv_raid6
mkdir /mnt/lv_raid10

mount /dev/vg_raid/lv_raid0 /mnt/lv_raid0
mount /dev/vg_raid/lv_raid1 /mnt/lv_raid1
mount /dev/vg_raid/lv_raid5 /mnt/lv_raid5
mount /dev/vg_raid/lv_raid6 /mnt/lv_raid6
mount /dev/vg_raid/lv_raid10 /mnt/lv_raid10

6. /etc/fstab에 추가

  • 재부팅 시 자동으로 마운트되도록 /etc/fstab 파일에 추가합니다.
/dev/vg_raid/lv_raid0  /mnt/lv_raid0  ext4  defaults  0  2
/dev/vg_raid/lv_raid1  /mnt/lv_raid1  ext4  defaults  0  2
/dev/vg_raid/lv_raid5  /mnt/lv_raid5  ext4  defaults  0  2
/dev/vg_raid/lv_raid6  /mnt/lv_raid6  ext4  defaults  0  2
/dev/vg_raid/lv_raid10 /mnt/lv_raid10 ext4  defaults  0  2

요약

  • LVM을 사용하여 RAID 볼륨을 생성하면 mdadm 유틸리티 대신 LVM의 유연성을 활용할 수 있습니다.
  • 각 RAID 레벨에 맞는 lvcreate 명령어를 사용하여 RAID 논리 볼륨을 생성하고, 이를 파일 시스템으로 포맷하여 마운트합니다.
  • /etc/fstab 파일을 업데이트하여 부팅 시 자동으로 마운트되도록 설정할 수 있습니다

주요 옵션

--type

  • --type 옵션은 논리 볼륨의 유형을 지정합니다. RAID 레벨을 설정할 때 사용됩니다.

lvcreate --type <raid type> ...

-l 또는 -L

  • -l 옵션은 논리 볼륨의 크기를 지정합니다.
  • -l 옵션은 논리 익스텐트(Logical Extents) 단위로, -L 옵션은 일반적인 크기(예: MB, GB) 단위로 크기를 지정합니다.
lvcreate -l 100%FREE ...
lvcreate -L 10G ...

-n

  • -n 옵션은 논리 볼륨의 이름을 지정합니다.

lvcreate -n <name> ...

-m

  • -m 옵션은 RAID 1(미러링)에서 미러의 개수를 지정합니다.
  • RAID 1에서는 항상 -m1을 사용합니다.
lvcreate --type raid1 -m1 ...

RAID 레벨별 옵션

RAID 0 (스트라이핑)

lvcreate --type raid0 -l 100%FREE -n lv_raid0 vg_raid

--type raid0: RAID 0 유형을 지정합니다.

RAID 1 (미러링)

lvcreate --type raid1 -m1 -l 100%FREE -n lv_raid1 vg_raid
--type raid1: RAID 1 유형을 지정합니다.

-m1: 미러의 개수를 1로 지정합니다. (RAID 1에서는 항상 -m1)

RAID 5 (스트라이핑 + 패리티)

lvcreate --type raid5 -l 100%FREE -n lv_raid5 vg_raid

--type raid5: RAID 5 유형을 지정합니다.

RAID 6 (이중 패리티)

lvcreate --type raid6 -l 100%FREE -n lv_raid6 vg_raid
--type raid6: RAID 6 유형을 지정합니다.

RAID 10 (스트라이핑 + 미러링)

lvcreate --type raid10 -l 100%FREE -n lv_raid10 vg_raid

--type raid10: RAID 10 유형을 지정합니다.

추가 옵션

--stripes

  • --stripes 옵션은 RAID 0, RAID 5, RAID 6, RAID 10에서 사용할 스트라이프의 수를 지정합니다.
sh
코드 복사
lvcreate --type raid0 --stripes 2 -l 100%FREE -n lv_raid0 vg_raid

--stripesize

  • --stripesize 옵션은 각 스트라이프의 크기를 지정합니다. 기본값은 64KB입니다.
lvcreate --type raid0 --stripes 2 --stripesize 128k -l 100%FREE -n lv_raid0 vg_raid

요약

  • --type : RAID 유형을 지정합니다.
  • -l 또는 -L : 논리 볼륨의 크기를 지정합니다.
  • -n : 논리 볼륨의 이름을 지정합니다.
  • -m : 미러의 개수를 지정합니다 (RAID 1에서 사용).
  • --stripes : 스트라이프의 수를 지정합니다 (RAID 0, 5, 6, 10에서 사용).
  • --stripesize : 각 스트라이프의 크기를 지정합니다.

참고

mdadm

0개의 댓글