次の方法で共有


Linux VM の仮想ハード ディスクを拡張する

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

この記事では、Linux 仮想マシン (VM) の OS ディスクとデータ ディスクの拡張について説明します。 データ ディスクを追加してストレージ スペースを追加することも、既存のデータ ディスクを拡張することもできます。 Azure の Linux VM では、通常、オペレーティング システム (OS) の既定の仮想ハード ディスク サイズは 30 GB です。 この記事では、OS ディスクまたはデータ ディスクの拡張について説明します。 ストライプ ボリュームのサイズを拡大することはできません。

OS ディスクの最大容量は 4,095 GiB です。 ただし、多くのオペレーティング システムは既定でマスター ブート レコード (MBR) でパーティション分割されます。 MBR では、使用可能なサイズが 2 TiB に制限されています。 2 TiB 以上が必要な場合は、データ ストレージ用のデータ ディスクのアタッチを検討してください。 OS ディスク上にデータを保存する必要があり追加のスペースが必要な場合は、ディスクを GUID パーティション テーブル (GPT) に変換します。

警告

ディスクの拡張操作を実行する前に、ファイル システムが正常な状態であること、ディスク パーティション テーブルの種類 (GPT または MBR) で新しいサイズがサポートされていること、およびデータがバックアップされていることを、常に確認します。 詳細については、Azure Backup のクイックスタートに関する記事を参照してください。

オペレーティング システム内の Azure データ ディスク オブジェクトを識別する

データ ディスクの拡張時に、その VM 上にいくつかのデータ ディスクが存在している場合は、Azure LUN を Linux デバイスに関連付けるのが困難な場合があります。 OS ディスクを拡張する必要がある場合は、Azure portal で明確に OS ディスクとしてラベルが付けられます。

まず、df コマンドを使用して、ディスク使用率、マウント ポイント、デバイスの関係を特定します。

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

ここでは、たとえば、/opt/db/data ファイルシステムがほぼ満杯で、/dev/sdd1 パーティションに配置されていることがわかります。 df の出力には、ディスクがデバイス パスと fstab の UUID (推奨) のどちらを使用してマウントされているかに関係なく、デバイス パスが表示されます。 また、ファイル システムの形式を示す Type 列も書き留めます。 この形式は後で重要になります。

次に、/dev/disk/azure/scsi1 の内容を調べて、/dev/sdd に関連付ける LUN を見つけます。 次の ls コマンドの出力は、Azure portal で確認すると、Linux OS 内の /dev/sdd と呼ばれるデバイスが LUN1 に配置されていることを示します。

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

Azure マネージド ディスクの拡張

ダウンタイムなしで拡張する

VM の割り当てを解除せずに、マネージド ディスクを拡張できます。 ディスクのホスト キャッシュ設定によって、VM の割り当てを解除せずにデータ ディスクを拡張できるかどうかは変わりません。

この機能には次の制限があります。

  • データ ディスクでのみサポートされます。
  • Standard HDD、Standard SSD、または Premium SSD ディスクが 4 TiB 以下の場合は、4 TiB を超えて拡張する前に、VM の割り当てを解除し、ディスクをデタッチします。 これらのディスクの種類のいずれかが既に 4 TiB を超えている場合は、VM の割り当てを解除してディスクをデタッチすることなく拡張できます。 これは、Premium SSD v2 または Ultra Disks には適用されません。
  • 共有ディスクではサポートされていません。
  • 次のいずれかをインストールして使います。
  • 一部のクラシック VM では使用できません。 このスクリプトを使用して、ダウンタイムなしで拡張できるクラシック VM SKU の一覧を取得してください。

Ultra Disk と Premium SSD v2 で拡張する

Ultra Disks と Premium SSD v2 ディスクの拡張には、次の追加の制限があります。

  • ディスクがスナップショットからハイドレートされているときなど、そのディスク上でデータのバックグラウンド コピーも行われている間は、ディスクを拡張することはできません。
  • Ultra Disks または Premium SSD v2 ディスクに NVMe コントローラーを使用している VM をダウンタイムなしで拡張することはできません。

リージョン別の提供状況

Ultra Disks と Premium SSD v2 ディスクのサイズ変更は、現在、次のリージョンを除くすべての Premium SSD v2 および Ultra 対応リージョンで利用できます。

  • 米国西部 2
  • 西ヨーロッパ
  • 米国東部

Azure Managed Disks の拡張

最新の Azure CLI がインストールされ、az login を使用して Azure アカウントにサインインしていることを確認します。

この記事では、少なくとも 1 つのデータ ディスクが接続され、準備ができている Azure の既存の VM が必要です。 使用できる VM がまだない場合は、データ ディスクを含む VM の作成と準備に関する記事をご覧ください。

以下のサンプルでは、myResourceGroupmyVM などのパラメーター名を各自の値に置き換えてください。

重要

ダウンタイムなしで拡張する」の要件をディスクが満たしている場合は、手順 1 と 3 を省略できます。

既存のディスクの縮小はサポートされておらず、データが失われる場合があります。

ディスクを拡張した後、大きいディスクを利用するには、オペレーティング システム内のボリュームを拡張する必要があります。

  1. 仮想ハード ディスクに対する操作は、実行中の VM では実行できません。 az vm deallocate を使用して VM の割り当てを解除します。 次の例では、myResourceGroup という名前のリソース グループ内の myVM という VM の割り当てを解除します。

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    注意

    仮想ハード ディスクを拡張するには、VM の割り当てを解除する必要があります。 az vm stop で VM を停止すると、コンピューティング リソースは解放されません。 コンピューティング リソースを解放するには、az vm deallocate を使用します。

  2. az disk list を使用して、リソース グループに含まれるマネージド ディスクの一覧を表示します。 次の例では、myResourceGroup という名前のリソース グループに含まれるマネージド ディスクの一覧を表示します。

    az disk list \
        --resource-group myResourceGroup  \
        --query '[*].{Name:name,size:diskSizeGB,Tier:sku.tier}' \
        --output table
    

    az disk update を使用して、必要なディスクを拡張します。 次の例では、myDataDisk という名前のマネージド ディスクを 200 GB に拡張します。

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    注意

    マネージド ディスクを拡張すると、更新されたサイズがマネージド ディスクの最も近いサイズに切り上げられます。 マネージド ディスクの利用可能なサイズとレベルの表については、「Azure Disk Storage の課金について」を参照してください。

  3. az vm start を使用して VM を起動します。 次の例では、myResourceGroup という名前のリソース グループ内の myVM という VM を起動します。

    az vm start --resource-group myResourceGroup --name myVM
    

ディスク パーティションとファイル システムの拡張

Note

パーティションのサイズ変更を実行するために使用できるツールは多数ありますが、このドキュメントの残りの部分で詳しく説明するツールは、cloud-init などの特定の自動化プロセスで使用されるツールと同じです。 ここで説明されているように、gdisk パッケージの growpart ツールを使用すると、GUID パーティション テーブル (GPT) ディスクとの汎用的な互換性が提供されます。これは、fdisk などの以前のバージョンの一部のツールで GUID がサポートされていなかったためです。

変更されたディスク サイズの検出

前述の手順を使用してダウンタイムなしでデータ ディスクが拡張された場合、(通常、起動プロセス中にしか発生しない) デバイスの再スキャンが行われるまで、報告されるディスク サイズは変化しません。 この再スキャンは、次の手順を使い、オンデマンドで呼び出すことができます。 以下の例では、このドキュメント内の方法を使用して、データ ディスクが現在 /dev/sda であり、256 GiB から 512 GiB にサイズ変更されたことを検出します。

  1. fdisk -l /dev/sda からの出力の最初の行に表示されている現在認識されているサイズを確認します

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. このデバイスの再スキャン ファイルに 1 文字を挿入します。 例の中の sda への参照に注意してください。 別のディスク デバイスがサイズ変更されるのであれば、このディスク識別子は別のものになります。

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. 新しいディスク サイズが認識されたことを確認する

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

この記事の残りの部分では、OS レベルでボリュームのサイズを増やす手順の例として OS ディスクを使います。 拡張されたディスクがデータ ディスクの場合は、前のガイダンスを使用してデータ ディスク デバイスを特定し、ガイドラインとして次の手順に従って、必要に応じてデータ ディスク デバイス (/dev/sda など)、パーティション番号、ボリューム名、マウント ポイント、ファイル システム形式を置き換えます。

Linux OS に関するすべてのガイダンスは汎用的なものと考える必要があり、任意のディストリビューションに適用できます。ただし、一般には指定されたマーケットプレース パブリッシャーの規約と一致します。 Red Hat をベースとするか、Red Hat との互換性を必要とするディストリビューションでのパッケージ要件については、Red Hat のドキュメントを参照してください。

OS ディスクのサイズを増やす

次の手順は、動作保証済み Linux ディストリビューションに適用されます。

Note

続行する前に、VM の完全なバックアップ コピーを作成するか、少なくとも OS ディスクのスナップショットを取得してください。

Ubuntu 16.x 以降では、サイズ変更操作用の空き領域が少しでもある場合、OS ディスクとファイルシステムのルート パーティションは、ルート ディスク上のすべての隣接した空き領域を利用するために cloud-init によって自動的に拡張されます。 この場合、シーケンスは単純になります

  1. 上記の説明のように OS ディスクのサイズを拡大します
  2. VM を再起動し、root ユーザー アカウントを使用して VM にアクセスします。
  3. OS ディスクに増加したファイル システム サイズが表示されていることを確認します。

次の例に示すように、OS ディスクはポータルから 100 GB にサイズ変更されています。 / にマウントされた /dev/sda1 ファイル システムには 97 GB と表示されます。

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

クラシック VM SKU のダウンタイムなしでの拡張のサポート

クラシック VM SKU を使っている場合は、ダウンタイムなしでディスクの拡張がサポートされていない可能性があります。

次の PowerShell スクリプトを使用して、使用できる VM SKU を特定します。

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}