Azure VM 上の CentOS7 のディスク容量を拡張する

## CentOS7 の VM の作成

Azure のポータルで適切なサイズの VM を通常の手順で作成してください。

## ディスク拡張

- 作成した VM を Azure のポータルから一度停止してください。
- Azure ポータルの VM のページのメニューから `ディスク` を選択してください。
- `OS ディスク` に表示されているディスクを選択してください。
- `サイズ` を変更して `Save` ボタンをクリックしてください。
- 停止していた VM を Azure のポータルから起動してください。

## パーティション設定

VM に SSH でログインして以下を実行してください。
まず、ディスク容量が増えていることを確認してください。

```bash
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0      2:0    1    4K  0 disk
sda      8:0    0 1023G  0 disk  ← sda が 1023G になっている
├─sda1   8:1    0  500M  0 part /boot
└─sda2   8:2    0 29.5G  0 part /
sdb      8:16   0   56G  0 disk
└─sdb1   8:17   0   56G  0 part /mnt/resource
```

fdisk コマンドで /dev/sda のプライマリーパーティションを一度削除して、最大容量で再作成します。

```bash
$ sudo fdisk /dev/sda

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d ← `d` を入力してパーティションを削除
Partition number (1,2, default 2): 2 ← `2` を入力して削除対象のパーティション番号を指定
Partition 2 is deleted

Command (m for help): n ← `n` を入力してパーティションを作成
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p ← `p` を入力してプライマリーパーティションを指定
Partition number (2-4, default 2): 2 ← `2` を入力してパーティション番号を指定
First sector (1026048-2145386495, default 1026048): ← 空のままエンターでデフォルト値を使用
Using default value 1026048
Last sector, +sectors or +size{K,M,G} (1026048-2145386495, default 2145386495): ← 空のままエンターでデフォルト値を使用
Using default value 2145386495
Partition 2 of type Linux and of size 1022.5 GiB is set

Command (m for help): w ← `w` を入力して変更したパーティションテーブルをディスクに書き込んで終了
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
```

VM を再起動しないと変更が適用されないので Azure のポータルから VM を再起動してください。

VM に再度ログインし、ルートパーティションを拡張します。

```bash
$ sudo xfs_growfs /dev/sda2
meta-data=/dev/sda2              isize=512    agcount=4, agsize=1934016 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=7736064, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=3777, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 7736064 to 268045056
```

- 拡張前

```bash
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0      2:0    1    4K  0 disk
sda      8:0    0 1023G  0 disk
├─sda1   8:1    0  500M  0 part /boot
└─sda2   8:2    0 29.5G  0 part /
sdb      8:16   0   56G  0 disk
└─sdb1   8:17   0   56G  0 part /mnt/resource

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        30G  1.9G   28G   7% /
devtmpfs         14G     0   14G   0% /dev
tmpfs            14G     0   14G   0% /dev/shm
tmpfs            14G  8.3M   14G   1% /run
tmpfs            14G     0   14G   0% /sys/fs/cgroup
/dev/sda1       497M   87M  410M  18% /boot
/dev/sdb1        55G   53M   53G   1% /mnt/resource
tmpfs           2.8G     0  2.8G   0% /run/user/1000
```

- 拡張後

```bash
$ lsblk
NAME   MAJ:MIN RM    SIZE RO TYPE MOUNTPOINT
fd0      2:0    1      4K  0 disk
sda      8:0    0   1023G  0 disk
├─sda1   8:1    0    500M  0 part /boot
└─sda2   8:2    0 1022.5G  0 part /
sdb      8:16   0     56G  0 disk
└─sdb1   8:17   0     56G  0 part /mnt/resource

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2      1023G  1.9G 1021G   1% /
devtmpfs         14G     0   14G   0% /dev
tmpfs            14G     0   14G   0% /dev/shm
tmpfs            14G  8.3M   14G   1% /run
tmpfs            14G     0   14G   0% /sys/fs/cgroup
/dev/sda1       497M   87M  410M  18% /boot
/dev/sdb1        55G   53M   53G   1% /mnt/resource
tmpfs           2.8G     0  2.8G   0% /run/user/1000
```

作業は以上となります。

## 参考資料

- [Azure仮想マシンのOSディスク容量を拡張する(CentOS 7編)](http://qiita.com/yotan/items/30c973814537ea45f452)
- [Azure仮想マシンのOSディスク容量を拡張する](http://qiita.com/yotan/items/bfba7581a4168a401e2a)
- [Linux 仮想マシンの OS ディスクの拡張方法 (ARM編)](https://blogs.technet.microsoft.com/jpaztech/2016/08/03/how-to-resize-os-disk-for-linux/)