EC2にEBSボリュームを新しくアタッチする

EC2インスタンスに新たにEBSボリュームをアタッチする方法を整理しました。
2022.12.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

EBSとは

EBSは以下のようなものです。

Amazon Elastic Block Store (Amazon EBS) は、Amazon Elastic Compute Cloud (Amazon EC2) 向けに設計された、使いやすく、スケーラブルで、高性能なブロックストレージサービスです。

  • Amazon EBS(EC2 ブロックストレージボリューム)| AWS https://aws.amazon.com/jp/ebs/

ブロックストレージということで、SSDやHDDのようなストレージのようなものとして使えます。 この上にXFSやEXT4などのファイルシステムを構築することでファイルの保存領域としても使えます。

今回は起動済みのEC2にEBSをアタッチする方法を整理します。

手順の整理

今回は以下の手順でEBSボリュームをEC2にアタッチします。

  1. EBSボリュームの作成
  2. EBSボリュームのアタッチ
  3. EC2からのマウント

EBSボリュームの作成

今回はマネージメントコンソールを使用してEBSボリュームを作成します。 EBSはEC2のサービスページから作成できます。

今回は以下のようなEBSボリュームを作成します。

注意点として、EC2インスタンスと同じAZに作成する必要があります。

今回は容量1GBのgp3のEBSボリュームを作成しました。 本来は暗号化オプションを有効化しておくのがセキュリティ上望ましいです。

EBSボリュームのアタッチ

対象のボリュームを選択して、「アクション」よりボリュームのアタッチを選択します。

インスタンスとデバイス名を入力します。 今回は予め起動しておいたEC2インスタンスを使用します。

ここで注意点としてデバイス名を今回は「/dev/sdf」としていますが、これはカーネルがブロックデバイスを認識する際に、名前が変更される可能性があるということです。

EC2からマウントする

ボリュームのEC2へのアタッチが完了したのでEC2のインスタンス内からマウントします。

デバイスの確認

lsblkコマンドを使用してブロックデバイスを確認します。

ブロックデバイスの確認

$ 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   1G  0 disk

$ lsblk -fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
xvda1  xfs    /     47834bf7-764e-42f9-9507-11a3e70b99de /
└─xvda
xvdf

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

$  sudo file -s /dev/xvda1
/dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

xvdaはルートボリュームに利用されてるEBSボリュームです。 EC2の起動時に作成されたものです。パーティションが1つ区切られていて、xvda1がルートにマウントされています。

一方で、今回アタッチしたものがxvdfです。アタッチする際の注意書きにもあったようにデバイス名が変更されていますね。 ファイルシステムはまだ設定されていないようです。

ファイルシステムの作成

ファイルシステムがまだ構築されていないので、ファイルシステムを作成します。

ファイルシステムの作成

$ sudo mkfs -t

$ sudo mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=65536 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=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

今回使用しているOSはAmazonLinux2です。 デフォルトでいくつかのファイルシステムツールがインストールされています。 以下が利用できるファイルシステムみたいです。

  • cramfs
  • ext2
  • ext3
  • ext4
  • fat
  • minix
  • msdos
  • vfat
  • xfs

どれでファイルシステムを作成してもよいのですが、今回はルートボリュームと同じくXFSで作成しました。 作成が成功するとlsblkからもUUIDやファイルシステムが確認できるようになります。 まだ、マウントしていないのでマウントポイントは空です。

ファイルシステムの作成の確認

$ lsblk -fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
xvda1  xfs    /     47834bf7-764e-42f9-9507-11a3e70b99de /
└─xvda
xvdf   xfs          8235c857-75e6-4bca-b281-758c467ed05f

$ sudo file -s /dev/xvdf
/dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

マウントしてみる

mountコマンドを使用してマウントします。 今回はパーティションを作成してないので/dev/xvdfをそのままマウントします。 ルート以下にdataというディレクトリを作成してマウントします。

ブロックシステムのマウント

$ sudo mkdir /data
$ sudo mount /dev/xvdf /data
$ lsblk -fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
xvda1  xfs    /     47834bf7-764e-42f9-9507-11a3e70b99de /
└─xvda
xvdf   xfs          8235c857-75e6-4bca-b281-758c467ed05f /data
$ sudo umount /data

lsblkにもマウントポイントが表示されています。 マウントできることが確認できたのでumountコマンドでアンマウントしておきます。

fstabで起動時にマウントする

AmazonLinux2では/etc/fstabを編集することで起動時にマウントすることができます。

今回は以下の内容で設定しました。

/etc/fstab

# <UUID> <マウント先> <ファイルシステムの形式> <マウント時のオプション> <ダンプに含めるか> <整合性チェックの順番>
UUID=47834bf7-764e-42f9-9507-11a3e70b99de     /           xfs    defaults,noatime  1   1
UUID=8235c857-75e6-4bca-b281-758c467ed05f     /data       xfs    defaults,nofail   0   2

1行目はルートの設定です。 2行目が追加した部分です。

UUIDは先程のlsblk -fsで表示されたものです。

ダンプに含めるか否かは用途次第ですが、今回は「0(含めない)」としました。 EBSボリュームはスナップショットが取れるのでそちらを利用したほうが便利な局面が多いと思います。

整合性チェックは今回はルートボリュームよりも遅く行ったほうが良いので「2」としました。「0(チェックしない)」でもいいかもしれません。

/etc/fstabの設定が完了したのでマウントします。 mount -aを使うと/etc/fstabに書かれた設定のものすべてがマウントされます。

fstabの設定

$ sudo mount -a
$ 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   1G  0 disk /data

無事にマウントできたようです。 インスタンスを再起動しても起動時からマウントされていました。

最後に

今回はEBSボリュームをEC2にマウントする方法を整理しました。 簡単にストレージを確保できるので便利ですね。

AZ内で冗長化され保存されていますが、AZ規模障害が発生した際は使えなくなるので、スナップショット等を作成し複数のAZに保存しておく必要があるというのが注意点でしょうか。

参考

  • Linux で Amazon EBS ボリュームを使用できるようにする - Amazon Elastic Compute Cloud https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html