WiseN

부팅시마다 Instance Store 볼륨을 자동으로 마운트하기

Apr 04,2018   |   AWS

작성자_최준승

페이스북 공유하기 트위터 공유하기
Blog thumbnail

여기서 다루는 내용



· Instance Store 기본 특성
· Instance Store 볼륨을 설정하는 일반적인 과정
· Instance Store 볼륨을 부팅시마다 자동 마운트하기







Instance Store 기본 특성






안녕하십니까, GS네오텍 최준승입니다.

오늘은 아주 간단한 팁 하나를 소개해 드리려고 합니다.

만일 여러분들이 EC2에 Instance Store 볼륨을 붙여 사용하고 있다고 합시다. ※ 물론 안써도 되는데.. 필요하다면 공짜니 안쓸 이유가..
여러분도 잘 아시다시피 EBS 볼륨은 호스트에 독립적이고, Instance Store 볼륨은 호스트에 종속적입니다.
그래서 EC2에 STOP/START가 발생하면, EBS와 달리 Instance Store의 데이터는 시원하게 날아가 버리지요. 새로 받았으니까요.

문제는 데이터만 날아가는 것이 아니라 파일시스템을 만들고 마운트하는 과정까지 초기화된다는 것입니다.
데이터야 나중에 다시 부어서 써먹은 다음에 다시 버리면 된다지만. 마운트하는 과정을 수동으로 반복하는 것은 귀찮습니다.
더구나 EC2는 수동으로 STOP/START할 수도 있지만, 제 의지와 무관하게 유지관리 작업으로 STOP/START 동작이 발생할 수도 있습니다.

오늘 포스팅에서는 Instance Store 볼륨을 설정하는 일반적인 과정을 먼저 살펴보고
이 과정을 부팅시마다 자동으로 수행하도록 설정하는 방법을 간단하게 보여드리도록 하겠습니다.





Instance Store 볼륨을 설정하는 일반적인 과정






오늘 포스팅은 아래 환경에서 진행합니다.


  • Region: Seoul Region

  • AMI: Amazon Linux 2

  • Instance Type: i3.large ※ Instance Store로 NVMe SSD 1 x 475GB 기본 제공





위처럼 8GB짜리 EBS 볼륨과 크기를 알 수 없는 Instance Store 볼륨을 하나씩 할당받았습니다.


$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
mqxvda1 202:1 0 8G 0 part /
nvme0n1 259:0 0 442.4G 0 disk


접속해보니 이름이 nvme0n1인 블록 디바이스가 하나 있네요. 마운트는 안된 모양입니다.


$ sudo file -s /dev/nvme0n1
/dev/nvme0n1: data


상태를 확인합니다. 파일 시스템을 잡아줘야 겠네요.


$ sudo mkfs -t ext4 /dev/nvme0n1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
28999680 inodes, 115966796 blocks
5798339 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2264924160
3540 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


ext4 형식으로 만들었습니다.


$ sudo mkdir /mnt2
$ sudo mount /dev/nvme0n1 /mnt2
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
mqxvda1 202:1 0 8G 0 part /
nvme0n1 259:0 0 442.4G 0 disk /mnt2


마운트할 경로를 하나 만들고, mount 명령어로 해당 경로에 마운트합니다. 이제 Instance Store 볼륨을 사용할 준비가 완료되었네요.





Instance Store 볼륨을 부팅시마다 자동 마운트하기






자, 이제 이 상태에서 해당 인스턴스를 중지(STOP)했다가 다시 시작(START) 해보겠습니다.


$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
mqxvda1 202:1 0 8G 0 part /
nvme0n1 259:0 0 442.4G 0 disk


역시 예상대로 모조리 초기화되었네요.


$ vim mountis.sh
$ more mountis.sh
#!/bin/bash
sudo mkfs -t ext4 /dev/nvme0n1
sudo mount /dev/nvme0n1 /mnt2
$ chmod +x ./mountis.sh


자동화 작업을 구성하기 위해 초기화 관련 스크립트를 위와 같이 만든 후 스크립트에 실행권한을 추가했습니다.
※ 마운트할 볼륨이 여러개인 경우, 각각 디바이스에 대해 내용을 추가합니다
※ 주의: 반드시 마운트 대상 경로가 사전에 생성되어 있어야 합니다


$ ./mountis.sh
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
[중략]
Writing superblocks and filesystem accounting information: done
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
mqxvda1 202:1 0 8G 0 part /
nvme0n1 259:0 0 442.4G 0 disk /mnt2


테스트해보니 잘 동작하네요.

이제 이 스크립트가 부팅때마다 실행되도록 rc.local에 등록해보겠습니다.
※ 주의: 이 부분은 사용자의 환경에 따라 다르게 구현될 수 있으며, 이 예시는 그 중 일부입니다


$ sudo vim /etc/rc.d/rc.local
$ tail -n 2 /etc/rc.d/rc.local
touch /var/lock/subsys/local
/home/ec2-user/mountis.sh
$ sudo chmod +x /etc/rc.d/rc.local


rc.local도 기본값에 실행권한이 없어서, 실행권한도 추가했습니다.

자, 이제 다시 STOP/START를 수행한 후 접속해 보겠습니다.

Amazon Linux 2 AMI
https://aws.amazon.com/amazon-linux-2/
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
mqxvda1 202:1 0 8G 0 part /
nvme0n1 259:0 0 442.4G 0 disk /mnt2


재시작 후에도 해당 볼륨이 잘 마운트 되어 있는걸 확인할 수 있습니다.

오늘 포스팅에서는 Linux 환경에서 Instance Store를 부팅 시점마다 재설정하는 내용 예시를 간단히 살펴봤습니다.
기타 정보는 이 링크에서 확인하시면 됩니다. 그럼 끝!