「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Azureのストレージ]]

* 目次 [#rcc29175]
#contents

*概要 [#s68ff9a2]
Azureのディスク ストレージ 
-新しく追加された[[Azure Resource Manager (ARM)]]下のAzureのディスク ストレージ 

-必要なストレージの種類 (SSD or HDD) とディスクのサイズを指定できる。

-[[Blobストレージ>Azureのストレージ#w947118f]]上に配置され、[[LRS>Azureの冗長化#gebb4e38]]によって冗長化される。

-[[非管理ディスク>#l33fe1bb]]と[[管理ディスク>#v086e7a2]]がある。

-[[Blobファイルのページ Blob>Azureのストレージ#ia336c65]]が使われている模様。

**unManage Disk (非管理ディスク) [#l33fe1bb]
-Disk Storage | Microsoft Azure~
https://azure.microsoft.com/ja-jp/services/storage/unmanaged-disks/

***GPv1・GPv2 [#q44e6d4a]

-GPv1~
ストレージ層を選択する機能がなく、すべてがホット・ストレージ層扱いになる。

-GPv2~
GPv1のBlobにホット/クール/アーカイブのアクセス層とストレージ・イベントなどを追加

-差異
--パフォーマンス:差異なし。
--耐障害性:差異なし。
--課金体系:差異あり。~
Standardディスクを使用する場合は費用の差異がある。

***Standard HDD/Premium SSD [#e23c4077]
-Standard HDD:コスト最小化
-Premium SSD:高パフォーマンスなSSDベースのストレージ

**Managed Disk (管理用ディスク) [#v086e7a2]
-Managed Disks | Microsoft Azure~
https://azure.microsoft.com/ja-jp/services/managed-disks/
[[Blobファイルのページ Blob>Azureのストレージ#ia336c65]]が適切に隠蔽・自動管理される。~
(ストレージ・アカウントをAzureが管理し、ユーザが意識する事が無い)

--Standard Managed Disks~
費用対効果に優れたハード ディスク ドライブ (HDD) ベース
-ストレージアカウントのIOPS上限などを意識する必要はなくなる。

--Premium Managed Disks~
スループットを高める、ソリッド ステート ドライブ (SSD) ベース
-バックアップやスナップショット、イメージなど様々な機能があり、UIからの操作性に優れる。

-[[LRS>Azureの冗長化#gebb4e38]]ではなく、可用性セットを組み合わせて使用することで、~
可用性セットの VM のディスクが、単一障害点にならないように相互に十分に分離される。

***Standard HDD [#lbddfe06]
-バックアップなど、費用対効果に優れたHDDベース
-シングルVMだと、95%のSLA
-例外的に、地理冗長([[GRS/RA-GRS>Azureの冗長化#gebb4e38]])を使用可能。

***Standard SSD [#t87375e7]
-Webサーバ、開発など、費用対効果に優れたSSDベース
-シングルVMでも、99.5%のSLA

***Premium SSD [#c73b6f13]
-スループットを高める、運用環境向けのSSDベース
-シングルVMでも、99.99%のSLA
-[[仮想マシンのシステム・ドライブ>Azureの仮想マシン#g4e1417d]]はコチラを既定で考える。
--特に500IOPSよりも高いIOPSが必要なシステム
--64GB以下のサイズだと[[Standard HDD>#lbddfe06]]よりもパフォーマンスが悪くなる場合がある。
--可用性セットを組まなくてもSLAの対象となる。

***Ultra ディスク [#ad91f84d]
I/O 集約型ワークロード向けのSSDベース

*課金 [#y33e1d12]
-管理ディスクの方が、高額になりがち。
-リソースIDが、/subscriptions/xxxx で始まっていたら、管理ディスク

-中途半端なサイズで作成しても課金は同じ

-[[仮想マシンを割当解除してもディスクの課金は継続する。>Azureの仮想マシン#f5d72db5]]

**unManage Disk (非管理ディスク) [#d523f0d5]
-Azure Storageのディスク形式のAzure Disk Storage。
-使った(書き込んで専有した) 容量だけ課金される。
-VM作成時に、管理ディスクを使用 [いいえ] を選択。
-Azure Storage上のディスク形式

-課金

--Standardディスクを使用する場合は、~
GPv1・GPv2で、費用の差異がある。
---GPv1は、容量確保型、確保容量で課金される。
---GPv2は、~
・使った(書き込んで専有した)容量だけ課金される。~
・その代わりに、トランザクション(I/O)の課金がある。~
・また、[[GRS/RA-GRS>Azureの冗長化#gebb4e38]]のみデータ転送に対する課金がある。

--Premiumディスクは、容量確保型、確保容量で課金される。

-VM作成時に、管理ディスクを使用 [いいえ] を選択する。
-IDは、URLで、「https://・・・.windows.net/・・・」などとなる。

**Managed Disk (管理用ディスク) [#pc0c50ba]
-Azure Storageではない容量確保型、確保容量で課金される。
-VM作成時に、管理ディスクを使用 [はい] を選択。
-Azure Storage上でAzure Disk Storage
-容量確保型、確保容量で課金される。
-VM作成時に、管理ディスクを使用 [はい] を選択する。
-IDは、リソースIDで、「/subscriptions/・・・」となる。

**切り替え [#g0ed0026]
VMからでたッチしたインストールディスクをvhd化、~
vhdを非管理ディスクへ変換して、VMへアタッチ。
**VMの管理用ディスクを切り替える。 [#g0ed0026]
VMで使用している[[管理用ディスク>#pc0c50ba]]を[[非管理ディスク>#d523f0d5]]に切り替える。

***概要 [#p7b35cfa]
+管理ディスクからvhdを取り出す
++[[下を参考に>#mb98251e]]、管理ディスクをエクスポート。
++URLが表示されるので、仮想マシンと同じリソースグループに、~
新規にストレージアカウント & コンテナを作成して、vhd をコピー。
VMからデタッチした[[管理用ディスク>#pc0c50ba]](インストール・ディスク)を[[VHD]]化、~
[[VHD]]を[[非管理ディスク>#d523f0d5]](Azureのディスク ストレージ)に保存して、VMへアタッチ。

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

***スクリプト [#de5dad7f]
&ref(rm-recreate-vm.ps1);
*スクリプト [#w3ec16df]

 <#
   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
   }
**概要 [#hd18dec9]
-以下のps1ファイルを
--[[アップロードしてAzure Cloud Shell>Azure Cloud Shell#e8410850]]で実行するか、
--[[ローカルにAzure PowerShellをインストール>Azure PowerShell#qe06516c]]して実行する。

***参考 [#pa74c672]
-管理ディスク (Managed Disks) のサブスクリプション間やリソース グループ間の~
-以下のように実行する。

**管理ディスクの実容量を確認する [#h3288689]
BLOB の [[SASトークン>トークン#w01b1c2d]] URL~
を使用して管理ディスクの実容量を確認する。

***ps1ファイル [#oe2e25ac]
-&ref(Get-BlobBytes.ps1);

***使用方法 [#x9d35a73]
-Azureポータルで、管理ディスクをエクスポートして BLOB Urlを得る。~
>Azureポータル >>「ディスク」>>「ディスク名」>> [エクスポート] >> [URLの生成]

-生成されたURLを指定して、実行すると、
 .\Get-BlobBytes.ps1 -url 'https://mdxxxxxxx.blob.core.windows.net/・・・'

-下の様な表示を確認できる。
 BlobName    : xxxxxxxxxxx
 BlobLength  : nnnnnnnnnnn   <= 割り当てられたサイズ (GiB)
 BlobGB      : nn.nn
 ActualBytes : nnnnnnnnnn    <= 実容量のサイズ
 ActualGB    : nn.nn            (GB表記)

***補足説明 [#gf7379b4]
-Page BLOBのUrl

--管理ディスクからエクスポートされたUrlは、変換されたPage BLOBのUrlになる。

--最後に、Azureポータルの [x エクスポートのキャンセル] を~
クリックして、[[SASトークン>トークン#w01b1c2d]] URLを取り消す(無駄な共有はしない)。

-見積もり
--[[AzureのVHDは、Sparse Files形式で、実使用容量(ActualGB)の分だけPage BLOBを使う。>VHD]]

--従って、非管理ディスクに変換した場合の見積もりは以下で行う。
---Page BLOBをActualGBの容量使用する見積もりを行う。
---トランザクション課金の見積もりを行う(¥0.04032 / 10,000 トランザクション(2018/02/08))。

**[[VHD]]に変換する [#g5d4dca6]
-既存の[[VHD]]ファイルを使ったVM作成は、Azureポータルではできないので、スクリプトが必要。
-スクリプトでは、管理ディスクのUrlを使用して、Azure Storageに [[VHD]]ファイルとしてコピーする。

***ps1ファイル [#w79c3bf7]
-&ref(rm-convert-vm-manageddisk-to-vhd.ps1);

***使用方法 [#ocf2a88d]
以下のように実行する。

-Azureポータルから、
--VM名
--リソース・グループ名

>を確認する。

-サブスクリプション
--名前を確認、
 Get-AzureRmSubscription

--選択し、
 Select-AzureRmSubscription -SubscriptionName サブスクリプション名

-リソース・グループ名、VM名を指定して実行。
 .\rm-convert-vm-manageddisk-to-vhd.ps1 -ResourceGroupName リソース・グループ名 -vmName VM名

***補足説明 [#vd602b8a]
-上記を実行後に表示される管理ディスクを削除する。

--非同期操作はポータル表示との整合性が取れず、~
「VM → 管理ディスクの関連付け」が削除されていないように見えることがある。

--この場合、管理ディスクの「所有者 VM」欄を確認し~
「管理ディスク → VMの関連付け」を確認すると良い。

--このように、IaaCは、~
ポータルでサポートされてない操作を実装するケースが多そうだが、~
そもそもサポートされない操作には非同期である操作が多く、~
実装上の問題( ≒ ポータル表示との整合性の問題)があるもよう。

*参考 [#na13f61a]
-[[Azureディスクストレージの種類(2018年6月現在)>https://jpaztech1.z11.web.core.windows.net/Azure%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E7%A8%AE%E9%A1%9E(2018%E5%B9%B46%E6%9C%88%E7%8F%BE%E5%9C%A8).html]]

**microsoft.com [#sacca7a6]
-管理ディスク (Managed Disks) のサブスクリプション間やリソース・グループ間の~
移行について – Japan Azure Technical Support Engineers' Blog~
https://blogs.technet.microsoft.com/jpaztech/2017/08/17/export-managed-disks-to-vhd/

*参考 [#na13f61a]
**[[Azure PowerShell]] [#w32504af]
**[[Azure Cloud Shell]] [#j5b74671]
***Microsoft Azure [#f195f95e]
-Disk Storage~
https://azure.microsoft.com/ja-jp/services/storage/unmanaged-disks/

-Managed Disks~
https://azure.microsoft.com/ja-jp/services/managed-disks/
--料金 - Managed Disks~
https://azure.microsoft.com/ja-jp/pricing/details/managed-disks/

***Microsoft Docs [#f7935e8b]
-Azure Virtual Machines
--Azure Disk Storage の概要~
https://docs.microsoft.com/ja-jp/azure/virtual-machines/managed-disks-overview
--Azure IaaS VM 用のディスクの種類の選択 - マネージド ディスク~
https://docs.microsoft.com/ja-jp/azure/virtual-machines/disks-types

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


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