LVM에 대해 이해를 끝내셨다면, 이제 실제 AWS EC2 Linux 인스턴스에 적용 해볼 차례입니다.
우선 EC2 콘솔에 접속하여 인스턴스를 생성한 후, 임의의 EBS 볼륨을 추가로 생성하여 EC2 인스턴스에 attach 해줍니다.


여기서는 root volume 8GiB 와 추가 volume 100GiB 로 구성하였습니다.
1. PV 만들기
이제 인스턴스에 접속하여 줍니다. 인스턴스에 lvm2이 설치되어 있지 않은 경우 lvm2을 설치해 줍니다. (아마존 리눅스에서는 sudo yum install lvm2 명령을 사용합니다.)

lsblk 명령어로 블록 스토리지 현황을 볼 수 있습니다.
LVM을 사용하기 위해 블록 디바이스들을 초기화 해주어야 합니다. 이 때 pvcreate 명령어를 사용하는데, pvcreate는 디스크 초기화나 LVM에 사용될 파티션을 만드는데 쓰입니다. 또한 완전한 물리디스크나 물리디스크 위의 파티션 초기화에도 쓸 수 있습니다. 여기서는 xvdf에 pv를 생성해보겠습니다.( sudo를 일일히 적기 불편하니 sudo -s 명령으로 관리자 권한을 유지하도록 하겠습니다.)

성공적으로 pv가 생성되었습니다.

pvdisplay 로 생성된 pv를 확인해줍니다.
2. VG와 LV 만들기
먼저 VG를 만들어 보겠습니다.

vgcreate [vg이름] [블록스토리지 경로] 를 입력하여 줍니다.
여기서는 /dev/sdf 를 사용하였는데, /dev/xvdf 로 사용해도 무관합니다.

vgdisplay 로 VG가 잘 만들어 졌는지 확인해 줍니다. 이 때 VG UUID가 PV UUID와 다른 것을 확인할 수 있습니다. 이전 글에서 알아본 것처럼 PE Size가 4MiB인 것도 확인할 수 있습니다.
여기서 Total PE에 잠깐 주목해 봅시다. 100GiB가 총 Size임에도 PE의 개수는 25600개(= 102400MB = 100GiB) 가 아닌 25599개 입니다. PE 한 개가 빠진 것을 알 수 있습니다. 그 이유는 빠진 1개의 PE을 헤더나 메타데이터를 저장할 공간으로 할당하기 때문입니다. 따라서 다음 과정인 LV를 생성할 때 100GiB를 전부 생성할 수는 없게 됩니다. ( GB와 GiB의 차이는 여기를 참고해 주세요.)
이제 LV 2개를 생성하겠습니다. 바로 위에서 언급했던 것처럼, 100GiB를 전부 LV로 할당할 수 는 없으므로 하나는 50GiB(=51200MB), 나머지는 49.996GiB(=51196MB)로 생성하겠습니다.
(PE 계산이 번거롭고 유휴 공간이 조금 생겨도 괜찮다면 49.5GiB 정도로 간단하게 정해주어도 상관없습니다.)

lvcreate -n [LV이름] -L [LV용량] [VG이름]
ndslv2 LV는 정확한 할당을 위해 MB 단위로 입력해주었습니다.
※ 만약 이런 것을 무시하고 ndslv2를 50GiB로 설정한다면 아래의 텍스트를 보게 됩니다.

전부 생성했다면 lvdisplay로 확인해줍니다.

Path 에는 LV가 만들어진 경로가 표시됩니다. LV Size에는 똑같이 50.00 GiB로 표시되어 있지만 Current LE (PE가 LE로 매핑되었습니다.) 의 크기가 다른 것을 확인할 수 있습니다.
(option) lsblk 로 블록 디바이스를 확인해봅니다.

xvdf 블록 디바이스가 vgebs-ndslv1 과 vgebs-ndslv2로 Logical Volume 이 생성된 것을 볼 수 있습니다.
ls /dev/mapper를 실행하면 새로 만든 VG에 LV 2개가 매핑된 것이 보입니다.

하지만 실제 LV의 위치는 /dev/vgebs 에 있습니다.

3. Mount 하기
Mount란 실제로 디바이스를 사용할 수 있도록 파일시스템과 디렉토리를 할당하는 것을 뜻합니다.
윈도우에선 CD나 USB를 넣으면 내컴퓨터에 새로운 드라이브가 생기지만, 리눅스는 드라이브 개념이 따로 없으므로 Mount를 해주어야 합니다.
마운트 명령어는 아래와 같이 사용합니다.
mount [option] [device] [directory]
option에는 여러가지가 있지만 이 글에서는 다루지 않고 넘어가겠습니다.
우선 파일시스템을 생성해줍니다.

mkfs.[파일시스템] [LV의 경로] 를 입력해줍니다.
ndslv1 은 파일시스템을 ext4, ndslv2는 파일시스템을 ext3 로 생성하였습니다. (파일 시스템에 대한 설명은 여기서는 다루지 않습니다.)
다음으로 LV를 마운트할 디렉토리를 만들어줍니다.

이제 만들어둔 디렉토리에 마운트를 해줍니다.

lsblk 명령으로 마운트포인트에 마운트된 경로가 보이는 것을 확인할 수 있습니다.
이제 EC2 인스턴스를 재부팅해도 마운트를 계속 유지하고 싶다면, /etc/fstab 에 해당 순서대로 문자열을 추가합니다. ( 항목별 내용은 여기를 참고하세요.)
[device_name] [mount_point] [file_system_type] [fs_mntops] [fs_freq] [fs_passno]
여기서 [device_name]은 LV 경로를 써주는 것보다 LV의 UUID를 적는 것이 좋습니다. 만약 LV의 경로가 바뀌게 되면 fstab 설정이 깨지게 되는데, UUID를 사용하면 그러한 문제를 방지할 수 있기 때문입니다.
blkid [LV경로]를 이용하여 LV의 UUID를 따로 저장해둡니다.

nano /etc/fstab 으로 내용을 적어줍니다.

Ctrl + O 로 저장하고, Ctrl + X 로 종료해 줍니다.
이제 인스턴스를 정지하고 다시 시작해도 마운트가 풀리지 않습니다.
다음 글에서는 이렇게 만든 LV의 용량이 부족할 때 용량을 확장하거나, LV의 용량을 축소하고 새로운 LV를 만드는 방법에 대해 알아보겠습니다.
SA팀 황문주