前回の続き
前回から続いた内容なので、5から始まる連続した段落番号をつけている。
5. ブート・ボリュームを拡張する
前回書いたように、ブート・ボリュームもブロック・ボリュームも基本的な拡張方法は同じである。そのため、違う部分を中心に説明する。
5-1. ブート・ボリュームで考えること
ブート・ボリュームとブロック・ボリュームでは用途や制限事項が異なる。そのため以下の違いを理解する必要がある。
オンライン拡張できないので、OSを停止する必要がある(ブロック・ボリュームはOS停止不要)マニュアルの手順では、拡張操作用に別インスタンスが必要- エクスポート/インポート可能なカスタム・イメージの最大サイズは400 GB
新機能オンラインリサイズによって制限事項が変わった。従来のオフラインで実施するときは制限がある。
またCompute(IaaS)では、カスタム・イメージの活用は重要なプラクティスの一つだ。ブート・ボリュームのサイズはコンパクトにして、データなどはブロック・ボリュームに配置しよう。
カスタム・イメージの詳細は以下のマニュアルを参照のこと。
5-2. ブート・ボリュームの拡張方法
ブート・ボリュームの拡張方法は3通りの方法がある。1はマニュアルで紹介されている方法で、2はoci-growfs
を使う方法だ。ただし2が使用できるのは、Oracle Linux 7/8でxfsファイルシステムのときに限られる。
- インスタンスを停止し、別の作業用インスタンスで拡張する
- インスタンスを停止/起動したあと、自インスタンス内で拡張する
- オンラインで拡張する
3のオンラインの方法は次の記事を見てほしい。
5-2-1. 全体の手順
それぞれの手順の流れは以下のとおり。この手順を見るとoci-growfsを使う方法がとても簡単なことが分かる。次の5-3では「2. ボリュームの拡張」の手順から説明する。
1. ブート・ボリュームのバックアップ(推奨)
1-1. バックアップを取得する
2. ボリュームの拡張
2-1. インスタンスを停止する
2-2. ブート・ボリュームをデタッチする
2-3. ブート・ボリュームを拡張する
【作業用インスタンスで拡張する方法】
3. パーティションとファイルシステムの拡張
3-1. 作業用インスタンスでブート・ボリュームをアタッチする
3-2. パーティションを拡張する
3-3. ファイルシステムに破損がないことを確認する
3-4. ブート・ボリュームをマウントする
3-5. ファイルシステムを拡張する
3-6. ブート・ボリュームをアンマウントする
3-7. 作業用インスタンスでブート・ボリュームをデタッチする
3-8. 元のインスタンスでブート・ボリュームをアタッチする
3-9. インスタンスを起動する
【oci-growfsで拡張する方法】
3. パーティションとファイルシステムの拡張
3-1. ブート・ボリュームをアタッチする
3-2. インスタンスを起動する
3-3. oci-growfsでパーティションとファイルシステムを拡張する
5-3. ブート・ボリュームを拡張する
これは共通の手順である。管理コンソールやCLIなどでインスタンスを停止してから、ブート・ボリュームを拡張する。
-
ブート・ボリュームを拡張するインスタンスを停止する。
-
Computeインスタンスの詳細ページで**[Boot Volume(ブート・ボリューム)]**を選択し、ブート・ボリュームをデタッチする。ステータスが「Detached(デタッチ済み)」に変わると完了だ。
-
ブート・ボリュームをクリックして詳細ページを表示する。
-
**[Edit Size or Performance(サイズもしくはパフォーマンスの編集)]**をクリックして、今回は100 GBに変更する。ステータスが「Provisioning(プロビジョニング中)」から「Available(利用可能)」に変わると完了だ。
-
次は実行したい方法に応じて「5-4. 作業用インスタンスで拡張する方法」もしくは「5-5. oci-growfsで拡張する方法」に進む。オンラインで実行するときはoci-growfsを使用すること。
5-4. 作業用インスタンスで拡張する
この方法ではパーティション拡張に、別の作業用インスタンスを使用する。前のステップでボリューム自体は拡張したので、パーティションとファイルシステムを拡張する。
5-4-1. パーティションを拡張する
- 作業用インスタンスの詳細ページから**[Attached Block Volumes(アタッチされたブロック・ボリューム)]**を選択して、拡張するブート・ボリュームをアタッチする。
- ATTACHMENT TYPE : paravirtualized
- Access: Read/Write
- BLOCK VOLUME NAME: 拡張するブート・ボリューム
- IN-TRANSIT ENCRYPTION: not check(disable)
2.作業用インスタンスにsshログインしてボリュームを確認する。lsblk
で確認すると/dev/sdbとして認識されている。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 46.6G 0 disk ★拡張対象のブート・ボリューム
├─sdb2 8:18 0 8G 0 part
├─sdb3 8:19 0 38.4G 0 part ★これから拡張するパーティション
└─sdb1 8:17 0 200M 0 part
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
3.growpartでパーティションを拡張する。「growpart デバイス名 パーティション番号
」のように指定する。デバイス名とパーティション番号の間には空白が必要なことに注意する。Oracle Linux 6ではワーニングが出るが無視してよい。
# growpart /dev/sdb 3
CHANGED: disk=/dev/sda partition=3: start=17188864 old: size=80486399,end=97675263 new: size=192526302,end=209715166
重要
パーティション拡張がサポートされているのは最後のパーティションに限られる。必ずデバイス最後のパーティション番号を指定すること。
4.パーティションサイズを確認すると、sdb3が98.6Gに拡張されている。初回実行するとワーニングが表示されるのでFを入力する。
# parted /dev/sdb print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 EFI System Partition boot
2 211MB 8801MB 8590MB linux-swap(v1)
3 8801MB 107GB 98.6GB xfs ★拡張されたパーティション
5-4-2. ファイルシステムを拡張する
ファイルシステムを拡張することで、ようやく利用可能な領域が増える。ext4とxfsではコマンドが違うのでそれぞれ説明する。
xfsファイルシステムを拡張する
1.ファイルシステムを拡張する前に、破損箇所が無いことを確認する。
# xfs_repair -n /dev/sdb3
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
★中略★
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done ★正常終了
もしエラー表示されたときには次のように-n
オプションを付けないで実行する。オプションを付けないと実際に修復作業が実行される。
# xfs_repair <デバイス名>
2.ボリュームをマウントする。
# mkdir /mnt/tmp
# mount /dev/sdb3 /mnt/tmp
3.xfsファイルシステムを拡張する。
# xfs_growfs -d /mnt/tmp
meta-data=/dev/sdb3 isize=256 agcount=4, agsize=2515200 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0 rmapbt=0
= reflink=0
data = bsize=4096 blocks=10060800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4912, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 10060800 to 24065787
4.ディスクの空きを確認すると90Gに拡張されている。
# df -h /mnt/tmp
Filesystem Size Used Avail Use% Mounted on
/dev/sdb3 92G 1.9G 90G 2% /mnt/tmp
ext4ファイルシステムを拡張する
1.ファイルシステムを拡張する前に、破損箇所が無いことを確認する。
# e2fsck -f /dev/sdb3
e2fsck 1.43-WIP (20-Jun-2013)
/dev/sdb1: clean, 12/6553600 files, 715350/26213888 blocks
2.ボリュームをマウントする。
# mkdir /mnt/tmp
# mount /dev/sdb3 /mnt/tmp
3.ext4ファイルシステムを拡張する。
# resize2fs /dev/sdb3
resize2fs 1.43-WIP (20-Jun-2013)
Filesystem at /dev/sdb1 is mounted on /mnt/vol01; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 19
The filesystem on /dev/sdb1 is now 78642939 blocks long.
4.ディスクの空きを確認すると、90Gに拡張されている。
# df -h /mnt/tmp
Filesystem Size Used Avail Use% Mounted on
/dev/sdb3 92G 1.9G 90G 2% /mnt/tmp
5-4-3. ブート・ボリュームを元のインスタンスでアタッチする
- ボリュームを作業用インスタンスからアンマウントする。次のようにfindmntの結果が1ならばアンマウントされている。
# umount /mnt/tmp
# findmnt /mnt/tmp; echo $?
1
2.作業用インスタンスの詳細ページから**[Attached Block Volumes(アタッチされたブロック・ボリューム)]**を選択し、ボリュームをデタッチする。
3.元のインスタンスの詳細ページで**[Boot Volume(ブート・ボリューム)]**を選択し、ブート・ボリュームをアタッチする。
4.ステータスが「Attached(アタッチ済み)」になったら、Computeインスタンスを起動する。
5.次に「5-6. 拡張したボリュームを確認する」に進む。
5-5. oci-growfsで拡張する
oci-growfsを使うと、作業用インスタンスが無くてもブート・ボリュームのパーティションやファイルシステムを拡張できる。ただし、使用できるのはOracle Linux 7/8だけで、他のLinux OSやxfs以外のファイルシステムでは利用できない。
実態はシェルスクリプトなので、やる気になれば他のLinux OSでも実行できるのだが...。
5-5-1. oci-growfsとは
oci-growfsはOracle Linux 7だけで提供されているコマンドである。次の結果から分かるように、oci-utilsに含まれているシェルスクリプトだ。
$ rpm -qf /usr/libexec/oci-growfs
oci-utils-0.9.0-1.el7.noarch
$ wc -l /usr/libexec/oci-growfs
112 /usr/libexec/oci-growfs ★112行のシェルスクリプト
短いスクリプトなので読んでみると、やっていることは61行目に集約されている。パーティションの拡張とxfsファイルシステムの拡張である。またマウントして実行するのでファイルシステムの破損確認は実施していない。
growpart $1 $2 --dry-run && confirm ${F_VALUE} && growpart $1 $2 && xfs_growfs
5-5-2. パーティションとファイルシステムを拡張する
oci-growfsでは他のインスタンスを使わないので、すべて拡張対象のインスタンスで実行する。また、ここまでオンラインで実行しているときにはインスタンスは起動済みなので、3のsshログインに進む。
-
Computeインスタンスの詳細ページで**[Boot Volume(ブート・ボリューム)]**を選択し、ブート・ボリュームをアタッチする。ステータスが「attached(アタッチ済み)」に変わると完了だ。
-
Computeインスタンスを起動する。
-
該当インスタンスにsshログインする。
-
現在のディスクを見ると46.6Gから100Gに拡張されているが、パーティションやファイルシステムは以前と同じになっている。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk ★100Gに拡張されている
├─sda2 8:2 0 8G 0 part [SWAP]
├─sda3 8:3 0 91.8G 0 part /
└─sda1 8:1 0 200M 0 part /boot/efi
ファイルシステムのサイズは以前と同じ。
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 39G 1.9G 37G 5% / ★ルート・ファイルシステムは39G
パーティション・サイズも以前と同じ。
# parted /dev/sda print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 EFI System Partition boot
2 211MB 8801MB 8590MB linux-swap(v1)
3 8801MB 50.0GB 41.2GB xfs ★
5./usr/libexec/oci-growfs
コマンドでパーティションとファイルシステムを拡張する。パスが通っていないのでフルパスを入力すること。
# /usr/libexec/oci-growfs
CHANGE: disk=/dev/sda partition=3: start=17188864 old: size=80486399,end=97675263 new: size=192526302,end=209715166
Confirm? [y/n]: y ★yを入力する
CHANGED: disk=/dev/sda partition=3: start=17188864 old: size=80486399,end=97675263 new: size=192526302,end=209715166
meta-data=/dev/sda3 isize=256 agcount=4, agsize=2515200 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0 rmapbt=0
= reflink=0
data = bsize=4096 blocks=10060800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4912, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 10060800 to 24065787
ヒント
oci-growfsは、ルートパーティションとファイルシステムを、現在のボリュームサイズまで拡張するコマンドだ。そのためルートパーティションを拡張する以外の目的では使用できない。
5-6. 拡張したボリュームを確認する
すべての作業が終了したので、ディスクの状況を確認する。するとルート・パーティションは拡張され、サイズは39Gから92GBになっている。これで作業は終了だ。
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 92G 1.9G 90G 2% / ★92Gに拡張
6. まとめ
ブート・ボリューム/ブロック・ボリューム共通
- クラウドではLVMを使わずに、ボリューム自体を拡張することが多い
- 1つのボリュームのサイズは約50 GBから32 TBまで(Windowsのブート・ボリュームの最小サイズは256 GB)
- ボリュームは拡張できるが、縮小できない
- 拡張できるパーティションは、そのボリュームの最後のパーティションに限られる
- オンラインでボリュームを拡張できる
- 拡張には大きく分けて「ボリュームの拡張」「パーティションの拡張」「ファイルシステムの拡張」という3つのステップが必要
- パーティションの拡張には
growpart
コマンドが便利
ブート・ボリューム固有
- ブート・ボリュームはLVMを使わずに構成されている
-
oci-growfs
コマンドを使うと、パーティションとファイルシステムを簡単に拡張できる
7. 参考資料
Oracle Cloud Infrastructureマニュアル(日本語)
Oracle Cloud Infrastructureマニュアル(英語)
その他