AWS EC2でインスタンスに複数のEBSボリュームをアタッチする
EC2インスタンスは、仮想マシンの資料するファイルストレージにEBSという仮想ディスクを使用.
柔軟に容量を追加したり、別のディスク(ボリューム)を追加したりできる.
すでに仮想マシンにアタッチ済みボリュームを格納することも可能だが、一時的に容量を追加したい時、格納するデータによって
ディスクを切り分けたい場合など、後から別のEBSボリュームをアタッチするのが割と役立つ.
AWS公式ドキュメント EBSマルチアタッチ
想定読者
- すでにAWS EC2インスタンスを起動・接続している
- EC2にS3ではなくディスク容量を追加したい方(機械学習など、大容量データを少しずつs3から持ってくると、実装面や速度面でネックとなるのでインスタンスのストレージで完結させたい方)
ローカルストレージの容量確認
dfコマンドで確認できる. -hで容量の安易をいい感じにしてくれる
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 31G 12G 20G 39% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 3.2G 840K 3.2G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/xvda15 105M 6.1M 99M 6% /boot/efi
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1000
ここではインスタンス作成時にEBSを32GBで作成していたため、空き容量は
/dev/root 31G 12G 20G 39% /
に記載のある通り、32G中う12GBを使用し残り20GB.
20GBもあれば大抵のことは可能だが、大きいデータを作業インスタンスから直接読み込みたい場合など、dist容量を追加で
呼び出したい時がある.
EBS ボリュームの作成
AWSからEC2を選択し、左側のメニューからボリュームを選択. 選択すると右上にボリュームの作成というボタンが表示されるので選択.
ボリュームタイプ、サイズ、アベイラビリティーゾーンを選択.
ボリュームタイプは汎用SSD(gp2かgp3)を選択しておけば良く、サイズは必要な容量を設定.
参考までにEBS料金で作成するボリュームのリージョンを見れば値段がわかる.
作成したら作成したボリュームを一覧画面から選択し、アクションからボリュームのアタッチを選択.
ここでは、サンプルとして、5GBのものを選択しているが、実際には先ほぼ作成したものを選べば良い.
設定したら、作成したボリュームをアタッチしたいインスタンスを設定.
ここで要注意なのが、アタッチするためにはインスタンスとEBSボリュームがリージョンだけでなく、アベイラビリティーゾーンまで一致している必要がある.
インスタンスを設定したら[ボリュームをアタッチ]ボタンを押す.
アタッチしたらEC2のインスタンスから、ボリュームをアタッチしたインスタンスを選択して、
インスタンス情報の画面から中央下部のストレージを選択。
ボリューム一覧が表示されているので、先ほどアタッチしたボリュームが表示されていることを確認.
下記画像では、デバイス名
アタッチしたボリュームを使用できるようにする
インスタンスに接続して、df -h
を実行
この段階ではまだアタッチしたボリュームは使用できない
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 31G 12G 20G 39% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 3.2G 840K 3.2G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/xvda15 105M 6.1M 99M 6% /boot/efi
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1000
lsblkコマンドでアタッチされたデバイスの確認
一番下の、xvdf
に50GB(先ほぼアタッチしたボリューム)が存在するが、まだ利用できない状態.
ここで、xvdf
はデバイス名で、都度変わることがあるので、後の作業は全てこのデバイス名の箇所を適宜
実行環境のものに置き換える必要あり.
(基本はxvdf.)
xvdf
は/dev/xvdf
に格納されているはず.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 24.4M 1 loop /snap/amazon-ssm-agent/6312
loop1 7:1 0 55.6M 1 loop /snap/core18/2679
loop2 7:2 0 63.3M 1 loop /snap/core20/1778
loop3 7:3 0 63.3M 1 loop /snap/core20/1822
loop4 7:4 0 111.9M 1 loop /snap/lxd/24322
loop5 7:5 0 49.8M 1 loop /snap/snapd/17950
xvda 202:0 0 32G 0 disk
├─xvda1 202:1 0 31.9G 0 part /
├─xvda14 202:14 0 4M 0 part
└─xvda15 202:15 0 106M 0 part /boot/efi
xvdf 202:80 0 50G 0 disk
sudo file -s /dev/xvdf
を実行する
$ sudo file -s /dev/xvdf
/dev/xvdf: data
ここでまだ、/dev/xvdf: data
とだけ表示されるはず. ここで、GI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
のような出力がされた場合、次のmkfs -t
コマンドはスキップ.
mkfs -t
コマンドを使用し、そのボリューム上にファイルシステムを作成します。
$ sudo mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
これでボリューム上にファイルシステムが作成されたので、適用な階層にマウントする
$ sudo mkdir /data
$ sudo mount /dev/xvdf /data
これでボリュームがマウントされたことが確認できる
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 24.4M 1 loop /snap/amazon-ssm-agent/6312
loop1 7:1 0 55.6M 1 loop /snap/core18/2679
loop2 7:2 0 63.3M 1 loop /snap/core20/1778
loop3 7:3 0 63.3M 1 loop /snap/core20/1822
loop4 7:4 0 111.9M 1 loop /snap/lxd/24322
loop5 7:5 0 49.8M 1 loop /snap/snapd/17950
xvda 202:0 0 32G 0 disk
├─xvda1 202:1 0 31.9G 0 part /
├─xvda14 202:14 0 4M 0 part
└─xvda15 202:15 0 106M 0 part /boot/efi
xvdf 202:80 0 50G 0 disk /data
一番下のxvdf 202:80 0 50G 0 disk /data
で先ほどとは異なり、
/data
へのマウントができている.
最後にストレージ容量を再度確認.
/dev/xvdf 50G 390M 50G 1% /data
が追加されている.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 31G 12G 20G 39% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 3.2G 840K 3.2G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/xvda15 105M 6.1M 99M 6% /boot/efi
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1000
/dev/xvdf 50G 390M 50G 1% /data
これでインスタンスに後からボリュームを追加できた.