Azure仮想マシンのOSディスク容量を拡張する(CentOS 7編)

#はじめに
Azure仮想マシンは追加したデータディスクについては自由にサイズを決めることができますが(1ディスクあたりの最大は1TBですが)、OSディスクの初期サイズはデプロイ時にMarketplaceで選んだOSと構成に依存します。
例えばCentOS 7.2(Openlogic)を選ぶと、ルートパーティションの/dev/sda1は30GBになります。
こちらは仮想マシンのデプロイ後に変更することができるので、その手順についてまとめました。
(Windows版のOSディスク容量拡張手順は[こちら](http://qiita.com/yotan/items/bfba7581a4168a401e2a)を参照下さい)

#仮想マシンをデプロイ
今回はOSディスクはPremiumディスクを使用します。
仮想マシンのサイズはDS,Fs,GSシリーズの何れかを選択します。最近筆者はF(Fs)シリーズがコスパ的にも優れていてお気に入りです。

Azureポータルにログイン後、「＋追加」を押して検索窓に「centos」を入力して、検索結果から「CentOS-Based 7.2」を選びます。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/439a4e3f-cef0-afbb-f350-f55a80260e16.png)

デプロイモデルが「リソースマネージャー」になっていることを確認してから「作成」を押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/6f999098-9cb4-5cd5-5ad5-e827646fef70.png)


「1.基本」の項目
VM Disk Typeは「Premium (SSD)」を選択します。
その他項目は画面例を参考に適当に入力します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/6463561f-1f8f-3580-b9b5-182054f75566.png)


「2.サイズ」の項目
今回はF2S(2Core/4GB)を選びました。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/f85d09fd-a945-5222-abc0-cae4dc9ed810.png)


「3.設定」の項目
こちらは全てデフォルトで進めました。
ストレージアカウントはVHDファイル格納用のPremiumストレージと、診断情報格納用のStandardストレージの2つが自動作成されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/f53dcb09-05e3-3f0b-aa75-79f76d3083af.png)


「4.概要」の項目
表示内容を確認して「OK」を押すとデプロイ開始です。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/f876de20-4c95-0ce3-57c3-95061cfad08d.png)

しばらく待つと、無事仮想マシンのデプロイが完了して状態が「実行中」になりました。
ssh接続用のパブリックIPアドレスをメモしておきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/b623faa1-2f3e-76cf-fa1d-e3d54e78893c.png)



#Linux側からの確認
先に控えたパブリックIPアドレスを使って、CentOS仮想マシンにsshでログインします。
今回は[Tera Term](https://ja.osdn.net/projects/ttssh2/)を使います。

Tera TermをクライントPCから起動して、IPアドレス欄に先にメモしたものを入力してOKを押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/2a414931-2989-6465-a055-68e6debe1009.png)

初めてsshで接続する際にセキュリティ警告が出ますが、こちらは続行ボタンを押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/f84299c6-80f9-ba3c-13a5-89da57c4aee7.png)

ユーザ名とパスフレーズは仮想マシン作成時に指定したユーザ名とパスワードを入力して、OKを押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/bd240268-b784-7a7b-8e9c-436c74e6cc0e.png)

無事ログインできました。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/fe32ec0f-8150-4b00-56a7-ed5cf043fd1b.png)

dfコマンドでルートパーティション(/dev/sda1)のサイズを確認します。
初期状態では30GB程度になっています。

```
[azureuser@TESTVM01 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        30G  1.3G   29G   5% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sdb1       7.8G   36M  7.3G   1% /mnt/resource
tmpfs           395M     0  395M   0% /run/user/1000
```

#OSディスクのサイズ変更

OS起動中はディスクのサイズ変更ができないため、一度仮想マシンを停止します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/00057520-c4b6-c280-65e3-29f95f90a76d.png)


仮想マシン停止後、ディスクメニューからOSディスクを選択し、サイズを1023GiBに設定して保存します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/4c2d0bd6-9ea0-75a4-45de-e1a50b7664a2.png)


サイズ変更後、仮想マシンを再び起動します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/a46b289d-6a33-c7c3-dde6-565e6106dc33.png)


#CentOS側のサイズ拡張
Azure側にてOSディスクのサイズを拡張しても、仮想マシン内のCentOS側は自動で領域拡張はしてくれません。
fdiskコマンドにて/dev/sdaのプライマリパーティション1を一度削除してから、最大容量で再作成する手順です。

```
[azureuser@TESTVM01 ~]$ 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): p

Disk /dev/sda: 1098.4 GB, 1098437885952 bytes, 2145386496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000dd16b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    62914559    31456256   83  Linux

Command (m for help): d
Selected partition 1
Partition 1 is deleted

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2145386495, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2145386495, default 2145386495):
Using default value 2145386495
Partition 1 of type Linux and of size 1023 GiB is set

Command (m for help): 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.
```

上記操作は最後のWARNINGメッセージにも書かれている通り、一度OSを再起動しないと適用されません。
ポータル上から再起動ボタンを押して再起動します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/d15aced8-13ba-6199-2883-9db22f8657d9.png)

CentOS 7ではルートパーティションのフォーマットはxfsになりますので、領域拡張にはxfs_growfsを使います(ext4の場合はresize2fsコマンドでした)。

```
[azureuser@TESTVM01 ~]$ sudo xfs_growfs /dev/sda1
meta-data=/dev/sda1              isize=256    agcount=4, agsize=1966016 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=7864064, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=3839, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 7864064 to 268173056
```

コマンドが無事実行されると、ルートパーティションの領域が最大サイズまで拡張されました。

```
[azureuser@TESTVM01 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1      1023G  1.3G 1022G   1% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sdb1       7.8G   36M  7.3G   1% /mnt/resource
tmpfs           395M     0  395M   0% /run/user/1000
```

無事領域の拡張がOS上でも行われました・


#おわりに
今回のエントリではOSディスクにPremiumストレージを使いましたが、Azureプレミアムストレージは確保したサイズによってディスク性能が異なります。
以下に性能表を示しますが。OSディスクをデプロイ直後の30GB(P10)から1023GB(P30)に上げる事により、容量アップ＋性能アップにもなります。

|Premium Storage|P10|P20|P30|
|:--------------+--------------+---+---+--:|
|ディスク サイズ|128 GiB|512 GiB|1,024 GiB (1TB)|
|ディスクあたりの IOPS|500|2,300|5,000|
|ディスクあたりのスループット|100 MB/秒|150 MB/秒|200 MB/秒|

無論P10よりもP30の方が利用料金はお高くなるため、全ての場面で必要ではないと思いますがご参考まで。

#おまけ
実はOSディスクもデータディスクも、仮想マシンが起動中でもホストキャッシュの設定を変更することができます。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/baaad49d-f919-b1f6-34b8-7180ace5f220.png)


ただし、OSディスクのホストキャッシュはデフォルトでRead/Writeキャッシュが設定されるのですが、こちらをOS起動中に変更するとキャッシュ上に残っている書き込みキャッシュがWritebackされずに消えてしまう可能性があるようです。
[Japan Azure Technical Support Engineers' Blog](https://blogs.technet.microsoft.com/jpaztech/2016/08/30/hostcache/)でも情報が公開されていますので、こちらも参考にすると宜しいかと。