Logical Volume Manager?
LVM은 디스크,대용량 스토리지 장치 즉 저장 공간을 유연하고 효율적으로 관리하는 커널이다.
LVM 장단점
장점
1. 스토리지 스냅숏 생성 가능
2. 유연한 디스크 관리 : 물리적인 디스크를 동적으로 확장하거나 축소할 수 있음
단점
1. 하드디스크가 고장났을 때 복구하는 것이 쉽지 않음
기존의 기초적인 파티션 분할과 LVM 비교
기존 방식은 물리 디스크를 파티션으로 분할해 이를 특정 디렉토리와 일치 시킨 후 마운트 해야했다.
만약 이때 특정 파티션의 용량이 일정 수준 찼다면 다음과 같은 작업이 이루어져야 한다.
- 추가 디스크 장착
- 추가된 디스크에 파티션 생성 및 포맷
- 새로운 마운트 포인트를 만들고 추가한 파티션을 마운트
- 기존 데이터를 복사하거나 언마운트하고 새로운 마운트 포인트로 다시 마운트
LVM은 이와 다르게 여러 디스크를 논리적인 볼륨을 통해서 조정하기 때문에 기존의 디스크를 그대로 사용하면서 확장 가능하다.
LVM 구성요소

Physical volume : PV
실제 디스크 장치를 **분할한 파티션된 상태**를 의미 → /dev/sda1 , /dev/sda2 등등, 즉 물리적인 볼륨
일정한 크기의 PE 들로 분할됨
Physical extent : PE
PV를 구성하는 일정한 크기의 블록으로 LVM2에서의 기본크기는 4MB에 해당함
PE와 LE는 가각 1:1로 대응하므로 PE와 LE의 크기는 동일하다.
Volume group : VG
하나 이상의 PV을 그룹으로 묶은 것으로 LV를 할당할 수 있는 공간
Logical volume : LV
합쳐진 VG를 다시 적절한 크기의 파티션으로 나눌 때 각 파티션을 LV라고 하며 VG에서는 각 PE들을 LE로 매핑시켜 하나의 LV가 생성되도록 한다.
LV를 구성하는 방식에 따라서 3가지의 유형이 있는데 아래와 같다. 이는 다음에 더 공부하면 추가하여 작성토록 하겠다.
선형(Linear) LV
스트라이프(Striped)된 LV
미러(Mirrored) LV
Logical extent : LE
lv가 가진 일정한 블록을 의미
LVM 설정법 및 명령어
명령어
LVM을 구성하는데 알아야하거나 연관된 명령어는 아래와 같다.
연관 명령어 : fdisk, lsblk, df, resize2fs, mkfs
| LVM 명령어 | 역할 | 옵션 |
| lvm dumpconfig | lvm의 구성정보를 출력 | |
| lvm devtypes | 내장된 블록 디바이스의 타입을 출력 | |
| lvm formats | 내장된 메타데이터를 포맷 | |
| lvmchange | 논리볼륨 매니저의 속성을 변경 | |
| lvmdiskscan | LVM2에 보이는 모든 장치를 검색 | |
| lvmdump | LVM2를 진단목적으로 덤프를 생성 | |
| pvchange | 물리 볼륨의 속성을 바꾼다 | -a : 물리 볼륨 경로가 명령 행에 지정되지 않은 경우 모든 물리 볼륨을 검색하고 사용 -u : 물리 볼륨에 새로운 uuid를 부여
-x : 물리 볼륨의 물리 볼륨 영역을 활성화하거나 비활성화 한다
|
| pvck | 물리볼륨의 메타데이터를 체크 | |
| pvdisplay | 물리볼륨의 속성을 출력 | - c : 스크립트 나 프로그램에서 쉽게 구문 분석 콜론 분리 된 출력을 생성 |
| pvmove | 물리 범위를 이동 |
-b : 백그라운드 데몬으로 실행
-i [Seconds] : 정기적으로 진행사항을 백분율로 표시
-n [Logical Volume] : 실제 볼륨 대신 대상의 물리적 볼륨에 할당 된 모든 범위에서 논리 볼륨에 속하는 경우에만 범위를 이동
|
| pvremove | 물리불륨을 삭제 |
-f : 강제로 삭제
-y : 모든 질문 Yes
|
| pvresize | LVM2를 사용하여 디스크 또는 파티션의 크기를 재조정 |
--setphysicalvolumesize : PV의 크기를 자동으로 감지된 크기보다 우선시 한다
|
| pvs | 물리봄륨에 대한 정보를 출력 |
|
| pvscan |
물리볼륨의 모든 디스크를 스캔
|
|
| vgcfgbackup |
해당 볼륨그룹의 영역을 백업
|
|
| vgcfgrestore | 해당 볼륨그룹의 영역을 복원 |
-l : 볼륨그룹 이름목록, 데이터 백업에 관한 파일과 아카이브 파일의 이름 출력
-f : LVM 메타 백업 파일의 이름은 메타 데이터 백업 또는 아카이브 파일은 볼륨 그룹 이름을 복원하기 위해 사용
|
| vgchange | 볼륨그룹의 속성을 변경 |
-A : 자동으로 백업 진행
-a : I/O를 위해 볼륨 그룹의 논리 볼륨 이용 가능성일 제어
-c : 클러스터 잠금 활성화, 볼륨 그룹의 클러스터 잠금이 설정되면 볼륨 그룹이 클러스터하거나 다른 노드에 표시되지 않음
-u : 볼륨 그룹에 새로운 uuid를 부여
-l : 기존의 비활성 볼륨 그룹의 논리 볼륨 번호를 변경
-p : 볼륨 그룹에 속할 수있는 물리적 볼륨의 최대 수를 변경
-s : 볼륨 그룹의 물리 볼륨 PE Size를 변경
-x : 볼륨 그룹의 확장 / 축소, 물리 볼륨의 활성화 / 비활성를 설정
|
| vgck | 볼륨그룹의 메타데이터를 체크 |
|
| vgconvert | 볼륨그룹의 메타데이터 형식을 변환 |
|
| vgcreate | 볼륨그룹을 생성 |
|
| vgdisplay | 볼륨그룹의 속성을 출력 |
|
| vgexport | 시스템이 볼륨그룹을 알 수 없도록 만든다 |
|
| vgimport | 시스템이 볼륨그룹을 알 수 있도록 만든다 |
|
| vgextent | 볼륨그룹에 물리볼륨을 추가 |
|
| vgimportclone | 중복된 이름의 볼륨그룹을 바꾸고 가져온다. |
|
| vgmerge | 두개의 볼륨그룹을 합친다 |
|
| vgmknodes | 볼륨 그룹의 디렉토리와 논리 볼륨의 특정파일을 다시 생성한다. |
|
| vgreduce | 하나 이상의 물리볼륨을 제거하여 볼륨그룹을 감소시킨다. |
|
| vgremove |
볼륨그룹을 삭제
|
|
| vgrename | 볼륨 그룹의 이름을 바꾼다 |
|
| vgs |
볼륨 그룹의 정보를 출력
|
|
| vgscan | 볼륨 그룹의 모든 디스크 정보를 스캔 |
|
| vgsplit | 전체 물리 볼륨을 이동하여 하나의 볼륨그룹에서 다른 볼륨그룹으로 논리 볼륨을 이동하여 볼륨그룹을 2개로 분할 |
|
| lvchange | 논리 볼륨의 속성을 변경 |
|
| lvconvert | 논리 볼륨을 미러링 또는 스냅샷 논리볼륨으로 변환 |
|
| lvcreate | 논리 볼륨을 생성 |
|
| lvextend | 논리 볼륨의 크기를 확장 |
|
| lvreduce | 논리 볼륨의 크기를 감소 |
|
| lvremove | 논리 볼륨을 삭제 |
|
| lvrename | 논리 볼륨의 이름을 바꾼다 |
|
| lvresize | 논리 볼륨의 크기를 바꾼다 |
|
| lvs | 논리 볼륨의 정보를 출력 |
|
| lvscan | 논리볼륨의 모든 디스크를 출력 |
|
설정법 시나리오1 : 신규로 연결한 디스크를 LVM으로 설정하는 경우
아무래도 현재 글을 작성하는 시점이 군 개인정비시간에 싸지방에서 작성하다보니,,,리눅스 화면까지는 표시하기 어려운 점을 이해 부탁한다.
시나리오 1
신규로 연결한 디스크를 LVM으로 설정하는 경우
1.fdisk를 이용해 저장장치에 파티션을 설정한다(파티션 타입을 LVM 타입으로)
2.pvcreate을 이용해 1.에서 설정한 파티션으로 PV를 생성한다.
3.vgcreate으로 2.에서 만든 PV들을 묶어 VG를 생성한다.
4.vgdisplay로 VG가 제대로 생성됬는지 확인한다.
5.lvcreate로 LV를 사용자가 원하는대로 생성한다.
6.mkfs를 이용해 5.에서 생성한 LV에 파일시스템 포멧을 한다.
7. 부팅시 자동으로 저장장치를 읽도록 /etc/fstab에 기술
파티션 확인
lsblk
#블록 스토리지 리스트 확인
fdisk
#추가 디스크 설치 시 디스크 확인 및 파티션닝 진행
PV 생성 (파티셔닝)
fdisk 명령어로 파티션닝한 디스크를 PV로 만들어야 한다.
pvcreate [마운트포인트]
#fdisk로 파티션닝한 디스크를 PV로 변환하는 명령어
pvscan
#pysical volume을 모두 보여주는 명령어
# PV /dev/nvme0n1p3 VG ubuntu-vg lvm2 [1.86 TiB / 1.76 TiB free]
# Total: 1 [1.86 TiB] / in use: 1 [1.86 TiB] / in no VG: 0 [0 ]
# -> free 라고 적혀있는 부분이 사용하지 않고 있는 디스크 용량을 뜻함
VG 생성
vgcreate [vg 이름] [pv이름] [pv이름] [pv이름]
#VG 생성
vgdisplay [VG 이름]
#VG 생성확인
LV 생성
lvcreate -l [할당할 크기] -n [LV 이름] [VG 이름]
#LV 생성
lvcreate -l 10%VG -n [LV 이름] [VG 이름]
#VG의 크기 중 10%를 할당
lvcreate -l 100%FREE -n [LV 이름] [VG 이름]
#VG의 남아있는 디스크 공간을 모두 할당
lvscan
#생성된 LV 확인
파일시스템 연결 및 /etc/fstab 등록
생성한 LV를 파일 시스템으로 사용하기 위해 파일 시스템을 mkfs 명령어로 연결해줘야한다.
이렇게 mkfs 명령어를 통해 연결한 파일시스템은 휘발성 정보이기 때문에 재부팅 시 자동 등록되게 하기 위해선 /etc/fstab에 아래와 같이 작성해주어야 한다.
mkfs.[파일시스템명] [마운트포인트]
vi /etc/fstab
/dev/mapper/testvg-testLV1 /lv1 ext4 defaults 00
/dev/mapper/testvg-testLV2 /lv2 ext4 defaults 0 0
/dev/mapper/testvg-testLV3 /lv3 ext4 defaults 0 0
https://404notonc.tistory.com/182
리눅스 - /etc/fstab
정의리눅스에서 사용하고 있는 파일시스템에 대한 다양한 정보를 저장하고 있는 파일이다. 파티션 정보를 변경하거나 디스크를 추가 할때 이 파일에 등록해야만 자동 마운트가 된다.리눅스에
404notonc.tistory.com
설정법 시나리오2 : 기존 사용하고 있던 LVM 디스크의 공간을 재할당하는 경우

현재 디스크와 파티션을 볼 수 있는 fdisk -l 통해 디스크 확인 시 실제 디스크와 밑의 사용하고 있는 lvm을 보여준다. 나는 lvm 설정을 따로 해준적이 없는데 생성되어 있는걸로 봐서 18.04. 우분투 부터는 기본으로 설치되어 있는 것 같다.

현재 예전에 작성했던 글을 수정해서 추가 정보를 적는 중인데 기존에 자료화면으로 담아논 사진엔 LVM이 디스크의 모든 공간을 활용하고 있다.. 아무튼 아래에서는 파티션 크기를 확인하고 기존 LVM의 크기를 변경하는 법을 확인해보겠다.
파티션 확인
df -h
#disk 사용량 확인
# Filesystem Size Used Avail Use% Mounted on
# tmpfs 13G 2.2M 13G 1% /run
# /dev/mapper/ubuntu--vg-ubuntu--lv 98G 29G 65G 31% /
# tmpfs 63G 0 63G 0% /dev/shm
# tmpfs 5.0M 4.0K 5.0M 1% /run/lock
# /dev/nvme0n1p2 2.0G 340M 1.5G 19% /boot
# /dev/nvme0n1p1 1.1G 6.1M 1.1G 1% /boot/efi
# tmpfs 13G 8.0K 13G 1% /run/user/1000
lsblk
#블록 스토리지 리스트 확인
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# loop0 7:0 0 63.3M 1 loop /snap/core20/1822
# loop1 7:1 0 63.5M 1 loop /snap/core20/2015
# loop2 7:2 0 111.9M 1 loop /snap/lxd/24322
# loop3 7:3 0 49.8M 1 loop /snap/snapd/18357
# loop4 7:4 0 40.9M 1 loop /snap/snapd/20290
# sda 8:0 0 3.6T 0 disk
# ├─sda1 8:1 0 16M 0 part
# └─sda2 8:2 0 3.6T 0 part
# nvme0n1 259:0 0 1.9T 0 disk
# ├─nvme0n1p1 259:1 0 1G 0 part /boot/efi
# ├─nvme0n1p2 259:2 0 2G 0 part /boot
# └─nvme0n1p3 259:3 0 1.9T 0 part
# └─ubuntu--vg-ubuntu--lv 253:0 0 100G 0 lvm /
PV 상태 확인
pvcreate [마운트포인트]
#fdisk로 파티션닝한 디스크를 PV로 변환하는 명령어
pvscan
#pysical volume을 모두 보여주는 명령어
# PV /dev/nvme0n1p3 VG ubuntu-vg lvm2 [1.86 TiB / 1.76 TiB free]
# Total: 1 [1.86 TiB] / in use: 1 [1.86 TiB] / in no VG: 0 [0 ]
# -> free 라고 적혀있는 부분이 사용하지 않고 있는 디스크 용량을 뜻함
VG 상태확인
vgdisplay [VG 이름]
#VG 생성확인
# VG Size 1.86 TiB
-> VG 에는 전체 디스크의 크기가 인식되는 것을 확인
LV 확장
lvextend -l +100%FREE -n [lvm 마운트 포인트]
#LVM의 LV 확장 명령어
lvscan
#생성된 LV 확인
resize2fs [LVM]
#인식된 디스크를 파일시스템에서 인식될 수 있도록 하는 명령어
'서버' 카테고리의 다른 글
| 도커와 컨테이너 (0) | 2023.03.10 |
|---|---|
| 베어메탈 (0) | 2023.03.10 |
| ftp 상위디렉토리 접근 보안 (0) | 2023.01.03 |
| cron , crontab (0) | 2022.11.09 |
| history 명령어 로그 근데 SSH를 곁들인 (1) | 2022.09.04 |