マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

Azureのディスク ストレージ

unManage Disk (非管理ディスク)

Managed Disk (管理用ディスク)

課金

unManage Disk (非管理ディスク)

Managed Disk (管理用ディスク)

切り替え

VMからでたッチしたインストールディスクをvhd化、
vhdを非管理ディスクへ変換して、VMへアタッチ。

概要

  1. 管理ディスクからvhdを取り出す
    1. 下を参考に、管理ディスクをエクスポート。
    2. URLが表示されるので、仮想マシンと同じリソースグループに、
      新規にストレージアカウント & コンテナを作成して、vhd をコピー。
      # azcopy とか 
      # Start-AzureStorageBlobCopy とか 
      # az storage blob copy とか
  2. VMを削除して、vhdから作成
    • vhdができたら、そのvhdから、新しいVMを作成。
    • Azureポータルで、vhdから仮想マシンを作れないので、
      Azure PowerShell か Azure CLI で、スクリプトを少々走らせる必要がある。
  3. 作成したVMに問題なかったら、もとの管理ディスクを削除

スクリプト

&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
  }

参考

参考

Azure PowerShell

Azure Cloud Shell


Tags: :インフラストラクチャ, :クラウド, :Azure


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS