1. 新機能ボリュームのオンラインリサイズ
いままでボリュームのサイズを変更するには、ボリュームをオフラインにする必要があった。2020年6月にリリースされた新機能によって、ダウンタイムなしにボリュームのサイズを変更できるようになった。ニュースリリースのブログは以下のとおり。
ブロック・ボリュームとブート・ボリュームの両方に対応し、LinuxだけでなくWindowsでも利用できる。とくにブート・ボリュームは手順が複雑だったのでメリットは大きい。
1-1. 前提条件
- Oracle Cloud Infrastructure Compute
- Linux, Windows。ただしWindowsの詳細手順はマニュアル参照
2. ボリュームの拡張をふりかえる
新機能によって何が変わるかを理解するために、いままでの機能と比較してみよう。なお、筆者は以前サイズ変更の記事を書いている。
2-1. ボリュームの拡張方法の種類
いままでボリュームの大きさを変更するには、次の1から3の方法が利用できた。今回新たに4の方法も可能になった。
- 既存のボリュームをオフラインにして拡張する
- ボリュームのバックアップを、より大きなサイズのボリュームにリストアする
- 既存のボリュームを、より大きなサイズのボリュームにクローンする
- 既存のボリュームをオンラインのまま拡張する(New)
新しい機能ではボリュームをオフラインにするなどのダウンタイムが不要になるのに加え、手順も大幅に簡略化できる。
2-2. ボリュームの拡張手順
ブロック・ボリュームとブート・ボリュームの拡張手順を説明したのが以下の表だ。ボリュームをデタッチする必要が無いので、オンラインのまま作業を継続できる。
ブロック・ボリュームの場合
No | 従来のオフラインリサイズ | 新しいオンラインリサイズ |
---|---|---|
1 | ボリュームのアンマウント | |
2 | ボリュームのデタッチ | |
3 | ボリュームの拡張 | ボリュームの拡張 |
4 | ボリュームのアタッチ | |
5 | ボリュームの再スキャン | |
6 | パーティションの拡張 | パーティションの拡張 |
7 | ファイルシステム破損の確認 | ファイルシステム破損の確認(省略可) |
8 | ボリュームのマウント | |
9 | ファイルシステムの拡張 | ファイルシステムの拡張 |
※xfs_repair/fsckによるファイルシステム破損の確認は省略できる。ただしファイルシステムが破損していると、9の「ファイルシステムの拡張」に失敗する。そのときにはボリュームをアンマウントしてxfs_repairを実行する必要がある。
ブート・ボリュームの場合
No | 従来のオフラインリサイズ | 新しいオンラインリサイズ |
---|---|---|
1 | インスタンスの停止 | |
2 | ボリュームのデタッチ | |
3 | ボリュームの拡張 | ボリュームの拡張 |
4 | ボリュームの再スキャン | |
5 | ボリュームのアタッチ | |
6 | インスタンスの起動 | |
7 | パーティションの拡張 | パーティションの拡張 |
8 | ファイルシステムの拡張 | ファイルシステムの拡張 |
※ブロック・ボリュームと同様にxfs_repair/fsckの問題はある。エラーでファイルシステムを拡張できないときは、オフラインの方法を試みる。
3. 実際に変更してみる
それでは実際に試してみよう。新しい方法ではブート・ボリュームでもインスタンスを停止する必要はない。そのためブート・ボリュームでもブロック・ボリュームでも途中まで手順は同じだ。異なるのはパーティション拡張以降の手順である。
- 管理コンソールでブート・ボリュームもしくはブロック・ボリュームを選択し、**[Edit Size or Performance]**をクリックして変更画面を表示する。
- 変更後の大きさを入力して**[Save Changes]**をクリックする。
- すると再スキャンに必要なコマンドが表示されるのでコピーしておく。サイズ変更は瞬間に終わる。
- 該当のインスタンスに接続して確認する。ボリュームサイズの変更は直ちに反映されるが、OSでは認識していないので確認できない。
$ 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.さきほどコピーした再スキャンのコマンドを実行する。
$ 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.再スキャンによってボリュームサイズが更新された。しかしパーティションサイズは変更されていない。
$ 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記事
OCIマニュアル
3. おわりに
いやー、便利になったものである。AWSのEBSでも2017年にはオンライン変更ができたのだから、今後はより機能的に近づいていくのだろう。そういえばOracle Databaseに対して、PostgreSQLなどの機能が近づいているのと同じ現象だろう。