Azure PowerShell で OS ディスクを復旧 VM に接続して Windows VM のトラブルシューティングを行う
Azure の Windows 仮想マシン (VM) で起動エラーまたはディスク エラーが発生した場合は、ディスク自体にトラブルシューティング手順を実行する必要がある可能性があります。 一般的な例として、VM の正常な起動を妨げる失敗したアプリケーション更新が挙げられます。 この記事では、Azure PowerShell を使用してディスクを別の Windows VM に接続してエラーを修正した後、元の VM を修復する方法について詳しく説明します。
重要
この記事のスクリプトは、マネージド ディスクを使用している VM にのみ適用されます。
回復プロセスの概要
Azure PowerShell を使用して、VM の OS ディスクを変更できるようになりました。 VM を削除して再作成する必要はもうありません。
トラブルシューティングのプロセスは次のとおりです。
- 影響を受けている VM を停止します。
- VM の OS ディスクからスナップショットを作成します。
- OS ディスクのスナップショットからディスクを作成します。
- ディスクをデータ ディスクとして復旧 VM にアタッチします。
- 復旧 VM に接続します。 ファイルを編集するか任意のツールを実行して、コピー元の OS ディスクの問題を解決します。
- 復旧 VM からディスクのマウントを解除してデタッチします。
- 影響を受けている VM の OS ディスクを変更します。
手順 1、2、3、4、6、7 は、VM 修復コマンドを使用して自動化できます。 その他のドキュメントと手順については、「Azure 仮想マシンの修復コマンドを使用して Windows VM を修復する」を参照してください。
最新の Azure PowerShell がインストールされ、サブスクリプションにログインしていることを確認します。
Connect-AzAccount
以下の例では、パラメーター名を独自の値に置き換えてください。
起動の問題を特定する
起動の問題のトラブルシューティングに役立つ VM のスクリーンショットを Azure で表示できます。 このスクリーンショットは、VM が起動に失敗した理由の特定に役立ちます。 次の例では、myResourceGroup
という名前のリソース グループの myVM
という名前の Windows VM からスクリーンショットを取得します。
Get-AzVMBootDiagnosticsData -ResourceGroupName myResourceGroup `
-Name myVM -Windows -LocalPath C:\Users\ops\
スクリーンショットを調べて、VM が起動できない理由を特定します。 特定のエラー メッセージまたはエラー コードが表示されていないかどうか確認してください。
VM を停止する
次の例では、myResourceGroup
という名前のリソース グループから myVM
という名前の VM を停止します。
Stop-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"
VMの削除が完了するまで待機した後で次の手順に進んでください。
VM の OS ディスクからスナップショットを作成する
次の例は、'myVM' という名前の VM の OS ディスクから mySnapshot
という 名前のスナップショットを作成します。
$resourceGroupName = 'myResourceGroup'
$location = 'eastus'
$vmName = 'myVM'
$snapshotName = 'mySnapshot'
#Get the VM
$vm = get-azvm `
-ResourceGroupName $resourceGroupName `
-Name $vmName
#Create the snapshot configuration for the OS disk
$snapshot = New-AzSnapshotConfig `
-SourceUri $vm.StorageProfile.OsDisk.ManagedDisk.Id `
-Location $location `
-CreateOption copy
#Take the snapshot
New-AzSnapshot `
-Snapshot $snapshot `
-SnapshotName $snapshotName `
-ResourceGroupName $resourceGroupName
スナップショットは、VHD の完全な読み取り専用コピーです。 これを VM にアタッチすることはできません。 次の手順で、このスナップショットからディスクを作成します。
スナップショットからディスクを作成する
このスクリプトは、mysnapshot
という名前のスナップショットから newOSDisk
という名前のマネージド ディスクを作成します。
#Set the context to the subscription Id where Managed Disk will be created
#You can skip this step if the subscription is already selected
$subscriptionId = 'yourSubscriptionId'
Select-AzSubscription -SubscriptionId $SubscriptionId
#Provide the name of your resource group
$resourceGroupName ='myResourceGroup'
#Provide the name of the snapshot that will be used to create Managed Disks
$snapshotName = 'mySnapshot'
#Provide the name of the Managed Disk
$diskName = 'newOSDisk'
#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 = 'Standard_LRS'
#Provide the Azure region (e.g. westus) where Managed Disks will be located.
#This location should be same as the snapshot location
#Get all the Azure location using command below:
#Get-AzLocation
$location = 'eastus'
$snapshot = Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id
New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName
これで、元の OS ディスクのコピーが用意できました。 トラブルシューティングのために、このディスクを別の Windows VM にマウントできます。
トラブルシューティングのためにディスクを別の Windows VM にアタッチする
次に、元の OS ディスクのコピーを、データ ディスクとして VM にアタッチします。 このプロセスにより、構成エラーを修正したり、ディスク内の他のアプリケーションやシステムのログ ファイルをレビューしたりできます。 次の例では、newOSDisk
という名前のディスクを RecoveryVM
という名前の VM にアタッチします。
注:
ディスクをアタッチするには、元の OS ディスクのコピーと復旧 VM が同じ場所に存在する必要があります。
$rgName = "myResourceGroup"
$vmName = "RecoveryVM"
$location = "eastus"
$dataDiskName = "newOSDisk"
$disk = Get-AzDisk -ResourceGroupName $rgName -DiskName $dataDiskName
$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
$vm = Add-AzVMDataDisk -CreateOption Attach -Lun 0 -VM $vm -ManagedDiskId $disk.Id
Update-AzVM -VM $vm -ResourceGroupName $rgName
復旧 VM に接続してアタッチされたディスクの問題を修正する
適切な資格情報を使用して、復旧 VM に RDP 接続します。 次の例では、
myResourceGroup
という名前のリソース グループのRecoveryVM
という名前の VM の RDP 接続ファイルをC:\Users\ops\Documents
にダウンロードします。Get-AzRemoteDesktopFile -ResourceGroupName "myResourceGroup" -Name "RecoveryVM" ` -LocalPath "C:\Users\ops\Documents\myVMRecovery.rdp"
データ ディスクが自動的に検出されてアタッチされます。 接続されたボリュームの一覧を表示して、次のようなドライブ文字を特定します。
Get-Disk
次の出力例は、ディスク 2 に接続されたディスクを示しています。 (
Get-Volume
を使用して、ドライブ文字を表示することもできます):Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 0 Virtual HD Healthy Online 127 GB MBR 1 Virtual HD Healthy Online 50 GB MBR 2 newOSDisk Healthy Online 127 GB MBR
元の OS ディスクのコピーがマウントされた後で、必要に応じてメンテナンスやトラブルシューティングの手順を実行できます。 問題に対処したら、次の手順に進みます。
元の OS ディスクのマウントを解除してデタッチする
エラーが解決したら、既存のディスクのマウントを解除して復旧 VM からデタッチします。 復旧 VM へのディクスのアタッチを解放するまで、ディスクを他の VM で使用することはできません。
RDP セッション内から、復旧 VM でデータ ディスクのマウントを解除します。 前の
Get-Disk
コマンドレットで取得したディスク番号が必要です。 次に、Set-Disk
を使用して、ディスクをオフラインとして設定します。Set-Disk -Number 2 -IsOffline $True
Get-Disk
をもう一度使用して、ディスクがオフラインとして設定されていることを確認します。 次の出力例は、ディスクがオフラインとして設定されていることを示しています。Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 0 Virtual HD Healthy Online 127 GB MBR 1 Virtual HD Healthy Online 50 GB MBR 2 Msft Virtu... Healthy Offline 127 GB MBR
RDP セッションを終了します。 Azure PowerShell セッションで、'RecoveryVM' という名前の VM から
newOSDisk
という名前のディスクを削除します。$myVM = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "RecoveryVM" Remove-AzVMDataDisk -VM $myVM -Name "newOSDisk" Update-AzVM -ResourceGroup "myResourceGroup" -VM $myVM
影響を受けている VM の OS ディスクを変更する
Azure PowerShell を使用して、OS ディスクをスワップできます。 VM を削除して再作成する必要はありません。
この例では、myVM
という名前の VM を停止し、newOSDisk
という名前のディスクを新しい OS ディスクとして割り当てます。
# Get the VM
$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
# Make sure the VM is stopped\deallocated
Stop-AzVM -ResourceGroupName myResourceGroup -Name $vm.Name -Force
# Get the new disk that you want to swap in
$disk = Get-AzDisk -ResourceGroupName myResourceGroup -Name newDisk
# Set the VM configuration to point to the new disk
Set-AzVMOSDisk -VM $vm -ManagedDiskId $disk.Id -Name $disk.Name -sto
# Update the VM with the new OS disk. Possible values of StorageAccountType include: 'Standard_LRS' and 'Premium_LRS'
Update-AzVM -ResourceGroupName myResourceGroup -VM $vm -StorageAccountType <Type of the storage account >
# Start the VM
Start-AzVM -Name $vm.Name -ResourceGroupName myResourceGroup
ブート診断を確認して有効にする
次の例では、myResourceGroup
という名前のリソース グループの myVMDeployed
という名前の VM で診断拡張機能を有効にします。
$myVM = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVMDeployed"
Set-AzVMBootDiagnostics -ResourceGroupName myResourceGroup -VM $myVM -enable
Update-AzVM -ResourceGroup "myResourceGroup" -VM $myVM
次の手順
VM への接続の問題が発生した場合は、Azure VM への RDP 接続のトラブルシューティングに関する記事をご覧ください。 VM で実行されているアプリケーションへのアクセスに関する問題については、Windows VM でのアプリケーションの接続の問題のトラブルシューティングに関する記事をご覧ください。
Resource Manager の使用方法の詳細については、「Azure Resource Manager の概要」をご覧ください。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示