tl;dr
EC2 でディスク使用量がパンパンになってきて
ボリュームをオンラインで拡張したくなったときのやりかたメモです。
基本的に公式ガイドに沿えば OK
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html
のようですが、今回のケースではうまくいかなかったため、別の方法で実施したましあので、その内容をシェアします。
チェック
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.7G 6.7G 1.1G 87% /
(※ルート以外省略してます)
ここのルート /
の容量を拡張したいとします。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
ボリュームの容量をチェックしておきます。
ボリュームの容量を変更する
コンソールだとボリュームの編集でかんたんに変更できます:
(少しだけ時間かかります。5分くらい?)
パーティションの拡張
で lsblk
でサイズを再度確認してみます:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 12G 0 disk
└─xvda1 202:1 0 8G 0 part /
ボリューム全体のサイズは拡張されていますが、
ルートのパーティションのサイズは変わってません。
なので growpart
で xvda1
のサイズを拡張します:
sudo growpart /dev/xvda 1
CHANGED: partition=1 start=2048 old: size=16775135 end=16777183 new: size=25163743,end=25165791
CHANGED
とか出たら変わってます。
容量がカツカツのときはこの操作に必要な一時ファイルを/tmp
に作成することもできないので、いくらか空き容量を空けておきます。
ふたたび lsblk
してパーティションが拡張されていれば OK です:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 12G 0 disk
└─xvda1 202:1 0 12G 0 part /
ファイルシステムの拡張
ここで df -h
をしてみて、まだ容量が変化してないことに気づいたときは:
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.7G 6.7G 1.1G 87% /
LVの拡張まで行って、最後にファイルシステムを拡張しようとするときに、CentOS 6の時代と同じくresize2fs とやると以下のエラー
[root@localhost ~]# resize2fs /dev/xvda1
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/centos/root
Couldn't find valid filesystem superblock.
調べていくと、CentOS 7 からデフォルトになっているXFSではresize2fs
は利用できないということ。
XFSではresize2fs
の代わりに xfs_growfs
を使えばOK
[root@localhost ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 39321600
[root@localhost ~]# echo $?
0
うまくいきました。