EC2のディスク容量(EBS)を拡張する

# 口上
単純に snapshot をとってそこから大きくしたいサイズの volume を作って インスタンス に アタッチ しなおして `resize2fs` すればいーじゃんと思ってたら、"Nothing to do!" と出てしまいうまく行かなかったので、その時に対応した自分用メモ。Management Console の細かい操作については結構省いています。


# 対象インスタンスの環境
EC2 AMI : CentOS 6 (x86_64) - with Updates HVM
ディスク容量 : 8G → 36G


# 手順
1. 対象インスタンスの snapshot を取得する(出来るなら停止させてからがベスト)
2. snapshot から volume を作成する。この際に拡張したいサイズで作成する(今回は36Gで)
3. AmazonLinux(HVM) でSSHの可能な EC2 作業用インスタンスを適当にたてる
4. 作成したばかりの 3. の作業用インスタンスをいったん停止する
4. 2. で作成した volume を 3. の作業用インスタンスにアタッチする(デバイスはここでは /dev/sdf にしました)
5. 作業用インスタンスを起動する
5. 作業用インスタンスに SSH して、5. でアタッチした volumeを `lsblk`コマンド で確認する

    ```
$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  36G  0 disk
└─xvdf1 202:81   0   8G  0 part    ← 36Gのvolumeなのに8Gしか使ってない
```
6. `parted`コマンド でパーティションを拡張する

    ```
$ sudo parted /dev/xvdf
GNU Parted 2.1
Using /dev/xvdf
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s    ← 単位をセクタ数に変更
(parted) print     ← 現在の状態を表示させる
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdf: 75497472s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
​
Number  Start  End        Size       Type     File system  Flags
 1      2048s  16777215s  16775168s  primary  ext4         boot    ← これが今の状態
​
(parted) rm 1                         ← パーティションを一旦削除する
(parted) mkpart primary 2048s 100%    ← パーティションを作成(セクタ2048から最後まで指定)
(parted) print
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdf: 75497472s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
​
Number  Start  End        Size       Type     File system  Flags
 1      2048s  75497471s  75495424s  primary  ext4                  ← 拡張したのがわかる
​
(parted) set 1 boot on    ← Flags に boot を付与する
(parted)
(parted) print
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdf: 75497472s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
​
Number  Start  End        Size       Type     File system  Flags
 1      2048s  75497471s  75495424s  primary  ext4         boot      ← boot が Flags に付与された
​
(parted)
(parted) quit    ← parted をぬける
Information: You may need to update /etc/fstab.
```
7. 拡張したパーティションに `fsck` をかける (もし Fix? と聞かれたら全部 yes と応える)

    ```
$ sudo e2fsck -f /dev/xvdf1
e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/xvdf1: 25097/524288 files (0.2% non-contiguous), 828273/2096896 blocks
```

8. ファイルシステムを拡張する

    ```
$ sudo resize2fs /dev/xvdf1
resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/xvdf1 to 9436928 (4k) blocks.
The filesystem on /dev/xvdf1 is now 9436928 (4k) blocks long.
```

    ここで `lsblk` で拡張っぷりを確認しておく

    ```
$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  36G  0 disk
└─xvdf1 202:81   0  36G  0 part    ← 36G のvolume に対して 36G のパーティションであることがわかる
```

9. 作業用インスタンスを停止する
9. 拡張した volume を作業用インスタンスからデタッチする(この時点で作業用インスタンスは用済み)
10. 対象インスタンスを停止して、元々アタッチされていた volume をデタッチする
11. (容量を)拡張した volume を 対象インスタンスにアタッチする(たぶん /dev/sda1 で)
12. 対象インスタンスを起動する



# 参考にさせて頂いたページ
[EC2上のLinuxのパーティションを拡張する](http://blog.serverworks.co.jp/tech/2014/11/27/ecpanding_linux_partition/)
[Linux で EBS ボリュームのストレージ領域を拡張する](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-expand-volume.html)
[Linux パーティションを拡張する](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/storage_expand_partition.html)