この投稿は、vExperts Advent Calendar 2022 の 1日目です。初日なので、vSphere の基本機能の話にしました。
- はじめに、vExperts Advent Calendar 2022 について
- 今回の検証目的
- 今回の環境
- スナップショットの作成と削除
- スナップショット作成の実験(32個 作成)
- スナップショットの「すべて削除」
- おまけ
はじめに、vExperts Advent Calendar 2022 について
vExpert 2022 の主に Japan メンバーによるアドベントカレンダーです。
今年は 25名が参加します。みなさんよろしくお願いします。
今回の検証目的
ESXi の仮想マシンのスナップショットは、チェーンあたり 32個まで作成できます。
- Best practices for using VMware snapshots in the vSphere environment (1025279)
https://kb.vmware.com/s/article/1025279?lang=en_us
この KB には、下記のような記載があります。(いまのところ ESXi 7.x までが対象ですが・・・)
Maximum of 32 snapshots are supported in a chain.
そこで、今回は vSphere 8.0 の実機を利用して、実際に 32個のスナップショットを作成してみます。
今回の環境
vSphere 8.0(vCenter Server 8.0 + ESXi 8.0)の環境に、仮想マシンを 1台だけ(vm01)作成してあります。
vSphere Client から見ると、下記のような感じです。
大量のスナップショットを作成するのは大変なので、今回は PowerCLI を利用します。
- PowerShell Core 7.3
- PowerCLI 13
PS C:\> $PSVersionTable Name Value ---- ----- PSVersion 7.3.0 PSEdition Core GitCommitId 7.3.0 OS Microsoft Windows 10.0.19045 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0 PS C:\> Get-Module -Name VMware.PowerCLI -ListAvailable | select Version Version ------- 13.0.0.20829139
PowerCLI は、vCenter Server に接続して操作します。
PS C:\> Connect-VIServer lab-vc-08.go-lab.jp -Force
vCenter と ESXi のバージョンは 8.0 です。
PS C:\> $global:DefaultVIServer | select Name,Version,Build,IsConnected Name Version Build IsConnected ---- ------- ----- ----------- lab-vc-08.go-lab.jp 8.0.0 20519528 True PS C:\> Get-VMHost | Sort-Object Name | select Name, Version, Build, Parent Name Version Build Parent ---- ------- ----- ------ 192.168.10.111 8.0.0 20513097 lab-cluster-81 192.168.10.112 8.0.0 20513097 lab-cluster-81 192.168.10.113 8.0.0 20513097 lab-cluster-81 192.168.10.114 8.0.0 20513097 lab-cluster-81
仮想マシン「vm01」が作成してあります。
PS C:\> Get-VM -Name "vm01" Name PowerState Num CPUs MemoryGB ---- ---------- -------- -------- vm01 PoweredOff 1 2.000
スナップショットの作成と削除
それでは、PowerCLI で、vm01 にスナップショットを作成してみます。スナップショットの作成は「New-Snapshot」です。
PS C:\> Get-VM -Name "vm01" | New-Snapshot -Name "snapshot-test"
スナップショットは、Get-Snapshot で確認できます。
PS C:\> Get-VM -Name "vm01" | Get-Snapshot Name Description PowerState ---- ----------- ---------- snapshot-test PoweredOff
vSphere Client でも、スナップショットが作成されたことが確認できます。
スナップショットの削除は、Remove-Snapshot です。ちなみに、ESXi では仮想マシンのスナップショットを長く保持することを推奨していませんので不要なスナップショットはすぐに削除しておくとよいと思います。
PS C:\> Get-VM -Name "vm01" | Get-Snapshot -Name "snapshot-test" | Remove-Snapshot -Confirm:$false
スナップショット作成の実験(32個 作成)
それでは、32個のスナップショットを作成してみます。今回は ForEach でループして、snap-01 ~ snap32 という名前のスナップショットを作成してみます。
PS C:\> 1..32 | ForEach {Get-VM -Name "vm01" | New-Snapshot -Name ("snap-" + $_.toString("00")) -ErrorAction:Stop}
実際にスナップショットを作成してみると、32個目の作成はエラーになりました。
エラー内容は「スナップショットの階層が深すぎる」と期待通りですが、最初の階層も含めて32個(つまりチェーンに 31個作成できる)ということのようです。
The operation for the entity "vm01" failed with the following message: "Snapshot hierarchy is too deep.
vSphere Client ではこのようになります。タスクをみると「スナップショット階層が深過ぎます。」というエラーで失敗しています。スナップショットの深さについての制限は、ただ推奨されないというものではなく、実際に設定できない上限値だということがわかりました。
ちなみにこの環境は、vSAN 8.0 の新アーキテクチャである vSAN ESA(Express Storage Architecture)で構成されています。
ESAでは、スナップショットの機能改善もされていますが、「スナップショットの深さの 32世代制限」は ESXi の仮想マシンに関係する上限値なので、仮想ディスクが配置されるデータストアに関係なく制限されています。
PS C:\> Get-VsanClusterConfiguration -Cluster "lab-cluster-81" | select VsanEsaEnabled VsanEsaEnabled -------------- True
試しに、深さが 32世代にならないように、スナップショットを追加作成してみます。 スナップショットの「元に戻す」にあたるコマンドを実行して、「snap-30」に戻って、あらため「snap-32」を作成してみます。
PS C:\> Get-VM -Name "vm01" | Set-VM -Snapshot "snap-30" -Confirm:$false PS C:\> Get-VM -Name "vm01" | New-Snapshot -Name "snap-32"
今度は、チェーンの深さが 32個にならないので追加作成できました。
スナップショットの「すべて削除」
今回の検証で作成したスナップショットを、まとめて削除しておきます。vSphere Client にあるスナップショットの「すべて削除」は、PowerCLI でも実行できます。
まず、作成時間が一番古いスナップショットを探します。
PS C:\> Get-VM -Name "vm01" | Get-Snapshot | Sort-Object Created | select -First 1 Name Description PowerState ---- ----------- ---------- snap-01 PoweredOff
このスナップショットに対して「Remove-Snapshot -RemoveChildren」を実行すると、スナップショット単位ではなく「すべて削除」が実行されます。
PS C:\> Get-VM -Name "vm01" | Get-Snapshot | Sort-Object Created | select -First 1 | Remove-Snapshot -RemoveChildren -Confirm:$false
おまけ
ツリーの深さに気をつければ、スナップショットは 32個以上でも作成できます。
たとえば、下記のような、チェーンの深さの上限に到達しないようにスナップショットを作成する PowerCLI スクリプトを用意してみました。
(% は、ForEach のエイリアスです)
そして、PowerCLI で実行してみます。
PS> ./advent-2022-day01.ps1
こんな感じに、スナップショットが作成されました。
スナップショットを何度か切り替えて追加作成しており、深さの上限には余裕があるので、31個を超えたスナップショットも作成できています。
PS C:\> (Get-VM -Name "vm01" | Get-Snapshot).Count 32
なお、本番環境などでは vCenter インベントリ オブジェクトで日本語、記号、絵文字は使用せず、アルファベットと数字だけ使用したほうが不要な事故を避けられると思います。
以上、vExperts Advent Calendar 2022 の 1日目の投稿でした。
2日目は、Yuki Kawamitsu さんです。