웹사이트 검색

LVM 개념, 용어 및 작동 소개


소개

LVM 또는 Logical Volume Management는 유연한 관리를 위해 구성 요소 저장 장치의 물리적 레이아웃을 풀링하고 추상화할 수 있는 기능을 사용자에게 제공하는 저장 장치 관리 기술입니다. 장치 매퍼 Linux 커널 프레임워크를 활용하여 현재 반복인 LVM2를 사용하여 기존 저장 장치를 그룹으로 모으고 필요에 따라 결합된 공간에서 논리 장치를 할당할 수 있습니다.

LVM의 주요 이점은 향상된 추상화, 유연성 및 제어입니다. 논리 볼륨은 \databases 또는 root-backup과 같은 의미 있는 이름을 가질 수 있습니다. 또한 공간 요구 사항이 변경되면 볼륨 크기를 동적으로 조정할 수 있으며 실행 중인 시스템의 풀 내 물리적 장치 간에 마이그레이션하거나 내보낼 수 있습니다. LVM은 스냅샷, 스트라이핑, 미러링과 같은 고급 기능도 제공합니다.

이 가이드에서는 LVM의 작동 방식을 배우고 기본 명령을 연습하여 베어메탈 머신에서 빠르게 시작하고 실행할 수 있습니다.

LVM 아키텍처 및 용어

LVM 관리 명령을 자세히 살펴보기 전에 LVM이 저장 장치를 구성하는 방법과 LVM에서 사용하는 일부 용어를 기본적으로 이해하는 것이 중요합니다.

LVM 저장소 관리 구조

LVM은 물리적 저장 장치 위에 추상화를 계층화하여 작동합니다. LVM이 사용하는 기본 계층은 가장 원시적인 계층부터 다음과 같습니다.

  • 물리 볼륨: 물리 볼륨의 LVM 유틸리티 접두어는 pv...입니다. 이는 물리적으로 장치 또는 기타 디스크와 같은 장치(예: RAID 어레이와 같은 장치 매퍼에 의해 생성된 다른 장치)를 차단하고 LVM에서 더 높은 수준의 추상화를 위한 원시 구성 재료로 사용됩니다. 물리적 볼륨은 일반 저장 장치입니다. LVM은 장치에 헤더를 작성하여 관리용으로 할당합니다.\n
  • 볼륨 그룹: 볼륨 그룹의 LVM 유틸리티 접두어는 vg...입니다. LVM은 물리적 볼륨을 볼륨 그룹이라는 스토리지 풀로 결합합니다. 볼륨 그룹은 기본 장치의 특성을 추상화하고 구성 요소 물리적 볼륨의 결합된 스토리지 용량과 통합된 논리적 장치로 기능합니다.\n
  • 논리 볼륨: 논리 볼륨의 LVM 유틸리티 접두어는 lv...이며 일반 LVM 유틸리티는 lvm...로 시작할 수 있습니다. 볼륨 그룹은 여러 논리 볼륨으로 분할될 수 있습니다. 논리 볼륨은 물리적 디스크의 파티션과 기능적으로 동일하지만 훨씬 더 유연합니다. 논리 볼륨은 사용자와 응용 프로그램이 상호 작용하는 기본 구성 요소입니다.\n

LVM은 물리적 볼륨을 볼륨 그룹으로 결합하여 시스템에서 사용 가능한 저장 공간을 통합하는 데 사용할 수 있습니다. 그런 다음 관리자는 볼륨 그룹을 유연한 파티션으로 작동하는 임의의 논리 볼륨으로 분할할 수 있습니다.

범위 이해

볼륨 그룹 내의 각 볼륨은 익스텐트라고 하는 작고 고정된 크기의 청크로 분할됩니다. 익스텐트의 크기는 볼륨 그룹에 의해 결정됩니다. 그룹 내의 모든 볼륨은 동일한 익스텐트 크기를 따릅니다.

물리 볼륨의 익스텐트를 물리 익스텐트라고 하고 논리 볼륨의 익스텐트를 논리 익스텐트라고 합니다. 논리 볼륨은 논리 확장 영역과 물리 확장 영역 간에 LVM이 유지 관리하는 매핑입니다. 이 관계로 인해 익스텐트 크기는 LVM에서 할당할 수 있는 최소 공간을 나타냅니다.

익스텐트는 LVM의 유연성과 성능의 상당 부분을 지원합니다. LVM에 의해 통합 장치로 표시되는 논리 확장 영역은 연속적인 물리 확장 영역에 매핑할 필요가 없습니다. LVM은 논리 볼륨을 구성하는 물리 확장 영역을 사용자의 방해 없이 복사 및 재구성할 수 있습니다. 볼륨에 익스텐트를 추가하거나 볼륨에서 익스텐트를 제거하여 논리 볼륨을 확장하거나 축소할 수도 있습니다.

일반적인 사용 사례

이제 LVM에서 사용하는 일부 용어와 구조에 익숙해졌으므로 LVM을 사용하는 몇 가지 일반적인 방법을 살펴볼 수 있습니다. 두 개의 물리적 디스크를 사용하여 네 개의 논리 볼륨을 형성하는 절차부터 시작합니다.

물리적 장치를 물리적 볼륨으로 표시

LVM이 액세스하고 관리할 수 있는 블록 장치에 대한 시스템 스캔부터 시작하십시오. 다음 명령으로 이 작업을 수행할 수 있습니다.

  1. sudo lvmdiskscan

출력은 LVM이 상호 작용할 수 있는 사용 가능한 모든 블록 장치를 반환합니다.

Output
/dev/ram0 [ 64.00 MiB] /dev/sda [ 200.00 GiB] /dev/ram1 [ 64.00 MiB] . . . /dev/ram15 [ 64.00 MiB] /dev/sdb [ 100.00 GiB] 2 disks 17 partitions 0 LVM physical volume whole disks 0 LVM physical volumes

이 예에서 현재 2개의 디스크와 17개의 파티션이 있음을 알 수 있습니다. 파티션은 대부분 성능 향상을 위해 시스템에서 RAM 디스크로 사용되는 /dev/ram* 파티션입니다. 이 예의 디스크는 200G의 공간이 있는 /dev/sda와 100G의 /dev/sdb입니다.

경고: LVM과 함께 사용하려는 장치에 중요한 데이터가 이미 기록되어 있지 않은지 다시 확인하십시오. LVM 내에서 이러한 장치를 사용하면 현재 내용을 덮어씁니다. 서버에 중요한 데이터가 있는 경우 계속하기 전에 백업을 만드십시오.

이제 사용하려는 물리적 장치를 알고 있으므로 pvcreate 명령을 사용하여 LVM 내에서 물리적 볼륨으로 표시합니다.

  1. sudo pvcreate /dev/sda /dev/sdb
Output
Physical volume "/dev/sda" successfully created Physical volume "/dev/sdb" successfully created

이렇게 하면 LVM 헤더가 장치에 기록되어 볼륨 그룹에 추가할 준비가 되었음을 나타냅니다.

pvs를 실행하여 LVM이 물리적 볼륨을 등록했는지 확인합니다.

  1. sudo pvs
Output
PV VG Fmt Attr PSize PFree /dev/sda lvm2 --- 200.00g 200.00g /dev/sdb lvm2 --- 100.00g 100.00g

두 장치 모두 물리적 볼륨을 나타내는 PV 열 아래에 있습니다.

볼륨 그룹에 물리 볼륨 추가

이제 장치에서 물리적 볼륨을 생성했으므로 볼륨 그룹을 생성할 수 있습니다. 대부분의 경우 할당의 최대 유연성을 위해 시스템당 하나의 볼륨 그룹만 있습니다. 다음 볼륨 그룹 예제의 이름은 LVMVolGroup입니다. 원하는 대로 볼륨 그룹의 이름을 지정할 수 있습니다.

볼륨 그룹을 만들고 물리적 볼륨을 모두 추가하려면 다음을 실행하십시오.

  1. sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output
Volume group "LVMVolGroup" successfully created

pvs 출력을 다시 확인하면 물리적 볼륨이 이제 새 볼륨 그룹과 연결되었음을 나타냅니다.

  1. sudo pvs
Output
PV VG Fmt Attr PSize PFree /dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g /dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g

vgs를 사용하여 볼륨 그룹에 대한 간략한 요약을 나열합니다.

  1. sudo vgs
Output
VG #PV #LV #SN Attr VSize VFree LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g

볼륨 그룹에는 현재 2개의 물리적 볼륨과 0개의 논리적 볼륨이 있으며 기본 장치의 결합된 용량이 있습니다.

볼륨 그룹 풀에서 논리 볼륨 생성

이제 볼륨 그룹을 사용할 수 있으므로 이를 풀로 사용하여 논리 볼륨을 할당할 수 있습니다. 기존의 파티셔닝과 달리 논리 볼륨으로 작업할 때 LVM이 이를 매핑하고 처리하므로 볼륨의 레이아웃을 알 필요가 없습니다. 볼륨의 크기와 이름만 제공하면 됩니다.

다음 예에서는 볼륨 그룹에서 4개의 개별 논리 볼륨을 생성합니다.

  • 10G "프로젝트\ 볼륨
  • 웹 콘텐츠용 5G \www 볼륨
  • 데이터베이스용 20G \db 볼륨
  • 남은 공간을 채울 \workspace 볼륨

논리 볼륨을 생성하려면 lvcreate 명령을 사용하십시오. 가져올 볼륨 그룹을 전달해야 하며 -n 옵션을 사용하여 논리 볼륨의 이름을 지정할 수 있습니다. 크기를 직접 지정하려면 -L 옵션을 사용할 수 있습니다. 대신 익스텐트 수로 크기를 지정하려면 -l 옵션을 사용할 수 있습니다.

-L 옵션을 사용하여 처음 세 개의 논리 볼륨을 만듭니다.

  1. sudo lvcreate -L 10G -n projects LVMVolGroup
  2. sudo lvcreate -L 5G -n www LVMVolGroup
  3. sudo lvcreate -L 20G -n db LVMVolGroup
Output
Logical volume "projects" created. Logical volume "www" created. Logical volume "db" created.

vgs 명령에서 사용자 정의 출력을 선택하여 논리 볼륨과 볼륨 그룹과의 관계를 볼 수 있습니다.

  1. sudo vgs -o +lv_size,lv_name
Output
VG #PV #LV #SN Attr VSize VFree LSize LV LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db

이 예에서는 출력의 마지막 두 열을 추가했습니다. 논리 볼륨에 할당된 공간을 나타냅니다.

이제 익스텐트에서 작동하는 -l 플래그를 사용하여 볼륨 그룹의 나머지 공간을 \workspace\ 볼륨에 할당할 수 있습니다. 의도를 더 잘 전달하기 위해 백분율과 단위를 제공할 수도 있습니다. 이 예에서는 100%FREE를 전달할 수 있도록 남은 여유 공간을 할당합니다.

  1. sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output
Logical volume "workspace" created.

사용자 정의 vgs 명령으로 볼륨 그룹 정보를 확인하면 사용 가능한 공간을 모두 사용했는지 확인하십시오.

  1. sudo vgs -o +lv_size,lv_name
Output
VG #PV #LV #SN Attr VSize VFree LSize LV LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace

workspace 볼륨이 생성되었고 LVMVolGroup 볼륨 그룹이 완전히 할당되었습니다.

논리 볼륨 포맷 및 마운트

이제 논리 볼륨이 있으므로 일반 블록 장치로 사용할 수 있습니다.

논리 장치는 다른 저장 장치와 마찬가지로 /dev 디렉토리 내에서 사용할 수 있습니다. 다음 두 위치에서 액세스할 수 있습니다.

  • /dev/volume_group_name/logical_volume_name
  • /dev/mapper/volume_group_name-logical_volume_name

Ext4 파일 시스템으로 4개의 논리 볼륨을 포맷하려면 다음 명령을 실행하십시오.

  1. sudo mkfs.ext4 /dev/LVMVolGroup/projects
  2. sudo mkfs.ext4 /dev/LVMVolGroup/www
  3. sudo mkfs.ext4 /dev/LVMVolGroup/db
  4. sudo mkfs.ext4 /dev/LVMVolGroup/workspace

또는 다음을 실행할 수 있습니다.

  1. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
  2. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
  3. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
  4. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace

포맷 후 마운트 지점을 생성합니다.

  1. sudo mkdir -p /mnt/{projects,www,db,workspace}

그런 다음 논리 볼륨을 적절한 위치에 마운트합니다.

  1. sudo mount /dev/LVMVolGroup/projects /mnt/projects
  2. sudo mount /dev/LVMVolGroup/www /mnt/www
  3. sudo mount /dev/LVMVolGroup/db /mnt/db
  4. sudo mount /dev/LVMVolGroup/workspace /mnt/workspace

마운트를 영구적으로 만들려면 원하는 텍스트 편집기를 사용하여 /etc/fstab 파일에 추가하십시오. 다음 예에서는 nano를 사용합니다.

  1. sudo nano /etc/fstab
. . .

/dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0
/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0
/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0
/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0

파일을 편집한 후 저장하고 종료합니다. nano를 사용하는 경우 CTRL+c, y, ENTER를 차례로 누릅니다.

운영 체제는 이제 부팅 시 자동으로 LVM 논리 볼륨을 마운트해야 합니다.

결론

이제 유연한 스토리지 시스템을 만들기 위해 LVM이 관리하는 다양한 구성 요소와 LVM 설정에서 스토리지 장치를 시작하고 실행하는 방법을 이해했습니다.

LVM 작업에 대한 자세한 내용은 Ubuntu 18.04에서 LVM 사용에 대한 가이드를 확인하십시오.