Azure VMインプレースアップグレード用ディスクがアタッチできない原因と解決策|windowsserverupgradesへ移動・追加する手順(Portal/PowerShell/CLI)

Windows Server のインプレースアップグレードで使う「メディアディスク(Upgrade メディア)」を既存の Azure VM に追加しようとしたら、サブスクリプションには見えるのに VM の属する windowsserverupgrades リソースグループでは候補に出ずアタッチできない――そんな場面で迷わないための実践ガイドです。根本原因の見分け方から、Portal/PowerShell/CLI それぞれの操作、権限やゾーンの落とし穴、運用のベストプラクティスまでまとめました。

目次

問題の全体像と原因の整理

インプレースアップグレード用のメディアディスクは「既存のマネージドディスク」を VM に追加するだけに見えますが、リージョン/リソースグループ/ゾーン/RBAC 権限のいずれかが噛み合わないと候補に現れません。最も多いのは次の3点です。

  • リージョン不一致:ディスクと VM の Location が違う(例:disk=Japan East, VM=Japan West)。
  • リソースグループ不一致:ディスクが windowsserverupgrades 以外にあり、VM 画面からの「既存ディスクの追加」候補に並ばない。
  • ゾーン不一致(Zonal VM/Zonal Disk):可用性ゾーンが異なる、またはディスクが Zonal だが VM は Regional などで整合が取れていない。

このほか、管理ロック(移動ロック)、暗号化(Disk Encryption Set/CMK)参照権限、ロール不足(例:Virtual Machine Contributor ではディスクの移動権限がない)も実務では頻出です。

最短ルートの結論(忙しい人向け)

  1. 現在地を確認(リージョン/RG/ゾーン)。
Get-AzDisk -Name "<ディスク名>" | Select Name,Location,ResourceGroupName,Zones
Get-AzVM   -Name "<VM名>"    | Select Name,Location,ResourceGroupName,Zones
  1. ディスクが windowsserverupgrades に無ければ移動(Portal または PowerShell/CLI)。
Move-AzResource `
  -DestinationResourceGroupName "windowsserverupgrades" `
  -ResourceId "/subscriptions/<サブスクリプションID>/resourceGroups/<現在のRG>/providers/Microsoft.Compute/disks/<ディスク名>"
az resource move \
  --destination-group windowsserverupgrades \
  --ids $(az disk show -g <現在のRG> -n <ディスク名> --query id -o tsv)
  1. VM にアタッチ(Portal で「既存ディスクの追加」または PowerShell/CLI)。
# PowerShell(LUN=1 の例)
$disk = Get-AzDisk -Name "<ディスク名>" -ResourceGroupName "windowsserverupgrades"
$vm   = Get-AzVM   -Name "<VM名>" -ResourceGroupName "windowsserverupgrades"
$vm = Add-AzVMDataDisk -VM $vm -Name $disk.Name -ManagedDiskId $disk.Id -Lun 1 -Caching ReadOnly -CreateOption Attach
Update-AzVM -VM $vm -ResourceGroupName "windowsserverupgrades"
# Azure CLI
az vm disk attach \
  --resource-group windowsserverupgrades \
  --vm-name <VM名> \
  --name <ディスク名> \
  --lun 1

実行前チェックリスト(原因切り分けの地図)

観点確認ポイントOK 条件NG 時の対策
リージョンDisk.Location と VM.Location を照合完全一致(例:Japan East)ディスクを適正リージョンの RG へ移動/再作成
リソースグループDisk.ResourceGroupName を確認windowsserverupgradesMove-AzResource または az resource move
可用性ゾーンDisk.Zones と VM.Zones同一ゾーン、または両方とも Regionalゾーン整合化(Zonal Disk 作り直し/VM 側整合)
暗号化DiskEncryptionSet / CMK 参照権限VM RG から DES/KV にアクセス可能ロール割当/アクセス ポリシー調整
RBAC操作ユーザーのロールContributor または Managed Disk Contributor 等元/先 RG の両方に適切なロールを付与
ロック管理ロック(移動/削除)有無ロックなし一時的にロック解除
ディスク種別Managed Disk か(VHD ではない)Managed DiskVHD なら MD へインポート作成

確認:リージョン/RG/ゾーンを正しく把握する

PowerShell で一括確認

$disk = Get-AzDisk -Name "<ディスク名>" -ResourceGroupName "<現在のRG>"
$vm   = Get-AzVM   -Name "<VM名>"    -ResourceGroupName "windowsserverupgrades"

$disk | Select Name,Location,ResourceGroupName,DiskSizeGB,Sku,Zones
$vm   | Select Name,Location,ResourceGroupName,HardwareProfile,Zones 

Location が一致しない場合は、そのままではアタッチ不可です。
さらに Zones がディスク=1/VM=2 のようにズレていると、候補に出てもアタッチ時に失敗します。Regional(ゾーン未割り当て)同士は互換です。

Azure CLI で一括確認

az disk show -g &lt;現在のRG&gt; -n &lt;ディスク名&gt; --query "{name:name,location:location,rg:resourceGroup,sku:sku.name,zones:zones}"
az vm show   -g windowsserverupgrades -n &lt;VM名&gt;       --query "{name:name,location:location,rg:resourceGroup,zones:zones}"

操作:ディスクを windowsserverupgrades へ移動する

Azure Portal

  1. ディスクのブレードを開き、概要 > 移動 > 他のリソースグループへ を選択。
  2. 移動先に windowsserverupgrades を指定。
  3. リージョンが VM と同一であることを確認し、移動を実行。

PowerShell

Move-AzResource `
  -DestinationResourceGroupName "windowsserverupgrades" `
  -ResourceId "/subscriptions/&lt;サブスクリプションID&gt;/resourceGroups/&lt;現在のRG&gt;/providers/Microsoft.Compute/disks/&lt;ディスク名&gt;"
  • 同一サブスクリプション内の RG 間移動はサポートされています。
  • ディスクに管理ロックがある場合は 一時解除 が必要です。

Azure CLI

az resource move \
  --destination-group windowsserverupgrades \
  --ids $(az disk show -g &lt;現在のRG&gt; -n &lt;ディスク名&gt; --query id -o tsv)

操作:ディスクを VM にアタッチする

Portal(推奨)

  1. 対象 VM > ディスク > 既存ディスクの追加 を選択。
  2. 一覧から移動済みディスクを選択し、必要に応じて LUN 番号キャッシュ を設定。
  3. 保存 をクリックして反映。

PowerShell

$rg   = "windowsserverupgrades"
$vm   = Get-AzVM -Name "<VM名>" -ResourceGroupName $rg
$disk = Get-AzDisk -Name "<ディスク名>" -ResourceGroupName $rg

$vm = Add-AzVMDataDisk `  -VM $vm`
-Name $disk.Name `  -ManagedDiskId $disk.Id`
-Lun 1 `  -Caching ReadOnly`
-CreateOption Attach

Update-AzVM -VM $vm -ResourceGroupName $rg 

Azure CLI

az vm disk attach \
  --resource-group windowsserverupgrades \
  --vm-name &lt;VM名&gt; \
  --name &lt;ディスク名&gt; \
  --lun 1

よくあるエラーと対処法

メッセージ/症状原因対応
The disk is not located in the same region as the VMリージョン不一致同一リージョンの RG へ移動する/同リージョンに作り直す
Resource ‘<disk>’ was not found in resource group ‘windowsserverupgrades’RG 不一致Move-AzResource / az resource move で移動
OperationNotAllowed: Another operation is in progress同一リソースに対する並行操作数分待ってリトライ/実行履歴を確認
AuthorizationFailed / Insufficient privilegesRBAC 権限不足移動元・先 RG の両方に Contributor または Managed Disk Contributor を付与
ScopeLocked / Cannot move because of a lock管理ロック(移動・削除)ロックを一時解除してから移動
Disk uses a Disk Encryption Set you do not have access toDES / Key Vault 参照権限不足VM から DES/KV へアクセスできるようロール/ポリシー設定
Attach failed due to zone mismatchゾーン不一致(Zonal)ゾーンを合わせたディスクを用意/VM 構成を見直し

RBAC と暗号化の注意点(実務でハマりやすい)

  • 必要権限:ディスク移動には 元/先 RG の両方でディスクの書き込み権限が必要です。一般的には Contributor、最小権限なら Managed Disk Contributor を付与します。
  • VM だけの権限では不十分Virtual Machine Contributor はディスクの RG 間移動をカバーしません。
  • 暗号化:ディスクが Disk Encryption Set(DES) を参照している場合、VM 側から DES(および背後の Key Vault)へのアクセス権が必要です。RG を移動しても参照先は変わらないため、権限の伝播を確認してください。

インプレースアップグレード固有の注意

  • メディアディスクは読み取り専用が基本:パフォーマンス/整合性の観点から Caching=ReadOnly を推奨します。
  • アップグレード後のクリーンアップ:メディアディスクは役目を終えたら デタッチ & 必要なら削除。コスト最適化に効きます。
  • バックアップ:作業前に VM のスナップショット/バックアップを取得。失敗時のロールバック手段を確保します。
  • メンテナンス計画:OS アップグレードは再起動を伴うため、業務影響の少ないスロットで実施。

実運用で使えるフル自動スクリプト(PowerShell)

# 変数
$subId = "<サブスクリプションID>"
$vmName = "<VM名>"
$rgDest = "windowsserverupgrades"
$diskName = "<ディスク名>"
$rgSrc = "<現在のRG>"    # 既知なら指定。未知なら検索で補完可

Select-AzSubscription -SubscriptionId $subId

# 現在地の確認(未指定なら検索)

if (-not $rgSrc) {
$d = Get-AzDisk | Where-Object { $_.Name -eq $diskName }
if (-not $d) { throw "ディスクが見つかりません: $diskName" }
$rgSrc = $d.ResourceGroupName
}

$disk = Get-AzDisk -Name $diskName -ResourceGroupName $rgSrc
$vm   = Get-AzVM   -Name $vmName -ResourceGroupName $rgDest

# リージョン&ゾーン検証

if ($disk.Location -ne $vm.Location) {
throw "リージョン不一致です。Disk=$($disk.Location) VM=$($vm.Location)"
}
if (($disk.Zones -and -not $vm.Zones) -or ($vm.Zones -and -not $disk.Zones)) {
Write-Warning "片方のみ Zonal です。整合性を確認してください。"
}
if ($disk.Zones -and $vm.Zones -and ($disk.Zones[0] -ne $vm.Zones[0])) {
throw "ゾーン不一致です。DiskZone=$($disk.Zones[0]) VMZone=$($vm.Zones[0])"
}

# RG の移動(必要時)

if ($rgSrc -ne $rgDest) {
Write-Host "ディスクを $rgSrc から $rgDest に移動します..."
Move-AzResource `    -DestinationResourceGroupName $rgDest`
-ResourceId "/subscriptions/$subId/resourceGroups/$rgSrc/providers/Microsoft.Compute/disks/$diskName"

# 再取得

$disk = Get-AzDisk -Name $diskName -ResourceGroupName $rgDest
}

# アタッチ

$vm = Add-AzVMDataDisk -VM $vm -Name $disk.Name -ManagedDiskId $disk.Id -Lun 1 -Caching ReadOnly -CreateOption Attach
Update-AzVM -VM $vm -ResourceGroupName $rgDest
Write-Host "アタッチ完了: $($disk.Name) -> VM $vmName" 

フル自動スクリプト(Azure CLI/Bash)

SUB_ID="<サブスクリプションID>"
VM="<VM名>"
RG_DEST="windowsserverupgrades"
DISK="<ディスク名>"
RG_SRC="<現在のRG>" # 未知なら検索も可

az account set --subscription "$SUB_ID"

# 情報取得

DISK_LOC=$(az disk show -g "$RG_SRC" -n "$DISK" --query location -o tsv)
VM_LOC=$(az vm show -g "$RG_DEST" -n "$VM" --query location -o tsv)
DISK_ZONES=$(az disk show -g "$RG_SRC" -n "$DISK" --query "zones[0]" -o tsv)
VM_ZONES=$(az vm show -g "$RG_DEST" -n "$VM" --query "zones[0]" -o tsv)

if [ "$DISK_LOC" != "$VM_LOC" ]; then
echo "リージョン不一致: Disk=$DISK_LOC VM=$VM_LOC" >&2
exit 1
fi

# RG 移動

if [ "$RG_SRC" != "$RG_DEST" ]; then
az resource move 
--destination-group "$RG_DEST" 
--ids $(az disk show -g "$RG_SRC" -n "$DISK" --query id -o tsv)
fi

# アタッチ

az vm disk attach 
--resource-group "$RG_DEST" 
--vm-name "$VM" 
--name "$DISK" 
--lun 1

echo "アタッチ完了: $DISK -> $VM" 

Portal 派のための画面遷移メモ

  • ディスク移動:ディスク > 概要 > 移動 > 他のリソースグループへ > windowsserverupgrades を選択 > 確認して実行。
  • アタッチ:VM > ディスク > 既存ディスクの追加 > 対象ディスクを選択 > LUN/キャッシュ設定 > 保存。

補足:VHD を持っているだけのとき

ストレージ アカウント上の .vhd を直接 VM に付けることはできません。いったん Managed Disk として作成したうえで本記事の手順を実施します。

# PowerShell: VHD から Managed Disk を作成(例)
$diskConfig = New-AzDiskConfig -Location "Japan East" -CreateOption Import -StorageAccountId "&lt;SAリソースID&gt;" -SourceUri "&lt;SAS URL&gt;"
New-AzDisk -DiskName "&lt;新規ディスク名&gt;" -Disk $diskConfig -ResourceGroupName "windowsserverupgrades"

補足:Premium SSD v2 / Ultra Disk などの互換性

  • Premium SSD v2 は一部制約(ゾーン/スケール、機能のサポート対象)があるため、対象 VM サイズが当該 SKU をサポートしているかを確認。
  • Ultra Disk は専用の有効化が必要な場合があるため、要件を満たす VM サイズ/可用性ゾーンで利用してください。
  • アップグレード用メディアは性能要件が低いことが多く、StandardSSD_LRS or Premium_LRS で十分です。

検証と後片付けのチェックリスト

項目確認方法合格基準
ディスクの認識ゲスト OS のディスク管理/Get-Disk新規ディスクがオフライン/未初期化または ISO として見える
LUN の重複VM のデータディスク一覧既存と重複なし
アップグレード実行セットアップ開始~完了再起動後も正常起動
クリーンアップメディアディスクのデタッチ/削除コスト最適化が完了
バックアップスナップショット/バックアップの健全性必要に応じて保持ポリシーを適用

FAQ(よくある質問)

Q. 別サブスクリプションのディスクを使えますか?
A. サブスクリプションをまたぐ直接アタッチはできません。まずは 移動(リソース移動がサポートされる場合)または同一サブスクリプション側にディスクを再作成(スナップショット移行等)してください。

Q. Availability Set の VM でも同じ手順ですか?
A. はい。可用性セット自体は影響しませんが、ゾーン指定が絡むと互換性に注意してください。

Q. ディスクが一覧に出るのにアタッチに失敗します。
A. ゾーン不一致、暗号化の参照権、ロック、進行中の別操作が疑われます。本文の表をもとに切り分けてください。

Q. LUN 番号は何でも良いですか?
A. 既存と重複しない範囲であれば任意ですが、規律を保つため「メディアは高い LUN 番号(例:63)」などの運用ルールを決めるのが有効です。

まとめ

インプレースアップグレード用ディスクが VM から見えない/追加できない時は、リージョン → リソースグループ → ゾーン → RBAC/ロック → 暗号化の順でチェックすれば最短で原因に到達できます。ディスクを windowsserverupgrades へ移動し、整合が取れた状態でアタッチすれば問題は解消します。今回の手順とスクリプトを自社の標準運用に組み込めば、以後のアップグレード作業を安定・高速に回せるようになります。

参考コマンド(再掲)

現在地の確認

Get-AzDisk -Name "&lt;ディスク名&gt;" | Select Name,Location,ResourceGroupName
Get-AzVM   -Name "&lt;VM名&gt;"    | Select Name,Location,ResourceGroupName

リソース移動(PowerShell / CLI)

Move-AzResource `
  -DestinationResourceGroupName "windowsserverupgrades" `
  -ResourceId "/subscriptions/&lt;サブスクリプションID&gt;/resourceGroups/&lt;現在のRG&gt;/providers/Microsoft.Compute/disks/&lt;ディスク名&gt;"
az resource move \
  --destination-group windowsserverupgrades \
  --ids $(az disk show -g &lt;現在のRG&gt; -n &lt;ディスク名&gt; --query id -o tsv)

アタッチ(Portal / PowerShell / CLI)

# Portal: VM > ディスク > 既存ディスクの追加
# PowerShell:
$disk = Get-AzDisk -Name "<ディスク名>" -ResourceGroupName "windowsserverupgrades"
$vm   = Get-AzVM   -Name "<VM名>" -ResourceGroupName "windowsserverupgrades"
$vm = Add-AzVMDataDisk -VM $vm -Name $disk.Name -ManagedDiskId $disk.Id -Lun 1 -Caching ReadOnly -CreateOption Attach
Update-AzVM -VM $vm -ResourceGroupName "windowsserverupgrades"

# Azure CLI:

az vm disk attach --resource-group windowsserverupgrades --vm-name  --name <ディスク名> --lun 1 

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次