📂

EC2のボリュームサイズ拡張に合わせてファイルシステムを拡張する

2024/12/23に公開

業務でEC2にJenkinsをインストールしたのですが、ストレージのボリュームサイズが8GiBと少なかったので50GiBに拡張しました。ですが、Jenkinsのダッシュボードでは空き容量が以前8GiBだったので調べてみると、EC2のファイルシステムも拡張しないといけないみたいでした。

Linuxの知識が浅く色々調べてやっと少し理解できたので、調べたことと作業の内容をまとめようと思います。

流れ

以下の流れでファイルシステムを拡張し、JenkinsでEC2のボリュームサイズと同じ容量を使用できるようにしました。

  1. 物理的なEC2のボリュームサイズを8GiB→50GiBへ変更(手順は省略します)
  2. パーティションを拡張
  3. ファイルシステムを拡張

パーティション

物理的なディスクを論理的に分割した各領域のことです。

パーティションテーブル

ストレージデバイス上のパーティション(区切り)に関する情報を管理するデータ構造で、パーティションの位置とサイズを記録し、ファイルシステムのマウントを管理しています。

ファイルシステム

ディスクのデータ領域を管理するための仕組みです。具体的には、ディレクトリ構造、ファイルの内容、空き領域の情報を管理しています。

https://qiita.com/m0chim0chi/items/265b28d61f6e6eeea54d#パーティションの仕組み

https://qiita.com/kakkie/items/8f960f2dc5eb6e591d9d

以降は私の作業履歴を元に手順を説明します。

パーティションを確認する

EC2のボリュームサイズを8GiB→50GiBへ変更した状態で、EC2に入ります。

$ ssh -i .ssh/SSH-KEY-NAME ec2-user@IP-ADDRESS

A newer release of "Amazon Linux" is available.
  Version 2023.6.20241111:
  Version 2023.6.20241121:
  Version 2023.6.20241212:
Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: LAST-LOGIN-INFO

まずはdfコマンドでディスクの空き容量を確認します。

$ df -hT
Filesystem       Type      Size  Used Avail Use% Mounted on
devtmpfs         devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs            tmpfs     453M     0  453M   0% /dev/shm
tmpfs            tmpfs     181M  444K  181M   1% /run
/dev/nvme0n1p1   xfs       8.0G  2.4G  5.6G  30% /
tmpfs            tmpfs     453M   32K  453M   1% /tmp
/dev/nvme0n1p128 vfat       10M  1.3M  8.7M  13% /boot/efi
tmpfs            tmpfs      91M     0   91M   0% /run/user/1000

これより、Mounted onが/である/dev/nvme0n1p1がルートパーティションであり、ファイルシステムタイプはxfsであることがわかります。

ファイルシステムの補足
  • /dev:ストレージデバイスや周辺機器が配置されるディレクトリ。
  • bvme0n1:NVMe SSD(高速ストレージデバイス)の一番目のドライブ。
  • p1:ドライブ内の第一パーティション。
  • ファイルシステムタイプ:ファイルやディレクトリをストレージデバイスに保存するための仕組み。

次に、lsblkコマンドでパーティションテーブルを確認します。

$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1       259:0    0  50G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
├─nvme0n1p127 259:2    0   1M  0 part
└─nvme0n1p128 259:3    0  10M  0 part /boot/efi

これより、ボリューム全体(nvme0n1)は50GiBに拡張されていますが、パーティション(nvme0n1p1)は8GiBのままであることがわかります。

パーティションを拡張する

growpartコマンドでパーティションのサイズを拡張します。EC2インスタンスのボリュームはdev/xvdaでしたので、そのデバイス全体と第1パーティションを指定します。

$ sudo growpart /dev/xvda 1
CHANGED: partition=1 start=24576 old: size=16752607 end=16777183 new: size=104832991 end=104857567

ログより、パーティションサイズがsize=16752607(約8GiB)からsize=104832991(約50GiB)に変更されていることがわかります。

ファイルシステムを拡張する

現時点ではパーティションテーブルを変更しただけなので、論理的なファイルシステムも拡張する必要があります。今回のファイルシステムタイプはxfsでしたので、xfs_growfsコマンドでファイルシステムを拡張することができます。ファイルシステム全体を拡張する-dオプションを使用し、マウントポイントには/(ルートファイルシステム)を指定します。

$ sudo xfs_growfs -d /
meta-data=/dev/nvme0n1p1         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 13104123

ログより、ファイルシステム内のデータブロックが約8GiBから50GiBに拡張されたことがわかります。

最初に使用したdfコマンドで結果を確認します。

$ df -hT
Filesystem       Type      Size  Used Avail Use% Mounted on
devtmpfs         devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs            tmpfs     453M     0  453M   0% /dev/shm
tmpfs            tmpfs     181M  448K  181M   1% /run
/dev/nvme0n1p1   xfs        50G  2.7G   48G   6% /
tmpfs            tmpfs     453M   32K  453M   1% /tmp
/dev/nvme0n1p128 vfat       10M  1.3M  8.7M  13% /boot/efi
tmpfs            tmpfs      91M     0   91M   0% /run/user/1000

/dev/nvme0n1p1のサイズが50GiBになり、空き容量が増えたことが確認できました。

まとめ

以上のようにして、EC2のボリューム変更をファイルシステムへ反映することができます。私の場合はEC2にインストールしたJenkinsで空き容量不足のエラーが出ていたのでこの手順が必要だと気づけましたが、このエラーがなければファイルシステムの拡張が必要だと気づけなかったと思います。

Discussion