Azure Stack HCI の仮想マシン記憶域の移動

Azure Stack HCI の運用では、仮想マシンの記憶域を移動することはほとんどありません。
しかし、ボリュームなどの構成を変更する場合には、仮想マシンの記憶域を移動することがあります。
Windows Admin Center(v1910)では、記憶域の移動はサポートされていないので、PowerShellを使って移動することになります。
移動元ボリューム内にあるサブフォルダーを検索して、移動先のボリュームへ仮想マシンを移動します。

$sourcefolder = “C:\ClusterStorage\Volume01”
$targetfolder = “C:\ClusterStorage\Volume02”
$FolderName = Get-ChildItem $sourcefolder

foreach($VNName0 in $FolderName){
$VMName = Get-vm -Computername NODE01,NODE02,NODE03| Where-Object{$_.Name -like ‘*’ + $VNName0 + ‘*’ }
if ($VMName){
$targetPath = $targetfolder + ‘\’ + $VNName0
if (Test-Path $targetPath){Write-Host “フォルダーが存在しています”} else {New-Item $targetPath -type directory}
Move-VMStorage -DestinationStoragePath $targetPath -VM $VMName
} else {
Write-Host “このフォルダーには仮想マシンはありません”
}
}

Windows Server 2019 記憶域スペースダイレクト のネットワーク

記憶域スペースダイレクトでは、高速なネットワーク接続のほかに、リモートダイレクトメモリアクセス (RDMA) を利用することか推奨されています。今回の検証環境では、RDMA に対応したネットワークインターフェースカード(Mellanox ConnectX-3)を使用しています。

Mellanox ConnectX-3 でInfiniBandRDMA Over Converged Ethernet(RoCE) の2つのプロトコルでRDMAがサポートされます。
既定は、InfiniBand です。

【InfiniBand を 使用する場合】
1.メーカーサイトのダウンロードサイトよりドライバーを入手します。

2.ダウンロードしたドライバーを実行します。

3.ライセンスに同意し、Next をクリックします。

4.展開先フォルダーを選択して、Next をクリックします。

5.パフォーマンスオプションは既定のまま Next をクリックします。

6.インストールオプションは既定のまま Next をクリックします。

7.Install をクリックします。

8.Finish をクリックします。

9.InfiniBand Subnet Manager をサービスとして登録するために、以下のPowerShell コマンドレッドを実行します。

New-Service –Name "OpenSM" –BinaryPathName "`"C:\Program Files\Mellanox\MLNX_VPI\IB\Tools\opensm.exe`" --service -L 128" -DisplayName "OpenSM" –Description "OpenSM for IB subnet" -StartupType Automatic

10.ibstat を実行し、State が Active になっていることを確認します。

11.vstat を実行し、port_state が PORT_ACTIVE となっていることを確認します。

12.PowerShell で以下のコマンドを実行し、ネットワークアダプターの構成を確認します。

Get-NetAdapter -Name IBNIC
Get-NetAdapterRDMA
Get-NetOffloadGlobalSetting | Select NetworkDirect

13.PowerShell で以下のコマンドを実行し、SMBの構成を確認します。

Get-SmbClientConfiguration | Select EnableMultichannel
Get-SmbClientNetworkInterface
Get-SmbServerConfiguration | Select EnableMultichannel
Get-SmbServerNetworkInterface

【RDMA Over Converged Ethernet (RoCE)を使用する場合】
1.デバイスマネージャー開き、システムデバイス > Mellanox ConnectX‐3 VPI (MT04099) Network Adapter を選択します。

2.操作メニューにあるプロパティをクリックします。

3.Port Protocol タブを開き、HCA Port Type Configuration を「ETH」をクリックし、「OK」をクリックします。

Windows Server 2019 記憶域スペースダイレクト 検証環境構築

2ノードの記憶域スペースダイレクト を検証する環境を構築していきます。
OSのインストール、OSやドライバーの最新化、ドメインの参加まで終わったサーバーで始めます。
ドメインの管理者アカウントを使って作業をしていきます。

1.サーバー2台に役割と機能を追加します。

$ServerList = "S2DSV01", "S2DSV02"
$FeatureList = "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer", "Hyper-V-Tools", "RSAT-Clustering-Mgmt"
Invoke-Command ($ServerList) {
    Install-WindowsFeature -Name $Using:Featurelist
}

2.再起動後、物理ドライブの初期化を行います。
今回接続されている物理ドライブは、SSD2個、HDD2個、USB1個です。

$ServerList = "S2DSV01", "S2DSV02"
Invoke-Command ($ServerList) {
    Update-StorageProviderCache
    Get-StoragePool | ? IsPrimordial -eq $false | Set-StoragePool -IsReadOnly:$false -ErrorAction SilentlyContinue
    Get-StoragePool | ? IsPrimordial -eq $false | Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false -ErrorAction SilentlyContinue
    Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false -ErrorAction SilentlyContinue
    Get-PhysicalDisk | Reset-PhysicalDisk -ErrorAction SilentlyContinue
    Get-Disk | ? Number -ne $null | ? IsBoot -ne $true | ? IsSystem -ne $true | ? PartitionStyle -ne RAW | % {
        $_ | Set-Disk -isoffline:$false
        $_ | Set-Disk -isreadonly:$false
        $_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false
        $_ | Set-Disk -isreadonly:$true
        $_ | Set-Disk -isoffline:$true
    }
    Get-Disk | Where Number -Ne $Null | Where IsBoot -Ne $True | Where IsSystem -Ne $True | Where PartitionStyle -Eq RAW | Group -NoElement -Property FriendlyName
} | Sort -Property PsComputerName, Count

3.クラスタを構築する前に、検証を実施します。
Include パラメータを指定するとエラーになってしまったので、今回は、Include パラメータは指定しませんでした。

Test-Cluster –Node s2dsv01, s2dsv02

4.クラスタを構築します。
サーバーのIPアドレスが静的である場合は以下のコマンドを使用します。

New-Cluster -Name S2DSV -Node S2DSV01,S2DSV02 -NoStorage –StaticAddress XXX.XXX.XXX.XXX

5.管理ツールを使用してクラスタの構成を確認およびクラスターの監視の構成します。
特にDNSにクラスタ名(ここではS2DSV)に登録されるのに時間がかかる場合があるので、Ping コマンドなどで確認することをお勧めします。
フェールオーバークラスタマネージャーのクラスタコアリソースがすべてオンラインであることを確認することもお勧めします。

6.記憶域スペースダイレクトを有効にします。
特にDNSにクラスタ名(ここではS2DSV)に登録されるのに時間がかかる場合があるので、Ping コマンドなどで確認することをお勧めします。

Enable-ClusterStorageSpacesDirect -CimSession S2DSV

7.Admin Center のダッシュボードで確認

Windows Server 2019 のインストール

構築したサーバーに Windows Server 2019 Datacenter エディションをインストールします。
今回は、応答ファイル(AutoUnattend.xml)による自動インストールにしてみました。
使用した応答ファイルには、次の設定が自動的にインストールされるように設定されています。
この後、ホスト名の設定、ドメインの参加、リモートデスクトップの有効化を設定いたします。

1.インストールの言語、時刻と通貨の設定、キーボードまたは入力方式、キーボードの種類

2.プロダクトキー

3.インストールするOSの種類

4.インストール先の設定

5.Administrtorのパスワード設定

応答ファイルの中身は以下のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <InputLocale>0411:E0010411</InputLocale>
            <SystemLocale>ja-JP</SystemLocale>
            <UILanguage>ja-JP</UILanguage>
            <UserLocale>ja-JP</UserLocale>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <UserAccounts>
                <AdministratorPassword>
                    <Value>*********</Value>
                    <PlainText>false</PlainText>
                </AdministratorPassword>
            </UserAccounts>
            <TimeZone>Tokyo Standard Time</TimeZone>
        </component>
    </settings>
    <settings pass="windowsPE">
        <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <InputLocale>0411:E0010411</InputLocale>
            <SystemLocale>ja-JP</SystemLocale>
            <UILanguage>ja-JP</UILanguage>
            <UserLocale>ja-JP</UserLocale>
        </component>
        <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <DiskConfiguration>
                <Disk wcm:action="add">
                    <CreatePartitions>
                        <CreatePartition wcm:action="add">
                            <Order>1</Order>
                            <Size>560</Size>
                            <Type>Primary</Type>
                        </CreatePartition>
                        <CreatePartition wcm:action="add">
                            <Order>2</Order>
                            <Type>Primary</Type>
                            <Extend>true</Extend>
                        </CreatePartition>
                    </CreatePartitions>
                    <ModifyPartitions>
                        <ModifyPartition wcm:action="add">
                            <Order>1</Order>
                            <PartitionID>1</PartitionID>
                            <Active>true</Active>
                            <Extend>false</Extend>
                            <Format>NTFS</Format>
                            <Label>システムで予約済み</Label>
                        </ModifyPartition>
                        <ModifyPartition wcm:action="add">
                            <Order>2</Order>
                            <PartitionID>2</PartitionID>
                            <Format>NTFS</Format>
                            <Letter>C</Letter>
                            <Active>false</Active>
                            <Extend>false</Extend>
                        </ModifyPartition>
                    </ModifyPartitions>
                    <DiskID>0</DiskID>
                    <WillWipeDisk>true</WillWipeDisk>
                </Disk>
            </DiskConfiguration>
            <ImageInstall>
                <OSImage>
                    <InstallFrom>
                        <MetaData wcm:action="add">
                            <Key>/IMAGE/INDEX</Key>
                            <Value>2</Value>
                        </MetaData>
                    </InstallFrom>
                    <InstallTo>
                        <DiskID>0</DiskID>
                        <PartitionID>2</PartitionID>
                    </InstallTo>
                </OSImage>
            </ImageInstall>
            <UserData>
                <ProductKey>
                    <Key>*****-*****-*****-*****-*****</Key>
                </ProductKey>
                <AcceptEula>true</AcceptEula>
            </UserData>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:c:/install.wim#Windows Server 2019 SERVERDATACENTER" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

新しいサーバーを構築してみました

自宅のサーバーがだいぶ古くなってきたので、サーバーを新調することにしました。
Windows Server だけで ハイパーコンバージドインフラ(HCI)が構築できるので、今回はこちらを試してみることにしました。

2019年3月27日に Microsoft は、HCI で仮想化アプリケーションを実行できる製品として「Azure Stack HCI」を発表しました。

今回構築したサーバーは次のとおりです。

CPU Intel Xeon E3-1235L v5 ×1
メモリ DDR4-2133 ECC-DIMM 16GB ×2
ディスク SSD SATA3.0 256GB
HDD SATA3.0 2TB
MLC USB3.0 64GB
×3
×3
×3
ネットワーク 10GB
1GB
×1
×2
マザーボード ASRock Rack C236WSI ×1
ケース SilverStone ML06-E ×1

PowerShell でHyper-V レプリカを設定

PowerShell を使って Hyper-V レプリカを設定します。初期レプリケーションの方法によってオプションが異なります。プライマリサーバーの設定では、レプリカサーバーへ送信される頻度(-ReplicationFrequencySec)、ネットワーク経由の圧縮( -CompressionEnabled)などを設定できます。

〇初期コピーをネットワーク経由で送信する

#レプリカサーバーの設定
PS\> Enable-VMReplication -VMName 仮想マシン名 -ComputerName レプリカサーバー -AsReplica
#プライマリサーバーの設定
PS\> Enable-VMReplication -VMName 仮想マシン名 -ComputerName プライマリサーバー -ReplicaServerName レプリカサーバー -AuthenticationType 認証の種類 -ReplicaServerPort レプリカサーバーのポート
#初期レプリケーションの実行
PS\> Start-VMInitialReplication -ComputerName プライマリサーバー -VMName 仮想マシン名

〇初期コピーとしてレプリカサーバー上の既存の仮想マシンを使用します

#レプリカサーバーの設定
PS\> Enable-VMReplication -VMName 仮想マシン名 -ComputerName レプリカサーバー -AsReplica
#プライマリサーバーの設定
PS\> Enable-VMReplication -VMName 仮想マシン名 -ComputerName プライマリサーバー -ReplicaServerName レプリカサーバー -AuthenticationType 認証の種類-ReplicaServerPort レプリカサーバーのポート
#初期レプリケーションの実行
PS\> Start-VMInitialReplication -ComputerName プライマリサーバー -VMName 仮想マシン名 -UseBackup

 

 

PowerShell を使って仮想マシンを移動する

Hyper-V サーバー内の 仮想マシンを別の仮想ホストへ移動するためのPowerShell コマンドです

PowerShell を利用するメリットの一つとして、仮想マシンの移動を指定順序で実行することができます。
例えば、移動元仮想ホスト上仮想マシンをすべて移動先仮想ホストへ移動するといったことができます。
この場合、移動元仮想ホストのディスクに重複除去機能を使用している場合は、移動先仮想ホストのディスクの空き容量に注意する必要があります。

$VMname = “移動したい仮想マシン名”
$VMHost = “移動先ホスト名”
$Path = “移動先パス名”
Move-VM $VMname -DestinationHost $Host -DestinationStoragePath $Path

参考:
PowerShell を使って仮想マシンの保存場所を移動する

Hyper-V 記憶域の移行の同時実行数を変更する

Hyper-Vの記憶域の移行の機能を利用すると同時に複数台の仮想マシンの保存先を変更することができます。
既定では2台までとなっています。
この同時実行数を変更する場合は、Hyper-Vの設定にある記憶域の移行から行います。

仮想マシンの起動中にエラーが発生して起動できない

仮想マシンの起動をすると以下のエラーが発生し、起動できないことがあります。

‘Windows Server 2016’ は起動できませんでした。

Microsoft Emulated IDE Controller (インスタンス ID yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy): 電源をオンにできませんでした。エラー ‘エラー: 一般のアクセスが拒否されました’。

IDE/ATAPI アカウントには、アタッチメント ‘E:\Windows Server 2016\Virtual Hard Disks\Disk1.avhdx’ を開くのに十分な特権がありません。エラー: ‘エラー: 一般のアクセスが拒否されました’。

Hyper-V 仮想マシン管理サービス アカウントには、アタッチメント ‘E:\Windows Server 2016\Virtual Hard Disks\Disk1.avhdx’ を開くのに十分な特権がありません。エラー: ‘エラー: 一般のアクセスが拒否されました’。

これは、ファイルをコピーなどしてアクセス権が変更された場合にアクセス権の不整合によるエラーのため起動ができない状況です。
この場合は、正しいアクセス権を付与することで、正常に起動できるようになります。
以下のコマンドで、アクセス権を付与します。

icacls アクセス権を変更したいファイル /grant “NT VIRTUAL MACHINE\仮想マシン ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”:(F)

忘れないようにメモ

PowerShell を使って仮想マシンの保存場所を移動する

Hyper-V サーバー内の 仮想マシンを別の記憶領域へ移動するためのPowerShell コマンドです

PowerShell を利用するメリットの一つとして、仮想マシンの移動を指定順序で実行することができます。

$VMname = “移動したい仮想マシン名”
$Path = “移動先パス名”
Move-VMStorage $VMname –DestinationStoragePath $Path

参考:
PowerShell を使って仮想マシンを移動する

Windows Server Essentials を中心とした雑記

中小企業で初めてサーバーを導入しようと思っている担当者向けにWindows Server Essentials や Small Business Server に関する情報を提供するブログです。

My Knowlage Base

ggrksといわれる前に。

Dj Saori's Hardstyle Life

Dj Saori in the Mix

exceedone (エクシード・ワン)

Just another WordPress.com site

WoodStreamのCtrl+Alt+Delete

WindowsやWindowsPhoneのお話をします。