EC2 を運用中にディスクが足りなくなったので EBS ボリュームを追加とアタッチをして、ついでにデタッチと削除したときのメモ。
EBS ボリュームの追加
EC2 インスタンスが追加の EBS ボリュームを使うためには EBS ボリュームの作成と EC2 インスタンスへのアタッチをしていく。
追加する EBS ボリュームの作成
今回は汎用 SSD (gp2) の EBS ボリュームを作成して EC2 インスタンスへアタッチしていく。
作業開始前の EC2 インスタンスの状態。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / $ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 475M 0 475M 0% /dev tmpfs 492M 0 492M 0% /dev/shm tmpfs 492M 404K 492M 1% /run tmpfs 492M 0 492M 0% /sys/fs/cgroup /dev/xvda1 8.0G 1.5G 6.6G 19% / tmpfs 99M 0 99M 0% /run/user/1000
EBS ボリュームを作成する。 EBS ボリュームは追加先の EC2 インスタンスと同じアベイラビリティゾーンに作成する必要があるので追加先の EC2 インスタンスが稼働しているアベイラビリティゾーンを確認しておくこと。
$ aws ec2 create-volume \ --availability-zone <アベイラビリティゾーン> \ --no-encrypted --volume-type gp2 \ --size 30
EBS ボリュームを EC2 インスタンスへアタッチ
作成した EBS ボリュームを EC2 インスタンスへアタッチする。
$ aws ec2 attach-volume --device /dev/xvdf --instance-id <EC2 インスタンス ID> --volume-id <作成した EBS ボリュームの ID> { "AttachTime": "2020-02-13T13:57:31.721Z", "InstanceId": "<EC2 インスタンス ID>", "VolumeId": "<作成した EBS ボリュームの ID>", "State": "attaching", "Device": "/dev/xvdf" }
EBS ボリュームの状態が in-use
になると EC2 インスタンスから見えるようになる。
$ aws ec2 describe-volumes --volume-ids <作成した EBS ボリュームの ID> | jq -r '.Volumes[].State' in-use
EBS ボリュームのファイルシステムの作成
作ったばかりの EBS ボリュームはファイルシステムがないのでファイルシステムを作成していく。
ファイルシステムを作成する前に今どうなってるか確認。
lsblk コマンドを実行すると EC2 インスタンスの /dev/xvdf
にアタッチした EBS ボリュームが見えるようになっている。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 30G 0 disk $ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 475M 0 475M 0% /dev tmpfs 492M 0 492M 0% /dev/shm tmpfs 492M 408K 492M 1% /run tmpfs 492M 0 492M 0% /sys/fs/cgroup /dev/xvda1 8.0G 1.5G 6.6G 19% / tmpfs 99M 0 99M 0% /run/user/1000
file コマンドで /dev/xvdf
を見るとまだファイルシステムを作成していないので data
とだけ出力される。
$ sudo file -s /dev/xvdf /dev/xvdf: data
mkfs コマンドで /dev/xvdf
にファイルシステムを作成していく。
$ sudo mkfs -t xfs /dev/xvdf meta-data=/dev/xvdf isize=512 agcount=4, agsize=1966080 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0 data = bsize=4096 blocks=7864320, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=3840, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
file コマンドで /dev/xvdf
を見ると XFS ファイルシステムが作成されていることが分かる。
$ sudo file -s /dev/xvdf /dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
EBS ボリュームのマウント
マウントポイントのディレクトリを作成してボリュームをマウントしていく。
今回は /dev/xvdf
を /data
にマウントしていく。
$ sudo mkdir /data $ sudo mount /dev/xvdf /data
df コマンドを実行すると /dev/xvdf
が /data
にマウントされているのが分かる。
$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 475M 0 475M 0% /dev tmpfs 492M 0 492M 0% /dev/shm tmpfs 492M 464K 492M 1% /run tmpfs 492M 0 492M 0% /sys/fs/cgroup /dev/xvda1 8.0G 1.5G 6.6G 19% / tmpfs 99M 0 99M 0% /run/user/1000 tmpfs 99M 0 99M 0% /run/user/0 /dev/xvdf 30G 63M 30G 1% /data
EBS ボリュームを作成して EC2 インスタンスから使えるようにする手順は以上。
EBS ボリュームの削除
EC2 インスタンスが使っている EBS ボリュームを削除するためには EBS ボリュームのアンマウントと EC2 インスタンスからのデタッチをしていく。 必要なデータが EBS ボリュームに入っているときは作業を進める前にデータを別の場所に移したりコピーなど取得しておく。
EBS ボリュームのアンマウント
$ sudo umount -d /dev/xvdf $ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 475M 0 475M 0% /dev tmpfs 492M 0 492M 0% /dev/shm tmpfs 492M 464K 492M 1% /run tmpfs 492M 0 492M 0% /sys/fs/cgroup /dev/xvda1 8.0G 1.5G 6.6G 19% / tmpfs 99M 0 99M 0% /run/user/1000 tmpfs 99M 0 99M 0% /run/user/0
EBS ボリュームのデタッチ
$ aws ec2 detach-volume --volume-id <削除する EBS ボリュームの ID> { "AttachTime": "2020-02-13T13:58:31.000Z", "InstanceId": "<EC2 インスタンスの ID>", "VolumeId": "<削除する EBS ボリュームの ID>", "State": "detaching", "Device": "/dev/xvdf" }
EBS ボリュームが EC2 インスタンスからデタッチが完了すると EBS ボリュームの状態が available
になる。
$ aws ec2 describe-volumes --volume-ids <削除する EBS ボリュームの ID> | jq -r '.Volumes[].State' available
EBS ボリュームの削除
$ aws ec2 delete-volume --volume-id <削除する EBS ボリュームの ID>
EBS ボリュームを EC2 インスタンスからデタッチして削除する手順は以上。