EC2のボリューム拡張 - ext4とXFS

EC2のボリューム拡張 - ext4とXFS

ファイルシステムの変更のコマンドってなんだっけ

こんにちは、樋口です。
先日AWSのEC2インスタンスを検証目的で触っていたときに、EBSボリュームの拡張を行おうとしました。
仮想ディスクの変更(増設)→ディスクのパーティションの変更→ファイルシステムを変更というよくある流れの中で、ファイルシステムの拡張はresize2fsと身に染み付いてしまっているのですが、最近よく見るファイルシステムXFSでは何だったっけなと毎回忘れてしまいます。
今回は備忘録や色々調べてみたことも含めて記事にしてみました。

EBSのサイズ変更を行うとき

まずEC2ではインスタンスの停止を伴わずにEBSのボリュームサイズの変更が可能です。今ではそんなことは当たり前のように書いていますがこれは2017年のリリースで追加された機能です。
Amazon EBS Update – New Elastic Volumes Change Everything

マネジメントコンソールからだとEBSのメニューから「ボリュームの変更」でボリュームタイプやサイズなどを変更することが可能です。もちろんCLIからでも可能です。

さて、このままでは上記の流れの前段にあたる「物理ディスクの増設」が行われただけにすぎず、必要があれば「パーティションの変更」、そしてそれらの変更をファイルシステムに認識させる必要があります。
ローカルディスクのファイルシステムには様々な種類がありますが、多くのファイルシステムでは自動認識は行われません。

初めて触ったLinuxOSがCentOS 5であった私はその当時のデフォルトのファイルシステムext3の扱いを学びました。
パーティションを変更した場合はresize2fsコマンドでファイルシステムに変更を認識させます。
その後CentOS 6(というかRHEL6)のデフォルトのファイルシステムはext4となりましたが、上記の操作に大きな違いはありませんでした。
現在のUbuntuでもデフォルトのファイルシステムはext4になっています。

$ df -Th

それではこのインスタンスのアタッチされているEBSボリュームのサイズを8GiBから16GiBに変更してみます。そうするとxvdaのサイズは16Gになっていますが、その中のパーティションは変更されていないことがわかります。

ここでパーティションを拡張するために以下のコマンドを実行します。

$ sudo growpart /dev/xvda 1
/dev/xvdaというデバイスの1番のパーティションを拡張するという意味です。
これにて1番のパーティション(xvda1)が拡張されたことがわかります。

一方でこの時点ではまだファイルシステムは拡張されたパーティションを認識していません。

ext4のファイルシステムを拡張するためにはresize2fsコマンドを実行します。

$ sudo resize2fs /dev/xvda1

ちなみにここで指定される/dev/xvda1はブロックデバイスであるパーティションそのものであるためgrowpartと違ってスペースは必要ありません。

これにて無事にファイルシステムの拡張も完了しました。

一方でCentOS 7以降(というかRHEL7)のデフォルトのファイルシステムはXFSとなっています。Amazon Linux 2023でもXFSが使われていました。詳細は後述しますが、このXFSでは拡張のコマンドが少し異なります。
パーティションの変更までは同様に行った後に、

$ sudo xfs_growfs /

を実行します。

注意点としてはこのままだとデバイスがサポートする最大サイズまでファイルシステムを拡張するという点です。特定のサイズまで拡張したい場合は

$ sudo xfs_growfs / -D (size)

で拡張します。また、XFSファイルシステムはマウント中にサイズを縮小することはできません。

まとめ

ext4とXFSについての違いを調べてみるとここには書ききれないほどたくさん出てきます。例えば最大ファイルサイズとボリュームサイズはext4が16TiBと1EiBなのに対して、XFSでは8EiBと8EiBです。XFSではファイルシステムをアロケーショングループに分割する仕組みによって、並列処理でのI/Oのパフォーマンス向上が見込めるようです。

ext4は名前の通り、ext,ext2,ext3の後継として開発されており、既存のLinuxのデフォルトのファイルシステムとして長い地位を築いていました。一方で、XFSは当初から大規模サーバやストレージアレイでの稼働を目的として作られていたようです。(参考:Managing file systems | Red Hat Documentation)

機能の違いなどもこれらの開発の背景が多分に反映されているようですね。これらを認識したうえでファイルシステムを語れるともう一段強くなれそうです。

Previous Post