AWS Linux Boot EBSボリューム容量変更時resize2fsができない場合の解決策

2013年6月18日

*この方法を実施する際にはテスト環境でテストをした上で本番に適用する事を強くお勧めします。まあ、まともなエンジニアならいきなり本番はないと思いますが。

AWSのEBS Bootボリュームサイズを拡張する方法に関してネットでたくさんの情報が乗っているがresize2fsがそのままでは効かない場合がある。
ここは私が試して成功した方法を示す。
参考になったサイトはこちら

ボリューム変更の一般的な手順は以下のようになる。
(以下の手順の詳細はネット上検索すると山ほどでる)

  1. 現在のBootボリュームのsnapshotをとる
  2. snapshotより新しいEBSボリューム(好きなサイズを指定)を生成
  3. 起動中のinstanceをstop
  4. instanceのBoot ボリュームをdetach(device 名前を控える-sdaのようなもの)
  5. 増量したdeviceをattach(device名前は上の手順で控えたもの)
  6. instanceを起動
  7. sudo resize2fs /dev/拡張したいdevice名前 (各自設定のdevice名前)

[ここからが本題]
上記の手順に従ってもThe filesystem is already xxx blocks long. Nothing to do!でる場合の解決策

これは増量されたサイズに対して実際に容量が割り当てられていないのが原因fdiskを利用し新しくdisk容量を割り当てる事で解決可能。ただいくつか注意点があるのでここにその手順を示す。

前置き
以下は上記の6.instance起動後からの手順。

基本suで作業.私の環境ではattachした時のdevice名sdaに対してlinuxの/dev上では xvda1,xvda2,xvda3があり [xvda1->/mnt/boot] [xvda2->/] [xvda3-> swap] 領域としてマウントされていた。ここのdevice名は各自環境のものにかえること.

下記手順どおりならデータが削除される事はなかったが領域の指定(シリンダ)を間違えるとデータがなくなる可能性があるので注意

#fdiskで領域の再割当
fdisk /dev/xvda

#boot領域は手を付けず /領域と swap領域の割当を削除
#以下fdisk コマンド 

###############################################
#既存パーティション削除ーboot領域は削除しない事!

コマンド (m でヘルプ): d
パーティション番号 (1-4): 2 #xvda2(/)領域を削除
コマンド (m でヘルプ): d 
パーティション番号 (1-4): 3 #xvda3(swap)領域を削除

###############################################
#新規領域追加
#/領域
コマンド (m でヘルプ):n #(新規領域作成)
コマンドアクション
   e   拡張
   p   基本パーティション (1-4) p #(基本パーティションとして生成)
パーティション番号 (1-4):2#(xvda2 - / 領域)
最初 シリンダ (15-2610, 初期値 15):Enter 
Last シリンダ, +シリンダ数 or +size{K,M,G} (15-2610, 初期値 2610): 2235#(swap領域用の容量を確保375で3G程度ここは各自調節)

#新規領域追加
#swap領域
コマンド (m でヘルプ):n #(新規領域作成)
   e   拡張
   p   基本パーティション (1-4) p #(基本パーティションとして生成)
       パーティション番号 (1-4):3#(xvda3 - swap 領域)
最初 シリンダ (2236-2610, 初期値 2236):enter 
初期値 2236 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (2236-2610, 初期値 2610): enter
初期値 2610 を使います

###############################################
#変更保存
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

#再起動しないと適用されないがその前に自動マウントをoffにする
vim /etc/fstab
#boot領域以外はすべてコメントアウト

/dev/xvda1  /mnt/boot      ext2    errors=remount-ro       0       1
#/dev/xvda2 /              ext4    defaults                1       2
#/dev/xvda3 none           swap    sw                      0       0
#tmpfs      /dev/shm       tmpfs   defaults        0 0
#devpts     /dev/pts       devpts  gid=5,mode=620  0 0
#sysfs      /sys           sysfs   defaults        0 0
#proc       /proc          proc    defaults        0 0
:wq #保存して終了

#システム再起動
reboot

#resize
resize2fs /dev/xvda2

#今回はresize2fsがちゃんと動く
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/xvda2 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/xvda2 to 4460045 (4k) blocks.

#起動時のマウントオップションをもとに戻す

vim /etc/fstab
/dev/xvda1  /mnt/boot   ext2    errors=remount-ro       0       1
/dev/xvda2  /           ext4    defaults    1       2
/dev/xvda3  none        swap    sw          0       0
tmpfs       /dev/shm    tmpfs   defaults        0 0
devpts      /dev/pts    devpts  gid=5,mode=620  0 0
sysfs       /sys        sysfs   defaults        0 0
proc        /proc       proc    defaults        0 0

:wq #保存して終了

#システムを再起動
reboot

#最後に確認
root@ip-10-152-99-205 ~]# df -lh
Filesystem            Size  Used Avail Use% マウント位置
/dev/xvda2             17G  4.3G   12G  27% /          #容量が増えた
tmpfs                 3.6G     0  3.6G   0% /dev/shm  #swapも確保
/dev/xvda1            107M   79M   23M  78% /mnt/boot 

手順は以上で終了

Have your say