Azure CLI で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う

Linux 仮想マシン (VM) で起動エラーまたはディスク エラーが発生した場合、仮想ハード ディスク自体でトラブルシューティングの手順を実行することが必要な場合があります。 一般的な例として、/etc/fstab 内の無効なエントリによって VM の正常な起動が妨げられている場合が挙げられます。 この記事では、Azure CLI で仮想ハード ディスクを別の Linux VM に接続してエラーを修正し、元の VM を再作成する方法について詳しく説明します。

回復プロセスの概要

トラブルシューティングのプロセスは次のとおりです。

  1. 影響を受けている VM を停止します。
  2. VM の OS ディスクのスナップショットを作成します。
  3. OS ディスクのスナップショットからディスクを作成します。
  4. トラブルシューティングのために、新しい OS ディスクを別の Linux VM に接続してマウントします。
  5. トラブルシューティング用 VM に接続します。 ファイルを編集するか任意のツールを実行して、新しい OS ディスクの問題を解決します。
  6. 新しい OS ディスクのマウントを解除し、トラブルシューティング用 VM から切断します。
  7. 影響を受けている VM の OS ディスクを変更します。

上記のトラブルシューティングの手順を行うには、Azure CLI の最新版をインストールし、az login を使用して Azure アカウントにログインしておく必要があります。

手順 1、2、3、4、6、7 は、VM 修復コマンドを使用して自動化できます。 その他のドキュメントと手順については、「Azure 仮想マシンの修復コマンドを使用して Linux VM を修復する」を参照してください。

重要

この記事のスクリプトは、マネージド ディスクを使用している VM にのみ適用されます。

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

起動の問題を特定する

シリアル出力を調べて、VM が正常に起動できない理由を特定します。 一般的な例として、/etc/fstab に無効なエントリがある場合や、基になる仮想ハード ディスクが削除または移動されている場合が挙げられます。

az vm boot-diagnostics get-boot-log を使用して、ブート ログを取得します。 次の例では、myResourceGroup という名前のリソース グループの myVM という名前の VM からシリアル出力を取得します。

az vm boot-diagnostics get-boot-log --resource-group myResourceGroup --name myVM

シリアル出力を調べて、VM が起動できない理由を特定します。 シリアル出力に何も示されていない場合は、仮想ハード ディスクをトラブルシューティング用 VM に接続した後に、/var/log にあるログ ファイルを確認することが必要な場合があります。

VM を停止する

次の例では、myResourceGroup という名前のリソース グループから myVM という名前の VM を停止します。

az vm stop --resource-group MyResourceGroup --name MyVm

影響を受けている VM の OS ディスクのスナップショットを作成する

スナップショットは、VHD の完全な読み取り専用コピーです。 これを VM にアタッチすることはできません。 次の手順で、このスナップショットからディスクを作成します。 次の例は、'myVM' という名前の VM の OS ディスクから mySnapshot という 名前のスナップショットを作成します。

#Get the OS disk Id 
$osdiskid=(az vm show -g myResourceGroup -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)

#creates a snapshot of the disk
az snapshot create --resource-group myResourceGroupDisk --source "$osdiskid" --name mySnapshot

スナップショットからディスクを作成する

このスクリプトは、mySnapshot という名前のスナップショットから myOSDisk という名前のマネージド ディスクを作成します。

#Provide the name of your resource group
$resourceGroup="myResourceGroup"

#Provide the name of the snapshot that will be used to create Managed Disks
$snapshot="mySnapshot"

#Provide the name of the Managed Disk
$osDisk="myNewOSDisk"

#Provide the size of the disks in GB. It should be greater than the VHD file size.
$diskSize=128

#Provide the storage type for Managed Disk. Premium_LRS or Standard_LRS.
$storageType="Premium_LRS"

#Provide the OS type
$osType="linux"

#Get the snapshot Id 
$snapshotId=(az snapshot show --name $snapshot --resource-group $resourceGroup --query id -o tsv)

# Create a new Managed Disks using the snapshot Id.

az disk create --resource-group $resourceGroup --name $osDisk --sku $storageType --size-gb $diskSize --source $snapshotId

リソース グループとソース スナップショットが同じリージョンにない場合、az disk create を実行すると "リソースが見つかりません" というエラーが表示されます。 この場合は、--location <region> を指定して、ソース スナップショットと同じリージョンにディスクを作成する必要があります。

これで、元の OS ディスクのコピーが用意できました。 トラブルシューティングのために、この新しいディスクを別の Windows VM にマウントできます。

新しい仮想ハード ディスクを別の VM に接続する

次のいくつかの手順では、トラブルシューティングのために別の VM を使用します。 ディスクの内容を参照して編集するために、ディスクをこのトラブルシューティング用 VM に接続します。 このプロセスにより、すべての構成エラーを修正したり、追加のアプリケーションまたはシステム ログ ファイルを確認したりできるようになります。

このスクリプトでは、ディスク myNewOSDisk を VM MyTroubleshootVM にアタッチしています。

# Get ID of the OS disk that you just created.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)

# Attach the disk to the troubleshooting VM
az vm disk attach --disk $myNewOSDiskid --resource-group $resourceGroup --size-gb $diskSize --sku $storageType --vm-name MyTroubleshootVM

接続されたデータ ディスクをマウントする

注:

以下の例では、Ubuntu VM で必要な手順の詳細を示しています。 別の Linux ディストリビューション (Red Hat Enterprise Linux や SUSE など) を使用している場合、ログ ファイルの場所と mount コマンドが少し異なることがあります。 ご使用のディストリビューションのドキュメントを参照して、コマンドを適切に変更してください。

  1. 適切な資格情報を使用して、トラブルシューティング用 VM に SSH 接続します。 このディスクがトラブルシューティング用 VM に接続された最初のデータ ディスクの場合、ディスクは /dev/sdc に接続される可能性があります。 dmesg を使用して、接続されているディスクを表示します。

    dmesg | grep SCSI
    

    出力は次の例のようになります。

    [    0.294784] SCSI subsystem initialized
    [    0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
    [    7.110271] sd 2:0:0:0: [sda] Attached SCSI disk
    [    8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk
    [ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI disk
    

    前の例では、OS ディスクは /dev/sda にあり、各 VM 用に提供される一時ディスクは /dev/sdb にあります。 複数のデータ ディスクがある場合、それらのディスクの場所は、/dev/sdd/dev/sde (以降も同様) になります。

  2. 既存の仮想ハード ディスクをマウントするディレクトリを作成します。 次の例では、troubleshootingdisk という名前のディレクトリを作成します。

    sudo mkdir /mnt/troubleshootingdisk
    
  3. 既存の仮想ハード ディスクに複数のパーティションがある場合は、必要なパーティションをマウントします。 次の例では、/dev/sdc1 にある最初のプライマリ パーティションをマウントします。

    sudo mount /dev/sdc1 /mnt/troubleshootingdisk
    

    注:

    仮想ハード ディスクの汎用一意識別子 (UUID) を使用して、Azure の VM にデータ ディスクをマウントするのがベスト プラクティスです。 この短いトラブルシューティング シナリオでは、UUID を使用して仮想ハード ディスクをマウントする必要はありません。 ただし、通常の使用時に、/etc/fstab を編集し、UUID ではなくデバイス名を使用して仮想ハード ディスクをマウントすると、VM の起動に失敗する場合があります。

新しい OS ディスクの問題を修正する

既存の仮想ハード ディスクをマウントすることで、必要に応じてメンテナンスやトラブルシューティングの手順を実行できるようになります。 問題に対処したら、次の手順に進みます。

新しい OS ディスクのマウントを解除して切断する

エラーが解決したら、既存の仮想ハード ディスクのマウントを解除し、トラブルシューティング用 VM から切断します。 仮想ハード ディスクをトラブルシューティング用 VM に接続しているリースを解放するまで、仮想ハード ディスクを他の VM で使用することはできません。

  1. トラブルシューティング用 VM の SSH セッションから、既存の仮想ハード ディスクのマウントを解除します。 まず、マウント ポイントの親ディレクトリを変更します。

    cd /
    

    次に、既存の仮想ハード ディスクのマウントを解除します。 次の例では、/dev/sdc1 にあるデバイスのマウントを解除します。

    sudo umount /dev/sdc1
    
  2. 仮想ハード ディスクを VM から切断します。 トラブルシューティング用 VM の SSH セッションを終了します。

    az vm disk detach -g MyResourceGroup --vm-name MyTroubleShootVm --name myNewOSDisk
    

影響を受けている VM の OS ディスクを変更する

Azure CLI を使用して、OS ディスクを交換できます。 VM を削除して再作成する必要はありません。

この例では、myVM という名前の VM を停止し、myNewOSDisk という名前のディスクを新しい OS ディスクとして割り当てます。

# Stop the affected VM
az vm stop -n myVM -g myResourceGroup

# Get ID of the OS disk that is repaired.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)

# Change the OS disk of the affected VM to "myNewOSDisk"
az vm update -g myResourceGroup -n myVM --os-disk $myNewOSDiskid

# Start the VM
az vm start -n myVM -g myResourceGroup

次の手順

VM への接続の問題が発生した場合は、Azure VM への SSH 接続のトラブルシューティングに関する記事をご覧ください。 VM で実行されているアプリケーションへのアクセスに関する問題については、Linux VM でのアプリケーションの接続の問題のトラブルシューティングに関する記事をご覧ください。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。