次の方法で共有


新しいハードウェアで Azure Local に移行する

適用対象: Azure Local 2311.2 以降。Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2008 R2

重要

Azure Stack HCI が Azure Local の一部になりました。 ただし、Azure Stack HCI の古いバージョン (22H2 など) では引き続き Azure Stack HCI が参照され、名前の変更は反映されません。 詳細情報

このトピックでは、Windows PowerShell と Robocopy を使用して、Windows Server 2012 R 2以降の仮想マシン (VM) ファイルを新しい Azure Local ハードウェアに移行する方法について説明します。 Robocopy は、マシン間でファイルをコピーするための堅牢な方法です。 切断された場合は再開され、最後の既知の状態から処理が続けられます。 また、Robocopy では、サーバー メッセージ ブロック (SMB) を利用したマルチスレッド ファイルのコピーもサポートされています。 詳細については、「Robocopy」を参照してください。

Windows Server から Azure Local への Hyper-V ライブ マイグレーションと Hyper-V レプリカの使用はサポートされていません。 ただし、Hyper-V レプリカは有効で、Azure Local システムでサポートされています。 VM を同じシステムの他のボリュームにレプリケートすることはできず、他の Azure Local システムにのみレプリケートできます。

移行したい VM が Windows 2012 R2 以前の上にある場合は、「古い VM の移行」を参照してください。

同じハードウェアを使用して Azure Local を移行するには、「同じハードウェアに Azure Local を移行する」を参照してください。

次の図は、Windows Server 移行元クラスターと Azure Local 移行先システムを例として挙げています。 VM はスタンドアロン マシンにも移行できます。

クラスターを Azure Local に移行する

予想されるダウンタイムという点では、システム間でデュアル 40GB RDMA East-West ネットワークでシングル NIC を使用し、32 マルチスレッドで Robocopy を構成した場合、1 時間あたり 1.9TB の転送速度を実現できます。

ストレッチ クラスター用 VM の移行については、この記事では説明しません。

はじめに

移行を始める前に、要件と考慮事項がいくつかあります。

  • すべての Windows PowerShell コマンドは、管理者として実行する必要があります。

  • 移行元と移行先の両方のクラスターでの管理者アクセス許可があるドメイン資格情報と、両方のクラスターが含まれる移行元と移行先の組織単位 (OU) での完全な権限を、持っている必要があります。

  • VM の移行に使用するシステム間の Kerberos 認証を容易にするため、両システムは同じ Active Directory のフォレストとドメイン内にある必要があります。

  • 両方のシステムが Active Directory OU に存在し、この OU にグループ ポリシー オブジェクト (GPO) ブロックの継承が設定されている必要があります。 これにより、ドメイン レベルの GPO とセキュリティ ポリシーによって、移行が影響を受けることがなくなります。

  • クラスター間で整合性のある Kerberos 認証をサポートするため、両方のクラスターが同じタイム ソースに接続されている必要があります。

  • 移行元クラスターの VM によって使用されている Hyper-V 仮想スイッチの名前を記録しておきます。 VM をインポートする前に、Azure Local の移行先クラスターの「仮想マシン ネットワーク」に同じ仮想スイッチ名を使用する必要があります。

  • 移行元 VM の ISO イメージ ファイルをすべて削除します。 これは、Hyper-V マネージャーの [VM Properties]\(VM のプロパティ\)[Hardware section]\(ハードウェア セクション\) を使用して行います。 すべての仮想 CD/DVD ドライブについて、[削除] を選択します。

  • 移行元クラスターのすべての VM をシャットダウンします。 これは、移行プロセス全体を通してバージョン管理と状態が維持されるようにするために必要です。

  • Azure Local が VM のバージョンをサポートしているかどうかを確認し、必要に応じて VM をインポートして更新します。 それを行う方法については、「VM のバージョンのサポートと更新」セクションを参照してください。

  • 移行元クラスター上のすべての VM をバックアップします。 すべてのアプリケーションとデータのクラッシュ整合バックアップ、およびすべてのデータベースのアプリケーション整合バックアップを完了します。 Azure をバックアップするには、「Azure バックアップを使用する」を参照してください。

  • 以前の状態にロールバックする必要がある場合に備えて、移行元システムの VM とドメイン コントローラーのチェックポイントを作成します。 これは、物理サーバーには適用されません。

  • エンドツーエンドの転送パケット サイズが最も効率的になるように、移行元と移行先のクラスター ストレージ ネットワークで、最大ジャンボ フレーム サイズが同じであることを確認します (特に、RDMA ネットワーク アダプターと、それぞれのスイッチ ネットワーク ポート)。

  • 移行元クラスターの Hyper-V 仮想スイッチの名前を記録しておきます。 移行先クラスターでそれを再利用します。

  • Azure Local のハードウェアは、少なくとも移行元ハードウェアと同等の容量と構成である必要があります。

  • ファイル転送の速度を最高にするため、移行元と移行先のクラスター間のネットワーク ホップ数または物理的な距離を最小限にします。

VM のバージョンのサポートと更新

次の表は、Windows Server OS のバージョンとその VM のバージョンの一覧です。

VM が稼働している OS のバージョンに関係なく、Azure Local への直接移行でサポートされる VM の最小バージョンはバージョン 5.0 です。 これは、Windows Server 2012 R2 での VM の既定のバージョンを表します。 したがって、たとえばバージョン 2.0、3.0、または 4.0 で実行されている VM は、移行前にバージョン 5.0 に更新する必要があります。

OS バージョン VM のバージョン
Windows Server 2008 SP1 2.0
Windows Server 2008 R2 3.0
Windows Server 2012 4.0
Windows Server 2012 R2 5.0
Windows Server 2016 8.0
Windows Server 2019 9.0
Windows Server 2022
Azure ローカル 9.0

Windows Server 2012 R2 以降の VM の場合、Robocopy の移行スクリプトを実行する前に、まずすべての VM を移行元ハードウェアでサポートされている最新の VM バージョンに更新します。 これにより、すべての VM が少なくともバージョン 5.0 になり、VM のインポートが成功するようになります。

Windows Server 2008 SP1、Windows Server 2008 R2-SP1、および Windows 2012 上の VM の場合、VM のバージョンはバージョン 5.0 より小さくなります。 これらの VM では、.vcmx ファイルではなく、構成に .xml ファイルも使用されます。 そのため、Azure Local への VM の直接インポートはサポートされていません。 このような場合は、「古い VM の移行」で詳しく説明されている 2 つのオプションがあります。

VM バージョンの更新

以下のコマンドは、Windows Server 2012 R2 以降に適用されます。 1 台のサーバーについてすべての VM のバージョンを表示するには、次のコマンドを使用します。

Get-VM * | Format-Table Name,Version

クラスターのすべてのノード内のすべての VM バージョンを表示する。

Get-VM –ComputerName (Get-ClusterNode)

すべてのサーバーで、すべての VM をサポートされている最新バージョンに更新するには:

Get-VM –ComputerName (Get-ClusterNode) | Update-VMVersion -Force

RDMA レコメンデーション

Remote Direct Memory Access (RDMA) を使用している場合、Robocopy はシステム間で VM をコピーする際に RDMA を使用できます。 以下に示すのは、RDMA の使用に関する推奨事項です。

  • 両システムを同じ top of rack (ToR) スイッチに接続し、移行元システムと移行先システム間で最速のネットワーク パスを使用します。 ストレージ ネットワーク パスの場合、通常、これにより 10 GbE/25 GbE 以上の速度がサポートされ、RDMA が利用されます。

  • RDMA アダプタや規格が移行元システムと移行先システムで異なる場合 (ROCEとiWARP)、Robocopy は代わりに最速のネットワーク経由で TCP/IP 上の SMB を利用します。 これは通常、East-West ネットワークのデュアル 10Gbe/25Gbe 以上の速度となり、システム間で VM VHDX ファイルをコピーする最も最適な方法を提供します。

  • システム間 (East-West ネットワーク)で、Robocopy が RDMA を利用できるようにするには、RDMA ストレージ ネットワークが移行元システムと移行先システム間でルーティングできるように設定します。

新しいシステムを作成する

Azure Local インスタンスを作成する前に、システム内の各新規マシンに Azure Stack HCI OS をインストールする必要があります。 詳細については、「Azure Local 向けオペレーティング システムをデプロイする」を参照してください。

Windows Admin Center または Windows PowerShell を使用して新しいシステムを作成します。 方法の詳細については、「Windows Admin Center を使用して Azure Local インスタンスを作成する」および「Windows PowerShell を使用して Azure Local を作成する」を参照してください。

重要

システム間の Hyper-V virtual スイッチ (VMSwitch) 名は同じである必要があります。 移行先システムで作成された仮想スイッチ名は、すべてのサーバーの移行元システムで使用する名前を一致する必要があります。 VM をインポートする前に、スイッチ名が同じであることを確認します。

新しい VM を作成する前に Azure で Azure Local インスタンスを登録する必要があります。 詳細については、Azure への登録に関するページを参照してください。

移行スクリプトを実行する

次の PowerShell スクリプト Robocopy_Remote_Server_.ps1 は、Robocopy を使用して、VM ファイルとそれに依存するディレクトリとメタデータを移行元システムから移行先システムにコピーします。 このスクリプトは、元のスクリプトを変更したものです: PowerShell と RoboCopy を使用してファイルをリモートサーバーにコピーする

このスクリプトは、すべての VM VHD、VHDX、および VMCX ファイルを、指定した Cluster Shared Volume (CSV) の移行先システムにコピーします。 一度に 1 つの CSV が移行されます。

移行スクリプトは、各移行元マシンでローカルで実行され、RDMA と高速ネットワーク転送の利点を生かします。 実行手順:

  1. 各移行先マシンが、移行先 CSV の CSV 所有者に設定されていることを確認します。

  2. コピー対象のすべての VM の VHD および VHDX ファイルの場所を確認するには、次のコマンドレットを使用します。 C:\vmpaths.txt ファイルを調べて、ステップ 4 で Robocopy を開始する最上位のソース ファイル パスを確認します。

    Get-ChildItem -Path "C:\Clusterstorage\Volume01\*.vhd*" -Recurse > c:\vmpaths.txt
    

    VHD ファイルと VHDX ファイルが同じボリューム上の異なるパスに配置されている場合は、異なるパスごとに移行スクリプトを実行して、すべてをコピーする必要があります。

  3. 以下の 3 つの変数を変更して、移行元システムの VM パスと移行先システムの VM パスを一致させます。

    • $Dest_Server = "Node01"
    • $source = "C:\Clusterstorage\Volume01"
    • $dest = "\\$Dest_Server\C$\Clusterstorage\Volume01"
  4. 移行元の各 Windows Server サーバーで次のスクリプトを実行します。

<#
#===========================================================================  
# Script: Robocopy_Remote_Server_.ps1
#===========================================================================  
.DESCRIPTION:
Change the following variables to match your source system VM path with the destination system VM path. Then run this script on each source Cluster Node CSV owner and make sure the destination machine is set to the CSV owner for the destination CSV.

        Change $Dest_Server = "Node01"
        Change $source  = "C:\Clusterstorage\Volume01"
        Change $dest = "\\$Dest_Server\C$\Clusterstorage\Volume01"
#>

$Space       = Write-host ""
$Dest_Server = "Node01"
$source      = "C:\Clusterstorage\Volume01"
$dest        = "\\$Dest_Server\C$\Clusterstorage\Volume01"
$Logfile     = "c:\temp\Robocopy1-$date.txt"
$date        = Get-Date -UFormat "%Y%m%d"
$cmdArgs     = @("$source","$dest",$what,$options)  
$what        = @("/COPYALL")
$options     = @("/E","/MT:32","/R:0","/W:1","/NFL","/NDL","/LOG:$logfile","/xf")
 
## Get Start Time
$startDTM = (Get-Date)
 
$Dest_Server     = "Node01"
$TARGETDIR   = \\$Dest_Server\C$\Clusterstorage\Volume01
$Space
Clear
## Provide Information
Write-host ".....Copying Virtual Machines FROM $Source to $TARGETDIR ....................." -fore Green -back black
Write-Host "........................................." -Fore Green

## Kick off the copy with options defined  
robocopy @cmdArgs
 
## Get End Time
$endDTM = (Get-Date)
 
## Echo Time elapsed
$Time = "Elapsed Time: = $(($endDTM-$startDTM).totalminutes) minutes"  
## Provide time it took
Write-host ""
Write-host " Copy Virtual Machines to $Dest_Server has been completed......" -fore Green -back black
Write-host " Copy Virtual Machines to $Dest_Server took $Time        ......" -fore Cyan

VMs をインポートする

ベスト プラクティスは、VM ワークロードの回復力、パフォーマンス、およびスケールを向上させるために、各 CSV 所有者の VM の均等なバランスを可能にするために、マシンごとに少なくとも1つの Cluster Shared Volume (CSV) を作成することです。 デフォルトでは、このバランスは 5 分ごとに自動的に行われます。移行元マシンと移行先マシン間で Robocopy を使用する場合は、移行元と移行先 CSV 所有者が一致するように考慮し、最適な転送パスと速度を提供する必要があります。

Azure Local インスタンスで以下の手順を実行して、VM をインポートし、高可用性にして起動します。

  1. 次のコマンドレットを実行するとすべての CSV 所有者マシンが表示されます。

    Get-ClusterSharedVolume
    
  2. 各マシンの場合、C:\Clusterstorage\Volume にアクセスして、例えば C:\Clusterstorage\volume01 などのすべての VM のパスを設定します。

  3. 各 CSV 所有者マシンで以下のコマンドレットを実行し、VM インポート前に、ボリュームごとにすべての VM VMCX ファイルへのパスを表示します。 環境に合わせてパスを変更します。

    Get-ChildItem -Path "C:\Clusterstorage\Volume01\*.vmcx" -Recurse
    

    Windows Server 2012 R2 以前の VM では、VCMX ファイルではなく XML ファイルが使用されています。 詳細については、「古い VM を移行する」セクションを参照してください。

  4. 各マシンに対して以下のコマンドレットを実行し、インポート、登録、および各 CSV 所有者マシン上で VM を高可用性にします。 これにより、プロセッサとメモリの割り当てが最適になるように VM が均等に分散されます。

    Get-ChildItem -Path "C:\Clusterstorage\Volume01\*.vmcx" -Recurse | Import-VM -Register | Get-VM | Add-ClusterVirtualMachineRole
    
  5. 各移行先 VM を各マシンで起動する:

    Start-VM -Name
    
  6. ログオンし、すべての VM が実行されていること、およびすべてのアプリとデータが存在することを確認します。

    Get-VM -ComputerName Server01 | Where-Object {$_.State -eq 'Running'}
    
  7. VM を Azure Local の最新バージョンにアップデートして、すべての進歩を活用します:

    Get-VM | Update-VMVersion -Force
    
  8. スクリプトが完了した後、Robocopy のログ ファイルでエラーを調べて、すべての VM が正常にコピーされたことを確認します。

古い VM の移行

Windows Server 2008 SP1、Windows Server 2008 R2-SP1、Windows Server 2012、または Windows Server 2012 R2 の VM がある場合は、このセクションが適用されます。 これらの VM を処理するには、次の 2 つのオプションがあります。

  • これらの VM をまず Windows Server 2012 R2 以降に移行し、VM バージョンを更新してから移行プロセスを開始します。

  • Robocopy を使用して Azure Local にすべての VM VHD にコピーします。 その後、新しい VM を作成し、コールド・プレートした VHD を Azure Local の VM にアタッチします。 こうすることで、このような古い VM に対する VM バージョンの制限が回避されます。

Windows Server 2012 R2 以前の Hyper-V ホストでは、VM の構成に XML ファイル形式が使用されています。これは、Windows Server 2016 以降の Hyper-V ホストで使用されている VCMX ファイル形式とは異なります。 これらの VM を Azure Local にコピーするには、別の Robocopy コマンドが必要です。

オプション 1: 段階的移行

これは、Windows Server 2008 SP1、Windows Server 2008 R2-SP、および Windows Server 2012 でホストされている VM に使用される 2 段階の移行です。 使用するプロセスは次のとおりです。

  1. コピーするすべての VM の VHD ファイルと VHDX ファイルの場所を検出した後、vmpaths.txt ファイルを調べて、Robocopy を開始する最上位のソース ファイル パスを確認します。 次のコマンドレットを使用します。

    Get-ChildItem -Path "C:\Clusterstorage\Volume01\*.vhd*" -Recurse > c:\vmpaths.txt
    
  2. 最初に、次の例の Robocopy コマンドを使用し、ステップ 1 で確認した最上位のパスを使用して VM を Windows Server 2012 R2 にコピーします。

    Robocopy \\2012R2-Clus01\c$\clusterstorage\volume01\Hyper-V\ \\20H2-Clus01\c$\clusterstorage\volume01\Hyper-V\ /E /MT:32 /R:0 /w:1 /NFL /NDL /copyall /log:c:\log.txt /xf

  3. Windows Server 2012 R2 システムで使用される仮想スイッチ (VMSwitch) 名が、Windows 2008 R2 または Windows Server 2008 R2-SP1 ソースで使用されるスイッチ名と同じであることを確認します。 システム内のすべてのマシンで使用されているスイッチ名を表示するには、次を実行します。

    Get-VMSwitch -CimSession $Servers | Select-Object Name
    

    必要に応じて、Windows Server 20212 R2 でスイッチの名前を変更します。 すべてのマシンでスイッチ名を変更するには、次を実行します。

    Invoke-Command -ComputerName $Servers -ScriptBlock {rename-VMSwitch -Name $using:vSwitcholdName -NewName $using:vSwitchnewname}
    
  4. VM をコピーして Windows Server 2012 R2 にインポートします。

    Get-ChildItem -Path "c:\clusterstorage\volume01\Hyper-V\*.xml"-Recurse
    
    Get-ChildItem -Path "c:\clusterstorage\volume01\image\*.xml" -Recurse    | Import-VM -Register | Get-VM | Add-ClusterVirtualMachineRole  
    
  5. Windows Server 2012 R2 で、すべての VM のバージョンを 5.0 に更新します。

    Get-VM | Update-VMVersion -Force
    
  6. 移行スクリプトを実行して VMs を Azure Local にコピーします。

  7. 「VM をインポートする」の手順を実行して、手順 3 と 手順 4 を以下のように置き換え、XML ファイルを処理し、VM を Azure Local にインポートします。

    Get-ChildItem -Path "c:\clusterstorage\volume01\Hyper-V\*.xml"-Recurse
    
    Get-ChildItem -Path "c:\clusterstorage\volume01\image\*.xml" -Recurse    | Import-VM -Register | Get-VM | Add-ClusterVirtualMachineRole  
    
  8. VM をインポートする」の残りの手順を完了します。

オプション 2: VHD の直接コピー

この方法では、Windows 2008 SP1、Windows 2008 R2-SP1、および Windows 2012 でホストされている VM VHD を Azure Local にコピーするために Robocopy を使用します。 これにより、このような古い VM でのサポートされる最小 VM バージョンの制限が回避されます。 Windows Server 2008 SP1 および Windows Server 2008 R2-SP1 でホストされている VM には、このオプションを使用することをお勧めします。

Windows 2008 SP1 および Windows 2008 R2-SP1 でホストされている VM でサポートされているのは、第 1 世代の VHD を使用する第 1 世代の VM だけです。 そのため、コピーした VHD を新しい VM にアタッチできるように、対応する Generation 1 VM を Azure Local に作成する必要があります。 これらの VHD は第 2 世代の VHD にアップグレードできないことに注意してください。

Windows Server 2012 では、第 1 世代と第 2 世代両方の VM がサポートされています。

使用するプロセスは次のとおりです。

  1. Robocopy 例を使用して VMs VHDs を直接 Azure Local にコピーします。

    Robocopy \\2012R2-Clus01\c$\clusterstorage\volume01\Hyper-V\ \\20H2-Clus01\c$\clusterstorage\volume01\Hyper-V\ /E /MT:32 /R:0 /w:1 /NFL /NDL /copyall /log:c:\log.txt /xf

  2. 第 1 世代の新しい VM を作成します。 これを行う方法の詳細については、VM の管理に関するページを参照してください。

  3. コピーした VHD ファイルを新しい VM にアタッチします。 詳細については、「仮想ハード ディスク (VHD) の管理」を参照してください

参考までに、次の Windows Server ゲスト オペレーティング システムでは第 2 世代の VM がサポートされています。

  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows 10
  • 64 ビット バージョンの Windows 8.1 (64 ビット)
  • 64 ビット バージョンの Windows 8 (64 ビット)
  • Linux (サポートされる Linux と FreeBSD の VM に関するページを参照)

次のステップ