Azure 仮想マシン ディスク追加・拡張・削除

スポンサーリンク

Microsoft AzureのLinux仮想マシンへのディスクの追加・拡張・削除の操作をまとめます。Azureの操作ではなくRedhat基本操作の比重が多いですが、fdiskコマンドやpartedコマンドなどの忘れがちなファイルシステム操作含めてまとめています。

参考資料

参考になる公式ドキュメントを以下に示します。

事前準備

以下、仮想ネットワーク等のリソースを作成します。

az group create --name MyResourceGroup --location japaneast

az network vnet create \
    -g MyResourceGroup \
    -n MyVnet \
    --address-prefix 172.16.0.0/16 \
    --subnet-name MySubnet \
    --subnet-prefix 172.16.0.0/24

az network nsg create -g MyResourceGroup -n MyNsg

az network nsg rule create \
  --resource-group MyResourceGroup \
  --nsg-name MyNsg \
  --name MyNsgRule0100 \
  --priority 100 \
  --destination-port-ranges 22 \
  --access Allow \
  --protocol Tcp

az vm create \
  --resource-group MyResourceGroup \
  --name linux010 \
  --image Oracle:Oracle-Linux:ol85-lvm:8.5.4 \
  --size Standard_B2s \
  --admin-username azureuser \
  --authentication-type ssh \
  --ssh-key-values ~/.ssh/authorized_keys

ディスクの追加

操作例(1) 新規ディスクを追加する場合

Azureの操作

az vm disk attachコマンドで引数newを与えるとディスクの新規作成を追加を同時に行います。

az vm disk attach \
  --resource-group MyResourceGroup \
  --vm-name linux010 \
  --name linux010-disk01 \
  --new \
  --size-gb 50

後続の説明の都合上、もう1つディスクを追加します。

az vm disk attach \
  --resource-group MyResourceGroup \
  --vm-name linux010 \
  --name linux010-disk02 \
  --new \
  --size-gb 50

仮想マシンにログインし、lsblkコマンドやfdiskコマンドでディスクが追加された事を確認します。以下出力例を見ると、確かにsdc, sddの2つのディスクが追加されている事が分かります。

OS再起動なしにディスクの追加は認識されます。

[root@linux010 ~]# lsblk -o NAME,HCTL,SIZE,MOUNTPOINT 
NAME               HCTL        SIZE MOUNTPOINT
sda                2:0:0:0      30G 
├─sda1                         800M /boot
├─sda2                        28.7G 
│ ├─rootvg-rootlv             18.7G /
│ └─rootvg-crashlv              10G /var/crash
├─sda14                          4M 
└─sda15                        495M /boot/efi
sdb                3:0:1:0       8G 
└─sdb1                           8G /mnt
sdc                5:0:0:0      50G 
sdd                5:0:0:1      50G 
sr0                1:0:0:0     628K 

さて、sdc, sddのどちらがlinux010-disk01でしょうか。異なるサイズのディスクを追加した場合は50G等のディスクサイズからデバイスファイルを判断できますが、ディスクサイズが同じ場合は、LUNから判断します。前述の出力でHCTLは「Host, Control, Target, Lun」の略称ですので、5:0:0:0ならばLUNは0になります。

追加されたディスクのLUNを調べるには、仮想マシンの情報をaz vm showで調べましょう。調査例は以下の通りです。

$ az vm show \
  --resource-group MyResourceGroup \
  --name linux010 \
  --query "storageProfile.dataDisks"
[
  {
    "caching": "None",
    "createOption": "Empty",
    "deleteOption": "Detach",
    "detachOption": null,
    "diskIopsReadWrite": null,
    "diskMBpsReadWrite": null,
    "diskSizeGb": 50,
    "image": null,
    "lun": 0,
    "managedDisk": {
      "diskEncryptionSet": null,
      "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/linux010-disk01",
      "resourceGroup": "MyResourceGroup",
      "storageAccountType": "Premium_LRS"
    },
    "name": "linux010-disk01",
    "toBeDetached": false,
    "vhd": null,
    "writeAcceleratorEnabled": null
  },
  {
    "caching": "None",
    "createOption": "Empty",
    "deleteOption": "Detach",
    "detachOption": null,
    "diskIopsReadWrite": null,
    "diskMBpsReadWrite": null,
    "diskSizeGb": 50,
    "image": null,
    "lun": 1,
    "managedDisk": {
      "diskEncryptionSet": null,
      "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/linux010-disk02",
      "resourceGroup": "MyResourceGroup",
      "storageAccountType": "Premium_LRS"
    },
    "name": "linux010-disk02",
    "toBeDetached": false,
    "vhd": null,
    "writeAcceleratorEnabled": null
  }
]

ポータル(GUI)で確認する場合は、仮想マシンのディスクの画面でLUNを確認します。

仮想マシンに追加されたディスクのLUNの確認

OSの操作

ここまでの調査が完了したら、後はディスク上で動作するアプリケーションやOSのマニュアルに従って操作します。この先の操作はAzureとは一切関係ありません。以下ディスクをマウントする操作例を示します。

ディスクをフォーマットし、適当なディレクトリにマウントします。

parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdc1
partprobe /dev/sdc1

mkdir /var/lib/mysql
mount /dev/sdc1 /var/lib/mysql

ディスクのUUIDを調べます。

[root@linux010 ~]# blkid
/dev/sdb1: UUID="2ef459be-57e8-4d3d-9f55-afc3054740dc" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="43389d03-d0ca-4538-9ebc-9fd606c803f8"
/dev/sdb2: UUID="pAYVpP-05lu-r3p7-37P2-v01I-Hv02-uaC2z6" TYPE="LVM2_member" PARTUUID="455a34ba-6708-4de8-b9b1-9bb0e3f689db"
/dev/sdb15: SEC_TYPE="msdos" UUID="0617-FC0F" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="9c3f245d-0723-47ee-b4db-d6f38cf980c9"
/dev/sda1: UUID="bfc9975e-1c29-4580-b0aa-d6011f9eb1cb" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b5ee1715-01"
/dev/mapper/rootvg-rootlv: UUID="b3da1ac3-d082-4b9b-a666-c0e34765e30b" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/rootvg-crashlv: UUID="64c4c734-36ef-4a0c-ac3e-3e36e34bc5eb" BLOCK_SIZE="512" TYPE="xfs"
/dev/sdb14: PARTUUID="642772e9-4083-4440-b27c-689d96ba0cf5"
/dev/sdc1: UUID="43064e6f-40ac-4602-82c8-5f2b1923f5a1" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="8fa0907f-cd17-4d64-89c1-63be67b65dda"

OS起動後も自動的にマウントされるように、/etc/fstabを編集します。

設定を誤るとOS自体が起動しなくなるので、以下はコピペしないように注意する。

cat << EOF >> /etc/fstab
UUID=43064e6f-40ac-4602-82c8-5f2b1923f5a1 /var/lib/mysql xfs defaults 0 0
EOF

操作例(2) 既存ディスクを追加する場合

Azureの操作

前述の操作はディスクの新規作成と追加を同時に行いましたが、ディスク作成と追加を分けて操作したり、既存ディスクを追加したりする事もできます。ディスクを新規作成する操作は以下の通りです。

将来変わる可能性もありますが、az vm disk attachコマンドよりもaz disk createコマンドの方がより詳細なオプションを指定できます。例えば、以下に示すmax-sharesオプションはaz disk createのみ指定可能なオプションです。

az disk create \
  --resource-group MyResourceGroup \
  --name MySharedDisk \
  --size-gb 50 \
  --location japaneast \
  --max-shares 2

既存ディスクを追加する場合は、引数nameにディスクのIDを指定します。

DISK_ID=$(az disk show \
  --resource-group MyResourceGroup \
  --name MySharedDisk \
  --query 'id' \
  --output tsv )

az vm disk attach \
  --resource-group MyResourceGroup \
  --vm-name linux010 \
  --name ${DISK_ID}

OSの操作

ディスクの追加が完了したら、mountコマンド等を用いてディスクをマウントします。以降の操作は、「新規ディスクを追加する場合」と同じですので、説明を省略します。

ディスクの拡張

LiveResizeの有効化

OSの停止なしに仮想ディスクを拡張する機能、俗に言う「オンライン拡張」の機能は、Azureでは「プレビュー」の位置付けでサポート対象外です。使用する場合は、自己責任で使用する必要があります。プレビュー機能を有効にするには以下のような操作をします。

az feature register --namespace Microsoft.Compute --name LiveResize

プレビュー機能を有効にしているか否かを確認するには、以下コマンドを使用します。

az feature show --namespace Microsoft.Compute --name LiveResize

操作例(1) データディスクを拡張する場合

Azureの操作

仮想マシンの割り当て解除

原則、仮想マシンの起動中はディスクの拡張はできません。以下の操作で仮想マシンの割り当てを解除します。

前述のプレビュー機能「LiveResize」を有効にしている場合は、割り当て解除の操作を省略できます。

az vm deallocate \
  --resource-group MyResourceGroup \
  --name linux010 
ディスクの拡張

以下のコマンドでディスクを拡張します。

az disk update \
    --resource-group MyResourceGroup \
    --name linux010-disk01 \
    --size-gb 200
仮想マシンの起動

仮想マシンを起動します。

前述のプレビュー機能「LiveResize」を有効にしている場合は、起動の操作を省略できます。

az vm start \
  --resource-group MyResourceGroup \
  --name linux010 

OSの操作

ディスクの再スキャン

ディスク拡張後、OSがどのようにディスクを認識しているかを確認します。もし、プレビュー機能「LiveResize」を有効にしてOS再起動をしていない場合は、OSはディスクの拡張を認識していません。以下のように200Gに拡張したにも関わらず、50Gと認識したままです。

[root@linux010 ~]# lsblk -o NAME,HCTL,SIZE,MOUNTPOINT 
NAME               HCTL        SIZE MOUNTPOINT
sda                3:0:1:0       8G 
└─sda1                           8G /mnt
sdb                2:0:0:0      30G 
├─sdb1                         800M /boot
├─sdb2                        28.7G 
│ ├─rootvg-rootlv             18.7G /
│ └─rootvg-crashlv              10G /var/crash
├─sdb14                          4M 
└─sdb15                        495M /boot/efi
sdc                5:0:0:0      50G 
└─sdc1                          50G /var/lib/mysql
sdd                5:0:0:1      50G 
sde                5:0:0:2      50G 
sr0                1:0:0:0     628K

以下のような操作でディスクを再スキャンします。なお、sdb, sdc, sddなどのデバイス名は適宜の変更をお願いします。

echo 1 > /sys/block/sdc/device/rescan

ディスクサイズが200Gと認識された事を確認します。

[root@linux010 ~]# lsblk -o NAME,HCTL,SIZE,MOUNTPOINT
NAME               HCTL        SIZE MOUNTPOINT
sda                3:0:1:0       8G 
└─sda1                           8G /mnt
sdb                2:0:0:0      30G 
├─sdb1                         800M /boot
├─sdb2                        28.7G 
│ ├─rootvg-rootlv             18.7G /
│ └─rootvg-crashlv              10G /var/crash
├─sdb14                          4M 
└─sdb15                        495M /boot/efi
sdc                5:0:0:0     200G 
└─sdc1                          50G /var/lib/mysql
sdd                5:0:0:1      50G 
sde                5:0:0:2      50G 
sr0                1:0:0:0     628K 
パーティションの拡張

拡張するディスクをアンマウントします。

umount /dev/sdc1 

partedコマンドなどを用いてパーティションを拡張します。

parted /dev/sdc

partedコマンドは対話式の操作をします。以下、操作例を示します。まず、引数にデバイスファイルを指定して実行します。

[root@linux010 ~]# parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) 

printコマンドを実行しますと、現在のパーティションの状態を確認できます。/dev/sdcには215GBのディスク容量があり、そのうちパーティション1に53.7BGが割り当てられている事が分かります。

(parted) print                                                            
Model: Msft Virtual Disk (scsi)
Disk /dev/sdc: 215GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  53.7GB  53.7GB  xfs          xfspart

(parted) 

resizeコマンドを使用すると、パーティションのサイズを変更できます。対話形式で、パーティション番号と拡張するサイズを聞かれますので、これに返答します。

(parted) resizepart                                                       
Partition number? 1                                                       
End?  [53.7GB]? 215GB                                                     
(parted) 
ファイルシステムの拡張

/dev/sdc1をマウントします。

mount /dev/sdc1

ファイルシステムを拡張します。

xfs_growfsコマンドはXFSを拡張する操作です。もし、ファイルシステムがext4等ならばresize2fsコマンドを使用ください。

xfs_growfs /dev/sdc1

/dev/sdc1が拡張された事を確認します。

[root@linux010 ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    1.8G     0  1.8G   0% /dev
tmpfs                       1.8G     0  1.8G   0% /dev/shm
tmpfs                       1.8G   17M  1.8G   1% /run
tmpfs                       1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/mapper/rootvg-rootlv    19G  2.6G   17G  14% /
/dev/mapper/rootvg-crashlv   10G  104M  9.9G   2% /var/crash
/dev/sdb1                   794M  305M  490M  39% /boot
/dev/sdb15                  495M  5.1M  490M   2% /boot/efi
/dev/sda1                   7.9G   36M  7.4G   1% /mnt
tmpfs                       365M     0  365M   0% /run/user/1000
/dev/sdc1                   200G  1.5G  199G   1% /var/lib/mysql
[root@linux010 ~]# 

操作例(2) OSディスクを拡張する場合

Azureの操作

仮想マシンの割り当て解除

以下の操作で仮想マシンの割り当てを解除します。

前述のプレビュー機能「LiveResize」を有効にしてもOSディスクは仮想マシン起動中に拡張する事はできません。

az vm deallocate \
  --resource-group MyResourceGroup \
  --name linux010 
ディスクの拡張

OSディスクを拡張するには、OSディスク名を指定してaz disk updateコマンドを実行します。ですので、仮想マシンに対して「storageProfile.osDisk.name」等でクエリをかけてOSディスク名を調査したのちに、これを引数nameに与えます。

OS_DISK_NAME=$(az vm show \
  --resource-group MyResourceGroup \
  --name linux010 \
  --query "storageProfile.osDisk.name" \
  --output tsv )

az disk update \
    --resource-group MyResourceGroup \
    --name ${OS_DISK_NAME} \
    --size-gb 200
仮想マシンの起動

仮想マシンを起動します。

az vm start \
  --resource-group MyResourceGroup \
  --name linux010

OSの操作

OS起動後のディスク認識の確認

OS起動後、どのようにディスクを認識しているかを確認します。

以下/dev/sdeを見ると、「/」や「/var/crash」の領域はLVMとして設定されており拡張可能な事が分かります。Azureで提供される殆どの仮想マシンはLVMとして設定されている事が多く、OSディスク含めて拡張が可能です。

[azureuser@linux010 ~]$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT 
NAME               HCTL        SIZE MOUNTPOINT
sda                3:0:1:0       8G 
└─sda1                           8G /mnt
sdb                5:0:0:0     200G 
└─sdb1                         200G /var/lib/mysql
sdc                5:0:0:1      50G 
sdd                5:0:0:2      50G 
sde                2:0:0:0     200G 
├─sde1                         800M /boot
├─sde2                        28.7G 
│ ├─rootvg-rootlv             18.7G /
│ └─rootvg-crashlv              10G /var/crash
├─sde14                          4M 
└─sde15                        495M /boot/efi
パーティションの拡張

前述の/dev/sde2は28.7Gの状況で空きはありません。まずはパーティションを拡張する必要があります。データディスクの拡張で示した通り、partedコマンドでパーティションを拡張します。

[root@linux010 ~]# parted /dev/sde
GNU Parted 3.2
Using /dev/sde
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

物理パーティションを確認します。データディスクと時と異なり、以下のような警告が表示されます。Ignoreと入力し強行します。

(parted) print                                                            
Warning: Not all of the space available to /dev/sde appears to be used, you can
fix the GPT to use all of the space (an extra 356515840 blocks) or continue with
the current setting? 
Fix/Ignore? Ignore                                                           
Model: Msft Virtual Disk (scsi)
Disk /dev/sde: 215GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
14      1049kB  5243kB  4194kB                                     bios_grub
15      5243kB  524MB   519MB   fat16        EFI System Partition  boot, esp
 1      525MB   1364MB  839MB   xfs
 2      1364MB  32.2GB  30.8GB                                     lvm

(parted)

パーティションを拡張します。

(parted) resizepart                                                       
Partition number? 2                                                       
End?  [200GB]? 210GB                                                      
(parted) 

操作後、/dev/sde2が拡張されている事を確認します。

[root@linux010 ~]# lsblk -o NAME,HCTL,SIZE,MOUNTPOINT 
NAME               HCTL         SIZE MOUNTPOINT
sda                3:0:1:0        8G 
└─sda1                            8G /mnt
sdb                5:0:0:0      200G 
└─sdb1                          200G /var/lib/mysql
sdc                5:0:0:1       50G 
sdd                5:0:0:2       50G 
sde                2:0:0:0      200G 
├─sde1                          800M /boot
├─sde2                        194.3G 
│ ├─rootvg-rootlv              18.7G /
│ └─rootvg-crashlv               10G /var/crash
├─sde14                           4M 
└─sde15                         495M /boot/efi
[root@linux010 ~]# 
PV(物理ボリューム)の拡張

現在、物理ボリュームには空きはありません。Free PEが0と表示されている事を確認します。

[root@linux010 ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sde2
  VG Name               rootvg
  PV Size               <28.73 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7354
  Free PE               0
  Allocated PE          7354
  PV UUID               pAYVpP-05lu-r3p7-37P2-v01I-Hv02-uaC2z6
   

以下のような操作で、物理ボリュームを拡張します。

pvresize /dev/sde2

物理ボリュームには空きができた事を確認します。Free PEが0ではない事を確認します。

[root@linux010 ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sde2
  VG Name               rootvg
  PV Size               <194.31 GiB / not usable <1.61 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              49742
  Free PE               42388
  Allocated PE          7354
  PV UUID               pAYVpP-05lu-r3p7-37P2-v01I-Hv02-uaC2z6
   
LV(論理ボリューム)の拡張

以下のような操作で論理ボリュームを拡張します。「-L+150G」は150G拡張するという意味ですので、数字は環境に応じて適宜の変更をお願いします。

lvextend -r -L+150G /dev/mapper/rootvg-rootlv

操作後、「/dev/mapper/rootvg-rootlv」が拡張された事を確認します。

[root@linux010 ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    1.8G     0  1.8G   0% /dev
tmpfs                       1.8G     0  1.8G   0% /dev/shm
tmpfs                       1.8G   17M  1.8G   1% /run
tmpfs                       1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/mapper/rootvg-rootlv   169G  3.7G  166G   3% /
/dev/mapper/rootvg-crashlv   10G  104M  9.9G   2% /var/crash
/dev/sde1                   794M  305M  490M  39% /boot
/dev/sdb1                   200G  1.5G  199G   1% /var/lib/mysql
/dev/sde15                  495M  5.1M  490M   2% /boot/efi
/dev/sda1                   7.9G   36M  7.4G   1% /mnt
tmpfs                       365M     0  365M   0% /run/user/1000

ディスクの取り外し

OSの操作

取り外す対象のディスクをアンマウントします。

umount /var/lib/mysql

取り外したディスクを再起動時に誤ってマウントしないように、/etc/fstabを更新します。

sed -i '/var\/lib\/mysql/d' /etc/fstab

Azureの操作

az vm disk detachコマンドでディスクの取り外しができます。

az vm disk detach \
  --resource-group MyResourceGroup \
  --vm-name linux010 \
  --name linux010-disk01
タイトルとURLをコピーしました