Oracle Cloud Infrastructureでボリュームのオンラインリサイズが可能になったよ

# 1. 新機能ボリュームのオンラインリサイズ
いままでボリュームのサイズを変更するには、ボリュームをオフラインにする必要があった。2020年6月にリリースされた新機能によって、ダウンタイムなしにボリュームのサイズを変更できるようになった。ニュースリリースのブログは以下のとおり。

* [Size Up Your Volumes While They’re Online!](https://blogs.oracle.com/cloud-infrastructure/size-up-your-volumes-while-they%e2%80%99re-online)
* [OCIマニュアル：Resizing a Volume](https://docs.cloud.oracle.com/en-us/iaas/Content/Block/Tasks/resizingavolume.htm)

ブロック・ボリュームとブート・ボリュームの両方に対応し、LinuxだけでなくWindowsでも利用できる。とくにブート・ボリュームは手順が複雑だったのでメリットは大きい。

### 1-1. 前提条件

* Oracle Cloud Infrastructure Compute
* Linux, Windows。ただしWindowsの詳細手順はマニュアル参照

# 2. ボリュームの拡張をふりかえる

新機能によって何が変わるかを理解するために、いままでの機能と比較してみよう。なお、筆者は以前サイズ変更の記事を書いている。

* [OCI Computeでディスクの空き容量が足りなくなったときの追加方法 Part 1](https://qiita.com/yamada-hakase/items/13885b7664afa7383df0), [Part 2](https://qiita.com/yamada-hakase/items/3f2fb3d0e67b2753ab0e)

### 2-1. ボリュームの拡張方法の種類

いままでボリュームの大きさを変更するには、次の1から3の方法が利用できた。今回新たに4の方法も可能になった。

1. 既存のボリュームをオフラインにして拡張する
2. ボリュームのバックアップを、より大きなサイズのボリュームにリストアする
3. 既存のボリュームを、より大きなサイズのボリュームにクローンする
4. <font color="red">既存のボリュームをオンラインのまま拡張する（New）</font>

新しい機能ではボリュームをオフラインにするなどのダウンタイムが不要になるのに加え、手順も大幅に簡略化できる。

### 2-2. ボリュームの拡張手順

ブロック・ボリュームとブート・ボリュームの拡張手順を説明したのが以下の表だ。ボリュームをデタッチする必要が無いので、オンラインのまま作業を継続できる。

**ブロック・ボリュームの場合**

| No | 従来のオフラインリサイズ | 新しいオンラインリサイズ |
|:-:|:--|:--|
| 1 | ボリュームのアンマウント   |   |
| 2 | ボリュームのデタッチ  |   |
| 3 | ボリュームの拡張  | ボリュームの拡張  |
| 4 | ボリュームのアタッチ |   |
| 5 |  | <font color="blue">ボリュームの再スキャン</font> |
| 6 | パーティションの拡張  | パーティションの拡張  |
| 7 | ファイルシステム破損の確認  | <font color="red">ファイルシステム破損の確認(省略可) </font> |
| 8 | ボリュームのマウント  |   |
| 9 | ファイルシステムの拡張  | ファイルシステムの拡張  |

※xfs_repair/fsckによるファイルシステム破損の確認は省略できる。ただしファイルシステムが破損していると、9の「ファイルシステムの拡張」に失敗する。そのときにはボリュームをアンマウントしてxfs_repairを実行する必要がある。

**ブート・ボリュームの場合**

| No | 従来のオフラインリサイズ | 新しいオンラインリサイズ |
|:-:|:--|:--|
| 1 | インスタンスの停止   |   |
| 2 | ボリュームのデタッチ  |   |
| 3 | ボリュームの拡張  | ボリュームの拡張  |
| 4 |  | <font color="blue">ボリュームの再スキャン</font> |
| 5 | ボリュームのアタッチ |   |
| 6 | インスタンスの起動 |   |
| 7 | パーティションの拡張 | パーティションの拡張  |
| 8 | ファイルシステムの拡張 | ファイルシステムの拡張  |

※ブロック・ボリュームと同様にxfs_repair/fsckの問題はある。エラーでファイルシステムを拡張できないときは、オフラインの方法を試みる。

# 3. 実際に変更してみる

それでは実際に試してみよう。新しい方法ではブート・ボリュームでもインスタンスを停止する必要はない。そのためブート・ボリュームでもブロック・ボリュームでも途中まで手順は同じだ。異なるのはパーティション拡張以降の手順である。

1. 管理コンソールでブート・ボリュームもしくはブロック・ボリュームを選択し、**[Edit Size or Performance]**をクリックして変更画面を表示する。
![blockvol_resize06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/f0a338bc-1aff-a317-a33d-69065b823854.png)
2. 変更後の大きさを入力して**[Save Changes]**をクリックする。
![blockvol_resize07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/dbc061c6-d2e5-acb8-ac43-7388a31474a4.png)
3. すると再スキャンに必要なコマンドが表示されるのでコピーしておく。サイズ変更は瞬間に終わる。
![blockvol_resize08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/ba687ccd-9a5e-5d64-29a2-768ed43312b9.png)
3. 該当のインスタンスに接続して確認する。ボリュームサイズの変更は直ちに反映されるが、OSでは認識していないので確認できない。

```shell-session
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   50G  0 disk 　　　　　　★50Gのまま
└─sdb1   8:17   0   50G  0 part /mnt/vol01
sda      8:0    0 46.6G  0 disk
├─sda2   8:2    0    8G  0 part [SWAP]
├─sda3   8:3    0 38.4G  0 part /
└─sda1   8:1    0  200M  0 part /boot/ef
```

4.さきほどコピーした再スキャンのコマンドを実行する。

```shell-session
$ sudo dd iflag=direct if=/dev/sdb of=/dev/null count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0012274 s, 417 kB/s

$ echo "1" | sudo tee /sys/class/block/sdb/device/rescan
1
```

4.再スキャンによってボリュームサイズが更新された。しかしパーティションサイズは変更されていない。

```shell-session
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  100G  0 disk 　　　　　  ★100Gに変更された
└─sdb1   8:17   0   50G  0 part /mnt/vol01 ★パーティションは50Gのまま
sda      8:0    0 46.6G  0 disk
├─sda2   8:2    0    8G  0 part [SWAP]
├─sda3   8:3    0 38.4G  0 part /
└─sda1   8:1    0  200M  0 part /boot/efi
```

5.これ以降の手順は従来と同じだ。以下のリンクを参考に、パーティションとファイルシステムの拡張を行ってほしい。

**Qiita記事**

* [ブロック・ボリュームのパーティションを拡張する](https://qiita.com/yamada-hakase/items/13885b7664afa7383df0#3-5-%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B)
* [ブート・ボリュームのパーティションを拡張する](https://qiita.com/yamada-hakase/items/3f2fb3d0e67b2753ab0e#5-5-oci-growfs%E3%81%A7%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B)

**OCIマニュアル**

* [Extending the Partition for a Block Volume](https://docs.cloud.oracle.com/en-us/iaas/Content/Block/Tasks/extendingblockpartition.htm)
* [Extending the Partition for a Boot Volume](https://docs.cloud.oracle.com/en-us/iaas/Content/Block/Tasks/extendingbootpartition.htm)


# 3. おわりに

いやー、便利になったものである。AWSのEBSでも2017年にはオンライン変更ができたのだから、今後はより機能的に近づいていくのだろう。そういえばOracle Databaseに対して、PostgreSQLなどの機能が近づいているのと同じ現象だろう。