AWS

【完全ガイド】EBSボリューム拡張方法 - EBS変更後のファイルシステム拡張方法(Linux・AWS)

2024年7月20日

amazon-ebs-icon

EC2のボリューム拡張しておいて!

と指示をされることがたまにある。「EBSボリュームを増やすだけで良いんや~」と思ってた自分がいたが、EBSボリュームサイズを増やしただけでは、サーバのファイルシステムは自動的に拡張されない

本記事では、EBSボリュームのサイズ変更後に、ファイルシステムを拡張する方法を詳しく解説する。

「サリー」です。AWSパートナー企業でエンジニアとして働いています。
お問い合わせ自己紹介

EBSとは?

Amazon Elastic Block Storeの略称で、EC2インスタンスにアタッチして使用される高い可用性と信頼性、耐久性を実現するように設計されているストレージサービス。以下のような特徴がある。

  1. 高可用性
    99.999% の耐久性と 0.001% の年間故障率 (AFR) を提供するように設計されている。 追加料金なしで、同じアベイラビリティーゾーン内の複数のサーバーにレプリケートされる。
  2. ボリュームの種類
    ボリュームの種類が2種類存在し、
  3. スケーラビリティ
    必要に応じてボリュームサイズを拡張できる。本記事で紹介する部分。
  4. 暗号化
    データ保護のために保存時の暗号化をサポートしている。①SSD を基盤とするボリューム、②HDD タイプのボリュームが存在する。
  5. スナップショット
    ポイントインタイムスナップショットをAmazon S3 に保存する機能が用意されている。 バックアップや災害対策のために使用される。

手順0.EC2インスタンスの用意とボリュームの確認

準備としてEC2インスタンスを起動しておく。ここでのボリュームサイズは8GiB、ボリュームタイプはgp3を使用する。

事前に確認したボリュームサイズとファイルシステムの容量を記載しておく。

$ lsblk
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0  8G  0 disk 
├─xvda1   202:1    0  8G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part /boot/efi
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         4.0M     0  4.0M    0% /dev
tmpfs            475M     0  475M    0% /dev/shm
tmpfs            190M  2.9M  188M    2% /run
/dev/xvda1       8.0G  3.5G  4.5G   44% /
tmpfs            475M  4.0K  475M    1% /tmp
/dev/xvda128      10M  1.3M  8.7M   13% /boot/efi
tmpfs             95M     0   95M    0% /run/user/1000

手順1.EBSボリュームのサイズ変更

まず、AWSマネジメントコンソールまたはAWS CLIを使用して、EBSボリュームのサイズを変更する。

  1. AWSマネジメントコンソールにログイン。
  2. EC2ダッシュボードに移動し、「ボリューム」をクリック。若しくは、対象EC2インスタンスの「ストレージ」タブからアタッチされているボリュームをクリック。
  3. 拡張したいボリュームを選択し、「アクション > ボリュームの変更」をクリック。

4. 新しいサイズを入力し、「変更」をクリック。今回は8 GiB → 16 GiBに変更する。

5. 確認画面が表示されるため、「変更」をクリック。

ボリュームの変更が開始される。大体5分くらい待つと「使用中」となっている箇所が「使用中」になる。

手順2.ボリュームサイズの確認

EBSボリューム全体(xvda)は「16G」となっており、EBSは拡張されていることが確認できる

一方でルートボリューム(/にマウントされているxvda1)を確認すると「8G」と表示されており、EBSボリュームは8GiB → 16GiBに拡張したがEC2インスタンスに反映されていないことが確認できる。

$ lsblk
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0  16G  0 disk 
├─xvda1   202:1    0   8G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part /boot/efi

lsblkコマンド

lsblk コマンドは "List Block Devices" の略で、システム上のすべてのブロックデバイスに関する情報を一覧表示するためのコマンド。

  • NAME: デバイスの名前。
    • xvdaはEBSボリューム全体を指します。これは、AWSのXen仮想化環境で使用される命名規則。
      • xvは"Xen Virtual"の略
      • dは"disk"を表す
      • aは最初のディスクを意味する(2つ目would be xvdb, 3つ目はxvdcなど)
    • xvda1, xvda127, xvda128はxvdaの各パーティション。
  • MAJ:MIN: メジャー番号とマイナー番号。デバイスドライバーを識別するために使用される。
  • RM: リムーバブルデバイスかどうか(0=固定、1=リムーバブル)。
  • SIZE: デバイスまたはパーティションのサイズ。
  • RO: 読み取り専用かどうか(0=読み書き可能、1=読み取り専用)。
  • TYPE: デバイスの種類(disk=ディスク全体、part=パーティション)。
  • MOUNTPOINTS: マウントポイント(デバイスがマウントされている場所)。

手順3.パーティションの拡張

まずはボリュームのパーティションを拡張する。以下はパーティション拡張前のもので、xvda1を拡張する。

$ lsblk
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0  16G  0 disk 
├─xvda1   202:1    0   8G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part /boot/efi

growpart コマンドでパーティションを拡張する。

$ sudo growpart /dev/xvda 1
CHANGED: partition=1 start=24576 old: size=16752607 end=16777183 new: size=33529823 end=33554
399

再度 lsblk コマンドで確認し、パーティションが拡張されていれば良い。

$ lsblk
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0  16G  0 disk 
├─xvda1   202:1    0  16G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part /boot/efi

EBSボリュームを拡張しても、自動的にはそのスペースが利用可能にはならないことが分かったと思う。パーティションを拡張することで、新しく追加されたスペースを既存のファイルシステムで利用できるようになる(手順4で紹介するファイルシステムの拡張が必要だが)。これにより、次のステップのファイルシステムの拡張が可能になる。

手順4.ファイルシステムの拡張

パーティションを拡張しても、自動的にはファイルシステムは拡張されず、拡張してあげないと増やしたディスク容量を実際に使用することができない。

df -hT コマンドでファイルシステムのサイズや使用率が確認できる。ルートボリュームにマウントされている/dev/xvda1 は「8.0G」のため拡張する必要がある。

$ df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   4.0M     0  4.0M    0% /dev
tmpfs          tmpfs      475M     0  475M    0% /dev/shm
tmpfs          tmpfs      190M  2.9M  188M    2% /run
/dev/xvda1     xfs        8.0G  3.5G  4.5G   44% /
tmpfs          tmpfs      475M  4.0K  475M    1% /tmp
/dev/xvda128   vfat        10M  1.3M  8.7M   13% /boot/efi
tmpfs          tmpfs       95M     0   95M    0% /run/user/1000

ファイルシステムのタイプがxfsのため、xfs_growfs コマンドを使用してルートボリューム(/)にマウントされているファイルシステムを拡張する。

$ sudo xfs_growfs /
meta-data=/dev/xvda1             isize=512    agcount=2, agsize=1047040 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1
data     =                       bsize=4096   blocks=2094075, imaxpct=25
         =                       sunit=128    swidth=128 blks
naming   =version 2              bsize=16384  ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=4096  sunit=4 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2094075 to 4191227

ルートボリュームにマウントされている/dev/xvda1 のファイルシステムのサイズが「16GB」に拡張されていることが確認できる。

ここでEBSボリュームとルートボリュームにマウントされているファイルシステムのサイズが一致していればOK!

$ df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   4.0M     0  4.0M    0% /dev
tmpfs          tmpfs      475M     0  475M    0% /dev/shm
tmpfs          tmpfs      190M  2.9M  188M    2% /run
/dev/xvda1     xfs         16G  3.6G   13G   23% /
tmpfs          tmpfs      475M  4.0K  475M    1% /tmp
/dev/xvda128   vfat        10M  1.3M  8.7M   13% /boot/efi
tmpfs          tmpfs       95M     0   95M    0% /run/user/1000

ファイルシステムのタイプがext4 の場合、以下コマンドでファイルシステムの拡張が可能。

$ sudo resize2fs /dev/xvda1

参考

EBS ボリュームのサイズ変更後にファイルシステムの拡張 - Amazon EBS

-AWS
-