「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
Azureのディスク ストレージ
VMからでたッチしたインストールディスクをvhd化、
vhdを非管理ディスクへ変換して、VMへアタッチ。
# azcopy とか # Start-AzureStorageBlobCopy とか # az storage blob copy とか
&ref(): File not found: "rm-recreate-vm.ps1" at page "Azureのディスク ストレージ";
<#
VM の Managed Disk をvhd に変換して、VM再作成。
VM ScaleSet は無視するので、ScaleSet にあるVMには使用しないように。
DataDisk は無視するので、VM再作成後に、別途変換するなに、取り付けるなり。
#>
param(
[parameter(Mandatory=$true)]
[string] $ResourceGroupName,
[parameter(Mandatory=$true)]
[string] $vmname
)
# 現在のVM
$vm = Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $vmname
# 現在のVMを停止
$vm | Stop-AzureRmVM -Force
# Managed Disk を取得
$vm.StorageProfile.OsDisk.ManagedDisk.Id -match 'resourceGroups/([^/]+)/providers/Microsoft.Compute/disks/(.+)' | out-null
$osdisk = Get-AzureRmDisk -ResourceGroupName $matches[1] -Name $matches[2]
# Managed Disk の vhd url を取得
$osdiskURL = Grant-AzureRmDiskAccess -ResourceGroupName $matches[1] -DiskName $matches[2] -Access Read -DurationInSecond 3600
# Storage Account を作成
$storage_type = $osdisk.AccountType
$storage_type = $storage_type -replace '(Standard|Premium)(_|)(\w+)', '$1_$3'
$storage = New-AzureRmStorageAccount -ResourceGroupName $vm.ResourceGroupname -Name ("storage{0:yyyyMMddHHmmss}" -f (Get-Date)) -SkuName $storage_type -Location $osdisk.Location
# Storage に Container を作成
New-AzureStorageContainer -Context $storage.Context -Name "vhds" | out-null
# Managed Disk の vhd を Storage にコピー
$osblob = "{0}-osdisk.vhd" -f $vm.Name
$job = Start-AzureStorageBlobCopy -AbsoluteUri $osdiskURL.AccessSAS -DestBlob $osblob -DestContainer "vhds" -DestContext $storage.Context
$job | Get-AzureStorageBlobCopyState -WaitForComplete
# コピー先の vhd url
$osvhd = "{0}{1}/{2}" -f $storage.Context.BlobEndPoint, "vhds", $osblob
# NICを取得
$vm.NetworkProfile.NetworkInterfaces.Id -match 'resourceGroups/([^/]+)/providers/Microsoft.Network/networkInterfaces/(.+)' | out-null
$nic = Get-AzureRmNetworkInterface -ResourceGroupName $matches[1] -Name $matches[2]
# 現在のVMを削除
$vm | Remove-AzureRmVM -Force
# 新しいvhdで、再作成
# サイズ
$vmconfig = New-AzureRmVMConfig -VMName $vm.Name -VMSize $vm.HardwareProfile.VmSize
# nic は現在のものを使用
Add-AzureRmVMNetworkInterface -VM $vmconfig -NetworkInterface $nic | out-null
# vhd は、コピー先を使用
Set-AzureRmVMOSDisk -VM $vmconfig -Name $osblob -VhdUri $osvhd `
-Caching ReadWrite -CreateOption Attach -Windows | out-null
# 仮想マシン作成
$newvm = New-AzureRmVM -Location $vm.Location `
-ResourceGroupName $vm.ResourceGroupName -VM $vmconfig
# 作成した仮想マシンの情報
$newvm = Get-AzureRmVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name
"vmname : {0}" -f $newvm.Name
if ( $newvm.StorageProfile.OSDisk.vhd ) {
"OSdisk : {0}" -f $newvm.StorageProfile.OSDisk.vhd.Uri
}
if ( $newvm.DiagnosticsProfile.BootDiagnostics.StorageUri ) {
"Diagnostics : {0}" -f $newvm.DiagnosticsProfile.BootDiagnostics.StorageUri
}
Tags: :インフラストラクチャ, :クラウド, :Azure