はじめに
AWS
の EC2
インスタンスに EBS
ボリュームをアタッチする方法をメモしておく。
ユースケース
EC2
インスタンスが 2 台あり、どちらもディスクの容量を上げたくないが、一時ファイルの置き場所(例えばバックアップのファイル)を確保したい。
準備
- アタッチする
EC2
インスタンスを 2 台用意
※アタッチすることを検証するだけであれば1台で問題ない。
デタッチして、他のEC2
インスタンスにアタッチすることをしたいので2台でやる。
EC2 インスタンスの作成
どちらも下記のような構成
項目 | 設定値 |
---|---|
OS | AmazonLinux2023 |
アーキテクチャ | 64 ビット(Arm) |
インスタンスタイプ | t4g.nano |
ストレージ | 8GB(gp3) |
EBS ボリュームをアタッチする
EBS ボリュームを作成する
メニューから Elastic Block Store
-> ボリューム
を選択する。
ボリュームの作成
を押す
項目 | 設定値 |
---|---|
ボリュームタイプ | 汎用 SSD(gp3) |
サイズ (GiB) | 10 |
アベイラビリティーゾーン | ap-northeast-1d |
※アベイラビリティゾーンをあわせないと、アタッチできないので注意
作成が完了すると、EBS
ボリュームは 使用可能
になっている。
EC2インスタンスにログインする
lsblk
コマンドでボリュームを確認する。
[ec2-user@ip-172-31-38-101 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 10M 0 part
df -h
で容量の確認
[ec2-user@ip-172-31-38-101 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 468K 86M 1% /run
/dev/nvme0n1p1 8.0G 1.7G 6.3G 21% /
tmpfs 215M 0 215M 0% /tmp
tmpfs 43M 0 43M 0% /run/user/1000
[ec2-user@ip-172-31-38-101 ~]$
ボリュームのアタッチ
EC2
コンソールのメニューから Elastic Block Store
→ ボリューム
を選択する。
先ほど作成したボリュームを選択し、「アクション
」から「ボリュームのアタッチ
」を選択する。
インスタンス
で EC2-test-1
という名前のインスタンスを選択する。
選択できたら、ボリュームのアタッチ
を選択する。
注意
※EBS
のアベイラビリティゾーンが アタッチしたい EC2
インスタンスのアベイラビリティゾーンと異なると、表示されないので注意
アタッチできたら、先ほど作成したボリュームは 使用中
になっている。
EC2インスタンスでボリュームをマウントする
EC2
インスタンスに戻る。
再度 lsblk
コマンドを実行する。
[ec2-user@ip-172-31-38-101 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 10M 0 part
nvme1n1 259:3 0 10G 0 disk
10G
の nvme1n1
という名前のボリュームが増えていることを確認
ファイルシステムが作成済みかどうかを確認する。/dev/nvme1n1
に関しては環境によって異なる可能性がある。 (/dev/[デバイス名]
)
sudo file -s /dev/nvme1n1
[ec2-user@ip-172-31-38-101 ~]$ sudo file -s /dev/nvme1n1
/dev/nvme1n1: data
今回は、data
とでてきたのでファイルシステムは存在していない。
そのためファイルシステムを作成する必要がある。
ext4
のファイルシステムを作成する。
sudo mkfs -t ext4 /dev/nvme1n1
[ec2-user@ip-172-31-38-101 ~]$ sudo mkfs -t ext4 /dev/nvme1n1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: ae928447-6ec0-4c1a-9571-58b81da7677d
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
再度 file
コマンドで確認してみる。
[ec2-user@ip-172-31-38-101 ~]$ sudo file -s /dev/nvme1n1
/dev/nvme1n1: Linux rev 1.0 ext4 filesystem data, UUID=ae928447-6ec0-4c1a-9571-58b81da7677d (extents) (64bit) (large files) (huge files)
ext4
のファイルシステムになっていることを確認
マウント先のディレクトリを作成する。
sudo mkdir /ebs
マウントをする
sudo mount /dev/nvme1n1 /ebs
df -h
で確認してみる。
[ec2-user@ip-172-31-38-101 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 476K 86M 1% /run
/dev/nvme0n1p1 8.0G 1.7G 6.3G 21% /
tmpfs 215M 0 215M 0% /tmp
tmpfs 43M 0 43M 0% /run/user/1000
/dev/nvme1n1 9.8G 24K 9.3G 1% /ebs
/ebs
のボリュームがマウントできていることを確認
これでOK!
/ebs
にファイルを書き込んで見る。
sudo su
echo "hogehoge" > /ebs/hoge.txt
cat /ebs/hoge.txt
hogehoge
デタッチして他のEC2インスタンスにアタッチする
ボリュームのデタッチ
先程アタッチした EC2
インスタンスからボリュームをアンマウントしておく。
sudo umount /ebs
[ec2-user@ip-172-31-38-101 ~]$ sudo umount /ebs
[ec2-user@ip-172-31-38-101 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 476K 86M 1% /run
/dev/nvme0n1p1 8.0G 1.7G 6.3G 21% /
tmpfs 215M 0 215M 0% /tmp
tmpfs 43M 0 43M 0% /run/user/1000
アンマウントできたら、EC2
コンソールに移動する。
EC2 コンソールのメニューから Elastic Block Store
→ ボリューム
を選択する。
先ほど作成したボリュームを選択し、「アクション
」から「ボリュームのデタッチ
」を選択する。
「デタッチ
」を選択する。
アタッチ&マウント
先程と同じ手順で、 EC2-test-2
にボリュームをアタッチする。
lsblk
コマンドで確認
[ec2-user@ip-172-31-37-191 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 10M 0 part
nvme1n1 259:3 0 10G 0 disk
file
コマンドで確認
すでにファイルシステムは作成されているはずなので確認する。
[ec2-user@ip-172-31-37-191 ~]$ sudo file -s /dev/nvme1n1
/dev/nvme1n1: Linux rev 1.0 ext4 filesystem data, UUID=ae928447-6ec0-4c1a-9571-58b81da7677d (extents) (64bit) (large files) (huge files)
マウント先を作成する。
sudo mkdir /ebs
sudo mount /dev/nvme1n1 /ebs
df -h
で確認
[ec2-user@ip-172-31-37-191 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 476K 86M 1% /run
/dev/nvme0n1p1 8.0G 1.7G 6.3G 21% /
tmpfs 215M 0 215M 0% /tmp
tmpfs 43M 0 43M 0% /run/user/1000
/dev/nvme1n1 9.8G 28K 9.3G 1% /ebs
先程別の EC2
インスタンスで書き込んだファイルがあるかを確認する。
[ec2-user@ip-172-31-37-191 ~]$ ls /ebs
hoge.txt lost+found
[ec2-user@ip-172-31-37-191 ~]$ sudo cat /ebs/hoge.txt
hogehoge
あるのでOK!
以上で終わり。
おまけ: 自動マウント
ボリュームを追加でアタッチしたあと、マウントについては再起動時に自動で実施されないので設定をする必要がある。
アンマウントしておく。
[ec2-user@ip-172-31-38-101 ~]$ sudo umount /ebs
[ec2-user@ip-172-31-38-101 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
tmpfs 219352 0 219352 0% /dev/shm
tmpfs 87744 480 87264 1% /run
/dev/nvme0n1p1 8311788 1742456 6569332 21% /
tmpfs 219352 0 219352 0% /tmp
tmpfs 43868 0 43868 0% /run/user/1000
/dev/nvme0n1p128 10202 1384 8818 14% /boot/efi
下記を追記する。/etc/fstab
/dev/nvme1n1 /ebs ext4 defaults,nofail 0 2
マウントする。
sudo mount -a
[ec2-user@ip-172-31-38-101 ~]$ sudo mount -a
[ec2-user@ip-172-31-38-101 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 480K 86M 1% /run
/dev/nvme0n1p1 8.0G 1.7G 6.3G 21% /
tmpfs 215M 0 215M 0% /tmp
tmpfs 43M 0 43M 0% /run/user/1000
/dev/nvme0n1p128 10M 1.4M 8.7M 14% /boot/efi
/dev/nvme1n1 9.8G 28K 9.3G 1% /ebs
念のため、再起動したあともマウントされるかを見てみる。
↑上記で設定も確認も問題ないのだが念のため。
sudo reboot
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Sat Jun 24 02:15:56 2023 from xxx.xxx.xxx.xxx
[ec2-user@ip-172-31-38-101 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 215M 0 215M 0% /dev/shm
tmpfs 86M 480K 86M 1% /run
/dev/nvme0n1p1 8.0G 1.7G 6.3G 22% /
tmpfs 215M 0 215M 0% /tmp
/dev/nvme1n1 9.8G 28K 9.3G 1% /ebs
tmpfs 43M 0 43M 0% /run/user/1000
マウントされているのでOK!
参考
- インスタンスへの Amazon EBS ボリュームのアタッチ
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-attaching-volume.html - Linux で Amazon EBS ボリュームを使用できるようにする
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html - EC2インスタンスに追加でEBSボリュームをアタッチする。
https://qiita.com/kooohei/items/d692931cbebf97006f96
おわりに
EBS
のボリュームマウントは比較的簡単にできるので忘れないようにメモ書きをした。
基本的に公式のリファレンスに載っているので都度見れば良いのだが、やったことの記録として残しておいた。
他のも一時ファイルを残すのであれば、S3をファイルストレージとしてマウントする(goofys
等を使用),EFSを使うなどもの考えられる。 EFS
は共有を目的としているので、時と場合によって使い分ける必要があるなと思った。