소개
LVM 또는 Logical Volume Management는 사용자에게 구성 요소 저장 장치의 물리적 레이아웃을 풀고 추상화하여 유연한 관리를 제공하는 저장 장치 관리 기술입니다. 현재 버전인 LVM2는 장치 매퍼 Linux 커널 프레임워크를 활용하여 기존 저장 장치를 그룹화하고 필요에 따라 결합된 공간에서 논리적 단위를 할당할 수 있습니다.
LVM의 주요 장점은 추상화, 유연성, 그리고 제어의 증가입니다. 논리적 볼륨에는 “데이터베이스” 또는 “루트 백업”과 같은 의미 있는 이름이 할당될 수 있습니다. 또한 공간 요구 사항이 변경되는 경우 논리적 볼륨을 동적으로 크기 조정하고, 실행 중인 시스템에서 풀 내의 물리적 장치 간에 마이그레이션하거나 내보낼 수 있습니다. LVM은 또한 스냅샷, 스트라이핑 및 미러링과 같은 고급 기능을 제공합니다.
이 안내서에서는 LVM이 어떻게 작동하는지 알아보고 베어 메탈 머신에서 빠르게 시작하기 위한 기본 명령을 연습할 것입니다.
LVM 아키텍처 및 용어
LVM 관리 명령을 자세히 살펴보기 전에 LVM이 저장 장치를 어떻게 구성하고 어떤 용어를 사용하는지에 대한 기본적인 이해가 중요합니다.
LVM 저장 관리 구조
LVM은 물리적 저장 장치 위에 추상화를 층층이 덮어씌움으로써 작동합니다. LVM이 사용하는 기본 레이어는 가장 원시적인 것부터 시작하여 다음과 같습니다:
-
물리 볼륨: 물리 볼륨에 대한 LVM 유틸리티 접두사는
pv...
입니다. 이는 물리적 블록 장치 또는 기타 디스크 형태의 장치(예: 디바이스 매퍼에 의해 생성된 다른 디바이스, 예를 들어 RAID 어레이 같은)로 사용되며, LVM은 이를 더 높은 추상화 수준의 원료로 사용합니다. 물리 볼륨은 일반적인 저장 장치입니다. LVM은 관리를 위해 장치에 헤더를 기록합니다. -
볼륨 그룹: 볼륨 그룹에 대한 LVM 유틸리티 접두사는
vg...
입니다.
LVM은 물리 볼륨을 볼륨 그룹이라는 저장 풀로 결합합니다. 볼륨 그룹은 하위 장치의 특성을 추상화하고 구성 요소 물리 볼륨의 병합된 저장 용량으로 통합된 논리적 장치로 작동합니다. -
논리적 볼륨: 논리 볼륨에 대한 LVM 유틸리티 접두사는
lv...
이며, 일반적인 LVM 유틸리티는lvm...
으로 시작할 수 있습니다. 볼륨 그룹은 임의의 논리적 볼륨으로 나눌 수 있습니다. 논리적 볼륨은 물리 디스크의 파티션과 기능적으로 동등하지만 훨씬 더 유연합니다. 논리적 볼륨은 사용자 및 응용 프로그램이 상호 작용할 주요 구성 요소입니다.
LVM은 시스템에서 사용 가능한 저장 공간을 통합하기 위해 물리적 볼륨을 볼륨 그룹으로 결합하는 데 사용될 수 있습니다. 그런 다음, 관리자는 볼륨 그룹을 임의의 논리적 볼륨으로 분할하여 유연한 파티션으로 작동합니다.
연장 이해
각 볼륨 그룹 내의 각 볼륨은 작고 고정 크기의 청크로 나뉩니다. 이를 extents라고 합니다. Extents의 크기는 볼륨 그룹에 따라 결정됩니다. 그룹 내의 모든 볼륨은 동일한 extent 크기를 준수합니다.
물리적 볼륨의 extents는 물리적 extents라고 하며, 논리적 볼륨의 extents는 논리적 extents라고 합니다. 논리적 볼륨은 LVM이 논리적과 물리적 extents 간에 유지하는 매핑입니다. 이 관계로 인해 extent 크기는 LVM에 의해 할당 될 수있는 가장 작은 공간을 나타냅니다.
Extents는 LVM의 유연성과 강력함의 핵심입니다. LVM에 의해 통합 장치로 제공되는 논리적 extents는 연속적인 물리적 extents와 매핑될 필요가 없습니다. LVM은 사용자에게 어떠한 중단도없이 논리적 볼륨을 구성하는 물리적 extents를 복사하고 재구성 할 수 있습니다. 논리적 볼륨은 또한 볼륨에 extents를 추가하거나 extents를 제거하여 확장 또는 축소 할 수 있습니다.
일반적인 사용 사례
이제 LVM이 사용하는 일부 용어 및 구조에 익숙해졌으므로 LVM의 일반적인 사용 방법을 살펴볼 수 있습니다. 두 개의 물리 디스크를 사용하여 네 개의 논리적 볼륨을 형성하는 절차로 시작하겠습니다.
물리 디바이스를 물리적 볼륨으로 표시하기
먼저 LVM이 접근하고 관리할 수 있는 블록 디바이스를 시스템에서 스캔합니다. 다음 명령을 사용하여 이 작업을 수행할 수 있습니다:
- 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
이 예제에서는 현재 두 개의 디스크와 17개의 파티션이 있는 것을 알 수 있습니다. 파티션은 대부분 시스템에서 성능 향상을 위해 /dev/ram*
파티션으로 사용됩니다. 이 예에서의 디스크는 각각 200G와 100G의 공간을 가진 /dev/sda
와 /dev/sdb
입니다.
경고: LVM과 함께 사용할 디바이스에 이미 중요한 데이터가 기록되어 있지 않은지 반드시 확인하십시오. 이러한 디바이스를 LVM 내에서 사용하면 현재 내용이 덮어쓰여집니다. 서버에 중요한 데이터가 있는 경우 계속 진행하기 전에 백업을 만들어야 합니다.
사용할 물리 디바이스를 알았으므로 pvcreate
명령을 사용하여 LVM 내에서 물리 볼륨으로 표시합니다:
- sudo pvcreate /dev/sda /dev/sdb
Output Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
이렇게 하면 디바이스에 LVM 헤더가 작성되어 볼륨 그룹에 추가할 준비가 되었음을 나타냅니다.
LVM이 물리 볼륨을 등록했는지 확인하려면 pvs
를 실행합니다:
- 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
입니다. 볼륨 그룹의 이름을 원하는 대로 지정할 수 있습니다.
볼륨 그룹을 생성하고 두 물리적 볼륨을 추가하려면 다음을 실행하십시오:
- sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output Volume group "LVMVolGroup" successfully created
pvs
출력을 다시 확인하면 물리적 볼륨이 새 볼륨 그룹과 연결되었음을 나타냅니다:
- 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
를 사용하여 볼륨 그룹의 간략한 요약을 나열하십시오:
- sudo vgs
Output VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
현재 볼륨 그룹에는 두 물리적 볼륨, 제로 논리적 볼륨이 있으며 기본 장치의 결합 용량을 가지고 있습니다.
볼륨 그룹 풀에서 논리적 볼륨 생성하기
이제 볼륨 그룹을 사용할 수 있으므로 논리 볼륨을 할당하는 풀로 사용할 수 있습니다. 전통적인 파티션과 달리 논리 볼륨을 사용할 때는 볼륨의 레이아웃을 알 필요가 없습니다. 왜냐하면 LVM이 이를 매핑하고 처리하기 때문입니다. 볼륨의 크기와 이름만 제공하면 됩니다.
다음 예제에서는 볼륨 그룹에서 네 개의 별도 논리 볼륨을 생성합니다:
- 10G “projects” 볼륨
- 웹 콘텐츠용 5G “www” 볼륨
- 데이터베이스용 20G “db” 볼륨
- 남은 공간을 채울 “workspace” 볼륨
논리 볼륨을 생성하려면 lvcreate
명령을 사용하십시오. 볼륨 그룹을 지정하고 논리 볼륨에 이름을 지정할 수 있습니다. 크기를 직접 지정하려면 -L
옵션을 사용할 수 있습니다. 대신 확장의 수로 크기를 지정하려면 -l
옵션을 사용할 수 있습니다.
첫 번째 세 개의 논리 볼륨을 -L
옵션으로 생성할 수 있습니다:
- sudo lvcreate -L 10G -n projects LVMVolGroup
- sudo lvcreate -L 5G -n www LVMVolGroup
- sudo lvcreate -L 20G -n db LVMVolGroup
Output Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.
논리 볼륨 및 그들의 볼륨 그룹과의 관계를 보려면 vgs
명령에서 사용자 지정 출력을 선택하세요:
- 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
이 예에서는 출력의 마지막 두 열을 추가했습니다. 이는 논리 볼륨에 할당된 공간의 양을 나타냅니다.
이제 "작업 영역"
볼륨에 볼륨 그룹의 나머지 공간을 할당할 수 있습니다. 이를 위해 extents에서 작동하는 -l
플래그를 사용할 수 있습니다. 또한 의도를 더 잘 전달하기 위해 백분율과 단위를 제공할 수 있습니다. 이 예에서는 나머지 빈 공간을 할당하므로 100%FREE
를 전달할 수 있습니다.
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
사용자 정의 vgs
명령을 사용하여 볼륨 그룹 정보를 확인하면 사용 가능한 모든 공간을 사용한 것을 알 수 있습니다.
- 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 파일 시스템으로 네 개의 논리 볼륨을 포맷하려면 다음 명령을 실행하십시오:
- sudo mkfs.ext4 /dev/LVMVolGroup/projects
- sudo mkfs.ext4 /dev/LVMVolGroup/www
- sudo mkfs.ext4 /dev/LVMVolGroup/db
- sudo mkfs.ext4 /dev/LVMVolGroup/workspace
대안으로 다음을 실행할 수 있습니다:
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
포맷을 완료한 후 마운트 지점을 생성하십시오:
- sudo mkdir -p /mnt/{projects,www,db,workspace}
그런 다음 논리 볼륨을 적절한 위치에 마운트하십시오:
- sudo mount /dev/LVMVolGroup/projects /mnt/projects
- sudo mount /dev/LVMVolGroup/www /mnt/www
- sudo mount /dev/LVMVolGroup/db /mnt/db
- sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
마운트를 영구적으로 설정하려면 선호하는 텍스트 편집기를 사용하여 /etc/fstab
파일에 추가하십시오. 다음 예는 nano
를 사용합니다:
- 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 사용 가이드를 확인하십시오.