スナップショットの一覧を取得するコマンド

仮想マシンの構成やOS上の変更を加えるとき、スナップショットで手を加える前の状態を保存しておけるのはとても便利です。
便利ですが、削除するのをうっかり忘れて放置されたりすると、差分ディスクが肥大化してあまりよろしくないらしいので、不要なスナップショットは残さず削除しておきたい。

でも、仮想マシンがたくさんあって、複数人で使っていたりする環境だと、どの仮想マシンにスナップショットが存在するのかは把握しきれないし、Web Client の管理画面では一つ一つ「スナップショットの管理」を開いて確認していくのも大変です…

というわけで、PowerCLI のget-snapshotという、そのまんまな名前のコマンドを使ってスナップショットの管理をちょっとだけ楽にしてみます。

環境

ESXi ホストとPowerCLIを実行するサーバーは同じセグメントのネットワーク上にいます。

  • vSphere 6.5
  • PowerCLI Ver.10.1.0
  • PowerCLIを実行するサーバー:Windows Server 2016
  • PowerShell Ver. 5.1

基本の使い方

Get-Snapshot - VMware {code}

例えば、"7svfum02" という名前の仮想マシンのスナップショットがあるか確認します。
確認したい仮想マシン名を引数に指定するだけ。かんたん。

Get-Snapshot 7svfum02  

スナップショットが存在すると、こんな感じで教えてくれます。
(ちなみにスナップショットが1つも無いとノーレスポンスでプロンプトが返ってきます。)

仮想マシン名もコマンドで取得

これだけだと、確認したい仮想マシン名をひとつひとつ指定しなくてはならないので、PowerShellでおなじみのパイプを使って Get-VMコマンドと組み合わせてみます。
Get-VM - VMware {code}
ついでに取得したスナップショットの情報として欲しい項目を指定して、リスト形式にしてみます。

Get-VM -name * | Get-Snapshot | select VM,Name,Description,Created,PowerState,SizeMB,SizeGB,IsCurrent,Id | Format-List  

ここに、もう1行、ESXiサーバー(またはvCenter Server)に接続するコマンドも先に入れておくと、接続したサーバー配下の仮想マシンのスナップショットの一覧を取得する2行スクリプトができます。
定期的に不要なスナップショットを削除する運用ルールを他の人と共有するときに使うと良さそうです。

connect-viserver -server <hostname or IPaddress> -user <username> -password <password>  


実行結果はこんな感じ
Name, Port, User が表示されている部分が、connect-viserverの実行結果で、
VM, Name, Description… とリストが表示されている部分が、Get-Snapshot の実行結果です。

スナップショットを作成するときに、作成した状況が思い出せる名前にしておくとか、ちゃんと説明を入れておくとか、そういう丁寧な暮らしをしておくと、後で要不要を判断するときに分かりやすくて良いのですが、急いでいたり、すぐ消すつもりだったりすると、ついつい適当になりがちですよね。。。

作成日時を見て、日が経っているものは問答無用に削除削除・・・・できれば良いのですが、他人の管理下のスナップショットを勝手に消せるかは、それぞれの利用環境に応じて平和的に解決していただければと(笑)

それはそうと

昔の C# Client は仮想マシンの一覧でスナップショットの存在を確認できたんですね。
Solved: Snapshot Overview in vSphere Web Client?


参考

スナップショットを使用した仮想マシンの管理 - VMware Docs
スナップショットファイル - VMware Docs
スナップショットの制限事項 - VMware Docs
Cmdlet Reference - VMware {code}