何らかの理由で、EC2 Linuxサーバーを再起動せずに安全に拡張する必要がある場合がある。この記事では、AWSでEC2 Linuxディスクを拡張する方法を学ぶ。

この例では、ディスクサイズを80GiBから120GiBに拡張する手順を紹介する。

Step 1: ボリュームを変更する


AWSコンソールにログインし、EC2のボリューム(ディスク)を見つける。左ペインのElastic Block Store > Volumesにある。ボリュームを右クリックし、「Modify Volume」オプションを選択する。下の画像のようになる。適切なサイズを選び、Modifyボタンをクリックする。


Step 2: ディスクサイズを確認する

まず、コマンドを実行する前にサーバーでrootまたはsudoになる必要がある。最初にディスクサイズを確認する。ボリューム変更前のサイズが表示されるはずだ。この例では80GiBのはずだ。

[root@server ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  416K  7.8G   1% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/nvme0n1p1   80G   51G   30G  64% /
tmpfs           1.6G     0  1.6G   0% /run/user/0

はい、ディスク全体のサイズは80GiBと表示されている。正しい。次にブロックデバイスのリストを確認しよう。コマンド出力は/dev/nvme0n1デバイスに新しいディスクサイズを表示するはずだ。

[root@server ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0  120G  0 disk
├─nvme0n1p1   259:1    0   80G  0 part /
└─nvme0n1p128 259:2    0    1M  0 part

はい!nvme0n1p1は80GiBだが、nvme0n1は120GiBと表示されている。つまり、nvme0n1p1パーティションを80GiBから120GiBに拡張できるということだ。

Step 3: 拡張しよう

ここが魔法の部分だ:

[root@server ~]# growpart /dev/nvme0n1 1
CHANGED: partition=1 start=4096 old: size=167768031 end=167772127 new: size=251654111 end=251658207

growpartコマンドはディスクパーティションを拡張しただけで、まだ保存されておらず、まだ120GiBのディスクにはなっていない。今すぐ変更をファイルシステムに保存する必要がある。

[root@server ~]# xfs_growfs /
meta-data=/dev/nvme0n1p1         isize=512    agcount=41, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=20971003, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 20971003 to 31456763

Step 4: ディスクサイズを再度確認する

新しいディスクサイズを確認する時間だ。確認のためにもう一度コマンドを実行する。

[root@server ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  412K  7.8G   1% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/nvme0n1p1  120G   51G   70G  42% /
tmpfs           1.6G     0  1.6G   0% /run/user/0

[root@server ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 120G 0 disk ├─nvme0n1p1 259:1 0 120G 0 part / └─nvme0n1p128 259:2 0 1M 0 part

おめでとう!AWS EC2 Linuxサーバーを再起動せず、EBS(Elastic Block Storage)上のデータを失うことなく正常に拡張できた。