Azure PowerShell で既存の仮想マシンの OS ディスクの名前を変更する

# はじめに

Azure ポータルで新規に仮想マシンを作ったり、Azure Backup でリストアすると、ディスク名が想定していたものと異なってしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ac3ac052-68c5-d991-e9f3-ce78d445a1c6.png)

- 新規に仮想マシンを作った場合の OS ディスクの名前

| ディスクの種類 | ディスク名 |
|:-|:-|
| OS ディスク | \<VM名\>\_OsDisk\_1\_\<ランダムな文字列\> |

- リストアした場合の OS ディスクの名前

| ディスクの種類 | ディスク名 |
|:-|:-|
| OS ディスク | \<VM名\>-osdisk-\<yyyyMMdd-HHmmss\> |

※\<yyyyMMdd-HHmmss\> = ディスクを復元した時の日時 (UTC)

https://jpabrs-scem.github.io/blog/AzureVMBackup/About_Restored_Disk/

Azure では、既存ディスクの名前を変更する機能もありませんし、リストア時にディスクの名前を指定することはできません。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/faq-for-disks?wt.mc_id=AZ-MVP-5003113&tabs=azure-portal#------------------------------------------

> **マネージド ディスクまたはアンマネージド ディスクの名前を、作成後に変更できますか?**
>
> マネージド ディスクの名前を変更することはできません。 ただし、アンマネージド ディスクの場合は、現在 VHD または VM にアタッチされていなければ、名前を変更できます。

ディスクの名前を変更するには、ディスクを再作成する必要があります。
下記の記事では、Azure ポータルで仮想マシンの OS ディスクの名前を変更する方法を紹介しています。

https://jpaztech.github.io/blog/vm/how-to-change-os-disk-name/

この投稿では、Azure PowerShell を用いた OS ディスクの名前を変更する手順を記します。
なお、Windows 仮想マシンでも Linux 仮想マシンでも同じ手順となります。


# 概要

仮想マシンの OS ディスクの名前を変更するために、以下の手順で行います。

1. OS ディスクのコピーを新しい名前で作成する
1. 元の OS ディスクと新しい OS ディスクを入れ替える
1. デタッチした元の OS ディスクを削除する


# OS ディスクの名前を変更

## 0.事前準備

- ```Import-Module``` で ```Az.Accounts``` と ```Az.Compute``` モジュールをインポートします。
- ```Connect-AzAccount``` や ```Set-AzContext``` を用いて、対象の Azure サブスクリプションに接続します。
- 対象の仮想マシンと新しい OS ディスクの名前を定義します。

```powershell
# 対象 VM のリソースグループ名
$targetResourceGroupName = 'rg-202308'
# 対象 VM 名
$targetVMName = 'vm-202308'
# 新しい OS ディスクの名前
$newOSDiskName = 'vm-202308-OsDisk'
```

※この時点で対象の仮想マシンが起動している場合は、は停止して状態を「停止済み (割り当て解除)」にします。


## 1. OS ディスクのコピーを新しい名前で作成する

対象の仮想マシンにアタッチされている OS ディスクを、新しい OS ディスクの名前で複製します。

```powershell
# 対象 VM のプロパティを取得
$targetVM = Get-AzVM -Name $targetVMName `
    -ResourceGroupName $targetResourceGroupName

# OS ディスクのプロパティを取得
$sourceOSDisk = Get-AzDisk -DiskName $targetVm.StorageProfile.OsDisk.Name `
    -ResourceGroupName $targetResourceGroupName

# OS ディスク構成を作成
$osDiskConfig = New-AzDiskConfig -SkuName $sourceOSDisk.Sku.Name `
    -Location $sourceOSDisk.Location `
    -DiskSizeGB $sourceOSDisk.DiskSizeGB `
    -SourceResourceId $sourceOSDisk.Id `
    -OsType $sourceOSDisk.OsType `
    -HyperVGeneration $sourceOSDisk.HyperVGeneration `
    -CreateOption Copy
# 可用性ゾーンは別途設定
if ($sourceOSDisk.Zones.Count -gt 0) {
    $osDiskConfig.Zones = $sourceOSDisk.Zones
}

# 新しい OS ディスクを作成
$newOSDisk = New-AzDisk -Disk $osDiskConfig `
    -DiskName $newOSDiskName `
    -ResourceGroupName $targetResourceGroupName
```


## 2. 元の OS ディスクと新しい OS ディスクを入れ替える

対象の仮想マシンに、新しく作成した OS ディスクをアタッチします。

```powershell
# 対象 VM に新しい OS ディスクをアタッチ
Set-AzVMOSDisk -VM $targetVM `
    -ManagedDiskId $newOSDisk.Id `
    -Name $newOSDiskName
# 対象 VM を更新
Update-AzVM -VM $targetVM `
    -ResourceGroupName $targetResourceGroupName
```

※ここまで実行したら、対象の仮想マシンを開始して正常に動作していることを確認します。


## 3.デタッチした元の OS ディスクを削除する

この時点で、デタッチした元の OS ディスクは不要なので、削除します。

```powershell
# 元の OS ディスクを削除
Remove-AzDisk -DiskName $sourceOSDisk.Name `
    -ResourceGroupName $targetResourceGroupName -Force
```

# 実行結果を確認

Azure ポータルを確認すると、対象の仮想マシンに新しい名前の OS ディスクがアタッチされていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/79e2a050-e0ba-78f7-e61e-3acac7fef5b5.png)

同様にデータディスクの名前を変更したい場合は、次回の投稿をご覧いただければと思います。

https://qiita.com/tetsuya-ooooo/items/9144d56ceacfd1544ea9


# 参考文献

[How To Rename The OS Disk For An Azure Virtual Machine - CHARBEL NEMNOM - MVP | MCT | CCSP | CISM - Cloud & CyberSecurity](https://charbelnemnom.com/how-to-rename-azure-virtual-machine-os-disk/)