EC2のボリュームサイズ拡張に合わせてファイルシステムを拡張する
業務でEC2にJenkinsをインストールしたのですが、ストレージのボリュームサイズが8GiBと少なかったので50GiBに拡張しました。ですが、Jenkinsのダッシュボードでは空き容量が以前8GiBだったので調べてみると、EC2のファイルシステムも拡張しないといけないみたいでした。
Linuxの知識が浅く色々調べてやっと少し理解できたので、調べたことと作業の内容をまとめようと思います。
流れ
以下の流れでファイルシステムを拡張し、JenkinsでEC2のボリュームサイズと同じ容量を使用できるようにしました。
- 物理的なEC2のボリュームサイズを8GiB→50GiBへ変更(手順は省略します)
- パーティションを拡張
- ファイルシステムを拡張
パーティション
物理的なディスクを論理的に分割した各領域のことです。
パーティションテーブル
ストレージデバイス上のパーティション(区切り)に関する情報を管理するデータ構造で、パーティションの位置とサイズを記録し、ファイルシステムのマウントを管理しています。
ファイルシステム
ディスクのデータ領域を管理するための仕組みです。具体的には、ディレクトリ構造、ファイルの内容、空き領域の情報を管理しています。
以降は私の作業履歴を元に手順を説明します。
パーティションを確認する
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