##はじめに
ちょっと前、2018年5月頃にAzure 仮想マシンでOSディスクのスワップ(交換)の機能がリリースされた。
OSディスクのスワップ(交換)とは、その名の通り、仮想マシンに接続されているディスクを仮想マシンのリソースを削除せずに別のディスクに差し替えることを意味する。
Azure 仮想マシンでは、管理ディスク(Manage Disk)と非管理ディスク(Non Managed disk)の2種類のディスク構成が存在するがどちらもスワップをすることができる。しかしながら、公開情報やwebをいくら調べても非管理ディスクの実行サンプルが見当たらなかったので、いい機会と思い動作検証と手順を整理する。
##手順
意外と簡単に次の3ステップで交換ができる。
- 仮想マシンを停止(割り当て解除)する
- OSディスクのスワップする
- 仮想マシンを起動する
1と3は、AzureポータルやPowershellの Stop-AzureRmVM や Start-AzureRmVM で実施できる。
2は、管理ディスクと非管理ディスクで交換したいディスクのリソースの指定方法がことなるため、少し操作が異なる。
■非管理ディスクの場合
$vm = Get-AzureRmVM -ResourceGroupName <リソースグループ名> -Name <VM名>
$Vm.StorageProfile.OsDisk.Vhd.Uri = "https://xxx.blob.core.windows.net/xx/xx.vhd" #交換用ディスクのパス
Update-AzureRmVM -ResourceGroupName <リソースグループ名> -VM $Vm
■管理ディスクの場合
$vm = Get-AzureRmVM -ResourceGroupName <リソースグループ名> -Name <VM名>
$disk = Get-AzureRmDisk -ResourceGroupName <リソースグループ名> -Name <交換用ディスク名>
Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $disk.Id -Name $disk.Name
Update-AzureRmVM -ResourceGroupName <リソースグループ名> -VM $vm
ポイントは、非管理ディスクは、仮想マシンの構成情報のStorageProfile.OsDisk.Vhd.Uriを交換したいディスク(vhdファイル)のストレージアカウント上のパスで更新する。管理ディスクの場合はSet-AzureRmVMOSDiskコマンドが用意されており、このコマンドで交換用の管理ディスクのリソースIDを更新する。
##注意点
このOSディスクのスワップは、OSの種類に関わらず手順は同じだが、交換するディスクに含まれるOSの種類(Windows/Linux)は変更できない。例えば、Windows仮想マシンのディスクをLinux OSが入ったディスクには交換できないので、そのような作業をする場合は、一度、仮想マシンを削除して、交換したいディスクから仮想マシンを再構築する必要がある。
##参考