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

# はじめに

仮想マシンを Azure Backup でリストアすると、ディスク名が想定していたものと異なってしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/2893331b-b358-7043-7ffa-62193d922304.png)

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

| ディスクの種類 | 命名規則 |
|:-|:-|
| データディスク | \<VM名\>-datadisk-\<lun 番号\>-\<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://jpabrs-scem.github.io/blog/AzureVMBackup/About_Restored_Disk/#4-%E4%BB%A3%E6%9B%BF%E6%A1%88

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


# 概要

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

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


# データディスクの名前を変更

## 0.事前準備

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

```powershell
# 対象 VM のリソースグループ名
$targetResourceGroupName = 'rg-202308'
# 対象 VM 名
$targetVMName = 'vm-202308'
# 対象データディスクの lun 番号
$targetLunNo = 0
# 新しいデータディスクの名前
$newDataDiskName = 'vm-202308-DataDisk_0'
```

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

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

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

# 対象のデータディスクを特定
$sourceDataDiskProfile = $targetVM.StorageProfile.DataDisks `
    | Where-Object { $_.Lun -eq $targetLunNo }
# 対象のデータディスクが存在しない場合は終了
if ($null -eq $sourceDataDiskProfile) {
    Write-Host "The Data Disk LUN Number $targetLunNo does not exist."
    Exit
}

# 対象のデータディスクのプロパティを取得
$sourceDataDisk = Get-AzDisk -DiskName $sourceDataDiskProfile.Name `
    -ResourceGroupName $targetResourceGroupName

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

# 新しいデータディスクを作成
$newDataDisk = New-AzDisk -Disk $dataDiskConfig `
    -DiskName $newDataDiskName `
    -ResourceGroupName $targetResourceGroupName
```


## 2.元のデータディスクをデタッチする

対象の仮想マシンにアタッチされている元 (対象) のデータディスクをデタッチします。

```powershell
# 対象 VM から元のデータディスクをデタッチ
Remove-AzVMDataDisk -VM $targetVM `
    -Name $sourceDataDisk.Name
# 対象 VM を更新
Update-AzVM -VM $targetVM `
    -ResourceGroupName $targetResourceGroupName
```


## 3.新しいデータディスクをアタッチする

対象の仮想マシンに新しいデータディスクをアタッチします。

```powershell
# 対象 VM に新しいデータディスクをアタッチ
if ($sourceDataDiskProfile.Caching -like 'None') {
    # ホストキャッシュ無
    Add-AzVMDataDisk -VM $targetVM `
        -ManagedDiskId $newDataDisk.Id `
        -Lun $targetLunNo `
        -Name $newDataDiskName `
        -CreateOption Attach
} else {
    # ホストキャッシュ有
    Add-AzVMDataDisk -VM $targetVM `
        -Caching $sourceDataDiskProfile.Caching `
        -ManagedDiskId $newDataDisk.Id `
        -Lun $targetLunNo `
        -Name $newDataDiskName `
        -CreateOption Attach
}
# 対象 VM を更新
Update-AzVM -VM $targetVM `
    -ResourceGroupName $targetResourceGroupName
```


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

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

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


# 実行結果を確認

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/80eb7a79-5505-58b3-8456-4635ab56bb73.png)

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

https://qiita.com/tetsuya-ooooo/items/917fe9e28339616f8dac


# 参考文献

[Rename Azure VM Data Disks - CHARBEL NEMNOM - MVP | MCT | CCSP | CISM - Cloud & CyberSecurity](https://charbelnemnom.com/rename-azure-vm-data-disks/)