EC2インスタンスのインスタンスストアボリュームにSWAP領域を作る話
初投稿です。
先日とある事情で、AWSのEC2インスタンスのインスタンスストアボリュームにSWAP領域を作ったので
その手順のメモです。
抜けているところがあったら、ご容赦ください。
↓こんな感じのAmazon Linux2のEC2インスタンスを、インスタンスストアボリューム付きのインスタンスタイプでログイン。
c5d.large
でたてているのは、インスタンスストアボリューム付きのインスタンスタイプでは一番安いからです。
[ec2-user@ip-***-**-**-** ~]# curl http://169.254.169.254/latest/meta-data/instance-type
c5d.large
[ec2-user@ip-***-**-**-** ~]# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
[ec2-user@ip-***-**-**-** ~]#
いちいちsudoするのが面倒なので、rootにスイッチします。
スイッチ後、念のため、インスタンスストアボリューム(nvme1n1)が認識されていることを確認します。
[ec2-user@ip-***-**-**-** ~]$ sudo -i
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 46.6G 0 disk
nvme0n1 259:1 0 8G 0 disk
├─nvme0n1p1 259:2 0 8G 0 part /
└─nvme0n1p128 259:3 0 1M 0 part
マウントされていないこと、SWAP領域がないことも念のため、確認します。
[root@ip-***-**-**-** ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 400K 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs 8.0G 1.2G 6.8G 16% /
tmpfs tmpfs 371M 0 371M 0% /run/user/1000
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# free
total used free shared buff/cache available
Mem: 3793980 71192 3307076 400 415712 3482164
Swap: 0 0 0
インスタンスストアボリュームをSWAP領域に指定します。
(インスタンスストアボリューム全ての領域をSWAP領域にしたいので、ボリュームごとスワップ領域化します)
[root@ip-***-**-**-** ~]# mkswap /dev/nvme1n1
Setting up swapspace version 1, size = 46.6 GiB (49999994880 bytes)
no label, UUID=c2ac66b7-9d67-4dc4-9dea-652b5d94a504
SWAP領域を有効化します。
[root@ip-***-**-**-** ~]# swapon /dev/nvme1n1
[root@ip-***-**-**-** ~]# swapon -s
Filename Type Size Used Priority
/dev/nvme1n1 partition 48828120 0 -2
[root@ip-***-**-**-** ~]#
このままではEC2インスタンス再起動(停止→起動)時にSWAP設定が解除された状態になってしまうので
/etc/cloud/cloud.cfgと /etc/fstabを編集します。
[root@ip-***-**-**-** ~]# vi /etc/cloud/cloud.cfg
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# cat /etc/cloud/cloud.cfg
(略)
mounts:
- [ ephemeral0, swap, swap ,"defaults", "0", "0"] ← これに修正
# vim:syntax=yaml
[root@ip-172-31-33-88 ~]# vi /etc/fstab
[root@ip-172-31-33-88 ~]# cat /etc/fstab
#
UUID=a1e1011e-e38f-408e-878b-fed395b47ad6 / xfs defaults,noatime 1 1
/dev/nvme1n1 none swap sw,nobootwait,comment=cloudconfig 0 2 ← これに修正
また、起動時にSWAP領域を作成・有効化するコマンドも流さなければならないので、 /etc/rc.d/rc.localを編集します。
[root@ip-***-**-**-** ~]# vi /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]# cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
mkswap /dev/nvme1n1 ← 追記
swapon /dev/nvme1n1 ← 追記
[root@ip-***-**-**-** ~]#
/etc/rc.d/rc.localに実行権限をつけて、起動時に実行するようにします。
[root@ip-***-**-**-** ~]# ls -la /etc/rc.d/rc.local
-rw-r--r-- 1 root root 513 Aug 11 16:25 /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]# chmod +x /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]# ls -la /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 513 Aug 11 16:25 /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]#
↓EC2インスタンス停止→起動時に時にSWAP領域ができていることを確認します。
[root@ip-***-**-**-** ~]# free
total used free shared buff/cache available
Mem: 3793980 106464 3522712 404 164804 3479892
Swap: 48828120 0 48828120
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# swapon -s
Filename Type Size Used Priority
/dev/nvme1n1 partition 48828120 0 -2
[root@ip-***-**-**-** ~]#