【AzureVM】仮想マシンのOSディスク -ルートボリューム- を拡張する(Linux)

こんにちはますのです。
Azureの仮想マシンでディスク追加と一緒にルートボリュームも拡張しておくれというオーダーを頂きました。

そういえば、AWS触ってた時もLinuxのボリューム追加ってやったことなかったなぁと。
WindowsではGUI操作(コンピュータの管理からディスクの管理)でポチポチするだけだったので、改めてLinuxでの手順がパッと出てこなかったのです。手順を作ったので今後同じようなことがあってもきっと大丈夫という意味でもメモを残すのです。

やりたいこと

  • AzureVMのルートボリュームを初期値(30GB)から50GBに拡張する
  • イメージ:CentOS-based 8.2 Gen1をAzureのVirtual Machinesに作成

現時点のルートボリュームの容量を確認

確認方法はいくつかあるので、「lsblk」「df」コマンド等を使いましょう。
今回は初期設定で対象となる「/」に約30GB、sdb2として割り当たっていることが分かりました。

$ lsblk
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda        8:0    0    4G  0 disk
 L sda1    8:1    0    4G  0 part /mnt/resource
sdb        8:16   0   30G  0 disk
 L sdb1    8:17   0  500M  0 part /boot
 L sdb2    8:18   0   29G  0 part /
 L sdb14   8:30   0    4M  0 part
 L sdb15   8:31   0  495M  0 part /boot/efi
sr0        11:0   1  628K  0 rom
$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  442M     0  442M   0% /dev
tmpfs          tmpfs     458M     0  458M   0% /dev/shm
tmpfs          tmpfs     458M  6.3M  452M   2% /run
tmpfs          tmpfs     458M     0  458M   0% /sys/fs/cgroup
/dev/sdb2      xfs        30G  1.8G   28G   6% /
/dev/sdb1      xfs       496M   72M  424M  15% /boot
/dev/sdb15     vfat      495M  6.9M  488M   2% /boot/efi
/dev/sda1      ext4      3.9G   16M  3.7G   1% /mnt/resource
tmpfs          tmpfs      92M     0   92M   0% /run/user/1000

Azureポータル>Virtual Machines>対象のVM>ディスクをクリックすると、仮想マシンにアタッチされているディスクが確認できます。
「OSディスク」にアタッチされている「サイズ:30GB」が現在のOSリソースに割り当たっている容量となります。
現時点でルートボリュームにフルで設定されているようですね。

Rhel8.1で試した時はOSディスク:30GBでしたが、ルートボリュームは2GBだったのです。
設定するOSによってルートボリュームに割り振りされる容量は異なるようなので、確認したほうが良いかもしれないですね。

AzureVMのOSディスクを拡張する

それでは現時点の設定が30GBと確認出来たので、50GBとなるように20GBのディスクを追加してみましょう。
ざっくりした内容は以下の流れとなります。

  1. Azureポータル上でOSディスクを20GB拡張する
  2. サーバにSSH接続後、論理ボリュームを拡張する

Linuxでの論理ボリューム設定と、Azureで容量追加をしてあげるといった内容ですね。

ディスクの拡張をする場合、対象のAzureVMは停止している必要があります。
ディスク拡張をする際は事前に仮想マシンの停止を行いましょう。

AzureポータルでOSディスクの拡張をする

ディスクサイズを確認した画面より、対象のディスク名をクリックします。

  • サイズおよびパフォーマンス>カスタムディスクサイズ(GiB):設定したいディスクサイズへ変更
  • 今回の例は「50」とする>「サイズ変更」をクリック
  • 「左カラム:概要」をクリック>ディスク構成が指定したサイズになっていれば完了

AzureVMのOSディスクの拡張が完了したら、AzureVMを管理コンソール上から起動して、OS側での拡張設定を実施します。

Ubuntu など、cloud-init が予め有効なシステムでは、起動時に拡張が済んでいる場合があります。
今回テスト用に作ったCentOS8.2では起動時に拡張が済んでいました。

$ lsblk
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb        8:16   0   30G  0 disk
 L sdb2    8:18   0   49G  0 part /

参考情報:https://jpaztech.github.io/blog/vm/linux-expand-os-disk/

このブログ記事用にCentOSでメモを残していたら、この時点でルートボリューム拡張出来ているというオチ。
RHELや論理ボリューム構成(LV)の場合は拡張が必要になるそうなので、その場合は続いてOS側の拡張設定までやる必要があります。

Linux:OS側のディスク拡張を行う(物理・論理共通)

はい。だいぶ想定と違いますが、このままサーバディスク拡張設定のメモは残します。
ディスク拡張のコマンドは論理ボリュームでも物理ボリュームでも「growpart」コマンドを使うので、Linuxサーバにインストールされていない場合はインストールしましょう。

///インストール済か確認する
# sudo dnf list installed | grep growpart
cloud-utils-growpart.noarch                   0.29-3.el8                             @AppStream
///list installedで表示されなかった場合はインストール
# sudo dnf install -y cloud-utils-growpart

拡張する対象のディスクを確認する

# lsblk -p -o NAME,FSTYPE,SIZE,MOUNTPOINT
NAME              FSTYPE       SIZE MOUNTPOINT
/dev/sda                        20G
L /dev/sda1       xfs          500M /boot
L /dev/sda2       xfs           30G /

「lsblk」より対象のルートボリュームは「/dev/sda2」であることが分かります。
また、「FSTYPE:xfs」ということも確認することが出来ました。

growpartコマンドでパーティションを拡張する

「/dev/sda2」が対象となるため、指定するパーティション番号は「2」となります。

# sudo growpart /dev/sda 2

拡張されたかを確認します。

# lsblk /dev/sda2
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda2   8:2    0  50G  0 part /

ここから先の手順は物理ボリューム、論理ボリュームによって異なりますので環境に合わせて実施となります。

Linux:OS側のディスク拡張設定(物理ボリューム:PV)

「growpart」でパーティション拡張後に以下手順を実施します。

ファイルシステムを拡張する

コマンドはファイルシステムによって異なります。今回は「xfs」で拡張します。
・xfsの場合:xfs_growfs
・ext4の場合:resize2fs

# sudo xfs_growfs /

拡張されたか確認します。

# df -hT /
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda2      xfs    50G  2.8G   47G   6% /

ルートボリュームが50GBに拡張されたことを確認することが出来ました。
以上で物理ボリュームの拡張設定は完了となります。

Linux:OS側のディスク拡張設定(論理ボリューム:LV)

「growpart」でパーティション拡張後に以下手順を実施します。

PV(物理ボリューム)を拡張する

# sudo pvresize /dev/sda2
 Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

物理ボリュームが拡張されたか確認します。

# vgs
  VG        #PV #LV #SN Attr   VSize    VFree
  rootvg      1   5   0 wz--n- <50.00g  20.00g

物理ボリュームが50GBになり、20GBが使用可能領域となった状態です。

LV(論理ボリューム)を拡張する

# sudo lvextend -l +100%FREE /dev/rootvg/rootlv
 Size of logical volume rootvg/rootlv changed from <30.00 GiB to <50.00 GiB.
Logical volume rootvg/rootlv successfully resized.
今回は20GBを全て使うため、「-l 100%FREE」として利用可能領域を全て拡張しました。
数値で指定する場合は「sudo lvextend -L +20G /dev/rootvg/rootlv」として値を指定して拡張することも可能です。

ファイルシステムを拡張する

コマンドはファイルシステムによって異なります。今回は「xfs」で拡張します。
・xfsの場合:xfs_growfs
・ext4の場合:resize2fs

# sudo xfs_growfs /

拡張されたか確認します。

# df -hT /
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda2      xfs    50G  2.8G   47G   6% /

ルートボリュームが50GBに拡張されたことを確認することが出来ました。
以上で論理ボリュームの拡張設定は完了となります。

あまりLinuxの拡張作業をやったことが無かったと思ったのですが、CentOSを触っていることが多かったからかもしれないと思ったのでした。
このあたりはLinuxを触る場合必要になる手順となるので覚えていると幸せになれる気がするのです。またやる機会があれば試してみたい所存です。
最新情報をチェックしよう!