리눅스 서버를 활용하다 보면 사용 중인 디스크의 용량이 부족해지는 경우가 발생합니다.
불필요한 파일을 정리하여 사용량을 확보하는 경우도 있지만,
정리가 불가능할 때 주로 사용하는 방식이 디스크 증설입니다.
이 중 LVM 구성을 통해 디스크를 증설하는 방식에 대해 알아보겠습니다.
LVM(Logical Volume Manager)
두 개 이상의 디스크를 하나로 연결하여 운영할 수 있도록 구성하는 것을 의미합니다.
기존에 사용 중인 100GB 디스크에 50GB를 추가하고 싶다면,
LVM을 통해 두 개의 디스크를 하나로 연결하여 150GB로 사용할 수 있습니다.
시작하기에 앞서, LVM 구성을 할 때 고려해야 할 점이 있습니다.
기본 디스크
기본 디스크는 OS와 관련된 시스템 파일도 포함되어 있는 디스크를 의미합니다.
(ex. 리눅스 서버의 /(최상위) 디렉토리)
만약, 기본 디스크에 추가 디스크를 LVM으로 연결하였다가, 추가 디스크가 삭제되었을 경우,
기본 디스크에 있는 시스템 파일들도 삭제 및 복구가 불가능한 상황이 발생할 수 있어 권장하지 않습니다.
이미 사용 중인 디스크
LVM 증설 방식은 이미 LVM 구성 상태의 디스크에 한해 증설이 가능합니다.
LVM 구성 상태가 아닌 디스크에 LVM 구성을 하게 될 경우 디스크 포맷 과정이 포함되어 있어 기존의 파일이 삭제됩니다.
그렇기 때문에, 초기 구성 때부터 디스크는 LVM 구성으로 설정하는 것을 권장합니다.
디스크 정보 확인
서버에 신규 디스크를 하나 생성하여 연결하였다고 가정하겠습니다.
아직 디스크에 어떠한 파일도 저장되어 있지 않기 때문에, 바로 LVM 구성으로 설정할 수 있습니다.
# fdisk -l
...
Disk /dev/xvdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
/dev/xvdb 파일 시스템명으로 서버에서 정상적으로 인식하고 있습니다.
해당 파일 시스템을 활용하겠습니다.
파티션 생성
(Enter)로 되어 있는 부분은 엔터 처리해주시면 되고, 나머지는 아래의 가이드에 맞게 진행하면 됩니다.
또한, Dex Code에서 입력하는 8e는 서버에서 해당 파티션을 Linux LVM 시스템으로 인식할 수 있도록 하는 코드입니다.
# fdisk /dev/xvdb
...
Command (m for help) : n
...
Select (default p) : (Enter)
...
Partition number (1-4, default 1) : (Enter)
First sector (2048-20971519, default 2048) : (Enter)
...
Last sector, +sectors or +size(K,M,G) (2048-20971519) : (Enter)
...
Command (m for help) : t
...
Dex Code (type L to list all codes): 8e
...
Command (m for help) : p
...
Command (m for help) : w
파티션 확인
첫 번째 과정과 동일하게 디스크 정보를 조회하면 새로 생성한 파티션 정보가 출력됩니다.
System이 Linux LVM으로 되어 있는지 확인합니다.
# fdisk -l
...
Disk /dev/xvdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Device Boot Start End Blocks Id System
/dev/xvdb1 2048 4095 1024 83 Linux LVM
PV, VG, LV 생성
서버에서 생성한 파티션을 연결하여 사용할 수 있도록 PV, VG, LV 순으로 생성합니다.
PV(Physical Volume)
리눅스 서버의 물리적인 볼륨으로, /dev/xvdb1 와 같은 파티션을 의미합니다.
VG(Volume Group)
물리적인 볼륨(PV)을 하나의 그룹으로 묶은 것으로, VG에 그룹화된 볼륨끼리 용량을 증설할 수 있습니다.
LV(Logical Volume)
볼륨의 그룹을 서버에서 사용할 수 있도록 합니다.
# pvcreate /dev/xvdb1
# vgcreate DataVG /dev/xvdb1
# lvcreate -l 100%FREE -n DataLV DataVG
VG, LV를 생성할 때 DataVG, DataLV는 각각의 이름이며, 임의의 이름으로 설정하여도 됩니다.
또한, 생성한 PV, VG, LV는 아래의 명령어를 통해 확인할 수 있습니다.
# pvscan
# vgscan
# lvscan
디스크 포맷
LV까지 연결된 디스크를 실제 디렉토리와 연결하여 사용하기 위해선 포맷을 진행해야 합니다.
파일 시스템 유형 별로 포맷 명령어가 다르기 때문에 참고해서 진행해야 합니다.
//ext4
# mkfs.ext4 /dev/DataVG/DataLV
//xfs
# mkfs.xfs /dev/DataVG/DataLV
디스크 마운트
LV까지 할당된 디스크를 디렉토리에 마운트합니다.
df -h 명령어를 통해 파일 시스템에도 반영이 되었다면 LVM 구성의 디스크로 정상적으로 사용할 수 있습니다.
# mount /dev/DataVG/DataLV /data
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/DataVG/DataLV 10G 1.8G 8.2G 2% /data
...
이제 LVM 구성의 디스크를 통해 용량 증설을 해보겠습니다.
디스크 정보 확인
새로운 10GB 디스크를 하나 더 생성하여 서버에 아래와 같이 조회가 되고 있습니다.
아까와는 다른 별개의 디스크이기 때문에 /dev/xvdc 로 확인됩니다.
# fdisk -l
...
Disk /dev/xvdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
파티션 생성
과정은 이전과 비슷하지만, 용량 증설을 목적으로 생성한 디스크에는 8e(Linux LVM) 코드를 적용하지 않습니다.
# fdisk /dev/xvdc
...
Command (m for help) : n
...
Select (default p) : (Enter)
...
Partition number (1-4, default 1) : (Enter)
First sector (2048-20971519, default 2048) : (Enter)
...
Last sector, +sectors or +size(K,M,G) (2048-20971519) : (Enter)
...
Command (m for help) : w
PV 생성
이번에는 PV까지만 생성합니다.
이는 PV을 생성하고, 아까 생성한 VG에 그룹화하기 위해 진행하는 과정입니다.
# pvcreate /dev/xvdc1
VG 그룹화
아까 생성한 VG에 새로 생성한 PV를 그룹화합니다.
# vgextend DataVG /dev/xvdc1
이후 PV가 정상적으로 그룹화가 되었는지 확인해야 합니다.
이번에는 vgscan 명령어보다 더 상세하게 정보를 확인할 수 있는 명령어로 확인하고,
Metadata Areas, VG Size 값이 늘어났는지 확인합니다.
# vgdisplay
LV 확장
이제 기존에 생성하였던 LV에 증가한 용량을 반영합니다.
LV에도 반영이 되어야 파일 시스템에서 증가한 용량으로 서비스 운영이 가능합니다.
# lvextend -l +100%FREE -n /dev/DataVG/DataLV
# resize2fs /dev/DataVG/DataLV
디스크 증설 확인
아래와 같이 마운트된 디스크의 용량이 증가하였다면 디스크 증설 작업도 완료입니다.
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/DataVG/DataLV 20G 1.8G 18.2G 1% /data
...
LVM 구성은 리눅스 시스템에서 디스크의 용량 관리를 보다 효율적으로 수행할 수 있도록 도와줍니다.
무분별한 디스크 마운트, 복잡한 디스크 사용량 확보 작업 등을 수행하지 않고, 단기간에 빠른 사용량 확보가 가능합니다.
서버에 추가 디스크를 연결하여 사용하실 계획이 있으시다면,
LVM 구성을 통해 디스크 용량 증설에 대비하시는 것을 추천합니다.