“virsh snapshot-list”如何带有描述

问题描述 投票:0回答:5
virsh snapshot-create-as win7 snap01 --description“这里有东西”

如何列出带有描述的快照列表?

kvm libvirt virsh
5个回答
1
投票

我尝试了 Holger Jakobs 的解决方案,但它需要的软件包不在我的 Linux 系统上。

然后我尝试了 Faustino Aguilar 的解决方案,它几乎有效。但是,在快照名称中嵌入空格是合法的,并且他的脚本不处理这种情况。对于不包含描述的快照,我也遇到了严重的格式问题。

因此,我进行了重大修改,并相信我有一个工作脚本,但需要注意的是,如果不修改脚本,超过 20 个字符的域名或快照名称将无法按预期工作。

#!/bin/bash
# 
# Prints snapshots with descriptions for virsh.
#
# Caveats
# This script has undefined behavior if snapshot name > 20 characters.
# (If that is a problem, consider changing "formatPre" and "cut -c2-21" below.)

vmdomains=`virsh list --all | sed 1,2d | awk '{ print $2 }'`
formatPre="%-21s%-21s"
format="$formatPre %s\n"

printf "$format" "Domain" "Snapshot Name" "Description"
printf "$format" "--------------------" "---------------------" "--------------------------------------"

SAVE_IFS="$IFS"
IFS=$(echo -en "\n\b")
for vmdomain in $vmdomains; do
  snapshots=`virsh snapshot-list $vmdomain | sed 1,2d | cut -c2-21 | sed 's/ *$//'`
  for snapshot in $snapshots; do
    printf "$formatPre " "$vmdomain" "${snapshot}"
    description=`virsh snapshot-dumpxml --domain "$vmdomain" --snapshotname "${snapshot}" | grep "<description>" | sed 's/  <description>//' | sed 's/<\/description>//'`
    echo "$description"
  done
done

IFS="$SAVE_IFS"

样本输出。 (并非我所有的快照都有描述。)

Domain               Snapshot Name         Description
-------------------- --------------------- --------------------------------------
ps111                0-init
ps111                1-setup
ps111                2-named
ps111                3-python
ps111                4-tmp
skit20               00initial             initial
skit20               01setup               apt update/upgrade + vim + ssh
skit20-clone         00initial             initial
train20              01 Initial
train20              02 LinuxBase
watchdog20           00initial             initial

1
投票

我设法编写了一个简单的 bash 脚本来列出所有虚拟机和快照描述:

#!/bin/bash

vmdomains=`sudo virsh list --all | sed 1,2d | awk '{ print $2 }'`

echo -ne "Domain\t\t\tSnapshot Name\t\t\tDescription\n"
echo "-----------------------------------------------------------------------------------------"
for vmdomain in $vmdomains; do
  echo -ne "$vmdomain\t\t"
  snapshots=`sudo virsh snapshot-list $vmdomain | sed 1,2d | awk '{ print $1 }'`
  snapshotflag=0
  for snapshot in $snapshots; do
    snapshotflag=1
    echo -ne "$snapshot\t\t"
    sudo virsh snapshot-dumpxml --domain $vmdomain --snapshotname $snapshot | grep "<description>" | sed 's/  <description>//' | sed 's/<\/description>//'
  done
  if [ $snapshotflag -eq 0 ]; then
    echo
  fi
done

编辑:输出示例

~$ sh listsnap.sh 
Domain               Snapshot Name                  Description
-------------------------------------------------------------------------------------
Win10                Win10_Disabled_Updates         Used gpedit to disable updates
Win10                Win10_games_installed          Gaming Rig with passtrhough gpu
CentOS               CentOS_origin                  Installed Nginx and web dependencies
CentOS               CentOS_Wednesday               Installed Anaconda and Julia
CentOS               CentOS_weekend                 Updated PIP dependencies
Fedora
Ubuntu               Testing_nfs_Ubuntu             Configured nfs server

编辑:这是一个快速脚本,可能无法以最佳方式处理所有情况,请参阅此处发布的其他脚本以获取更详细的解决方法。另外 RHEL Web 控制台已经显示快照描述 耶!


0
投票

您可以从快照 xml 转储中获取描述:

virsh snapshot-dumpxml --domain {domain name} --snapshotname {snapshot name}

0
投票

您可以生成所有计算机的列表,其中包含有关其快照的信息,包括这个小脚本的描述。

  #!/bin/sh
  #\
  exec sudo tclsh "$0" "$@"
  
  # List KVM snapshots of all machines (domains) including their description
  # [email protected] 2020-08-21
  
  package require tdom
  
  ### Acquire list of machines (domains) from "virsh list --all"
  set machines ""
  foreach machineInfo [lrange [split [exec virsh list --all] \n] 2 end-1] {
    set name [string trim [string range $machineInfo 7 37]]
    set state [string trim [string range $machineInfo 38 end]]
    dict set machines $name state $state
  } ;# foreach
  
  
  ### Acquire list of snapshots for all machines (name, time and description)
  foreach m [dict keys $machines] {
    foreach snapshot [lrange [split [exec virsh snapshot-list --domain $m] \n] 2 end-1] {
      set name [string trim [string range $snapshot 1 21]]
      set xmlRoot [[dom parse [exec virsh snapshot-dumpxml --domain $m --snapshotname $name]] documentElement]
      set descr [[$xmlRoot selectNodes /domainsnapshot/description/text()] data]
      set creaTime [clock format [[$xmlRoot selectNodes /domainsnapshot/creationTime/text()] data] -format {%Y-%m-%d %H:%M}]
      dict set machines $m snapshots $name time $creaTime
      dict set machines $m snapshots $name descr $descr
    } ;# foreach snapshot
  } ;# foreach machine
  
  
  ### Output a list of all machines with their snapshots including time and description
  foreach m [dict keys $machines] {
    puts [format "\nMACHINE '%s' (%s)" $m [dict get $machines $m state]]
    catch {unset snapshots}
    dict with machines $m {
      if [info exists snapshots] {
        foreach sn [dict keys $snapshots] {
          puts "  SNAPSHOT '$sn', created: [dict get $snapshots $sn time]"
          foreach line [split [dict get $snapshots $sn descr] \n] {
            puts "    $line"
          }
        } ;# foreach snapshot
      } ;# if snapshot exists
    } ;# dict with
  } ;# foreach machine 
  
  puts ""

0
投票

这有助于快速查看

virsh snapshot-dumpxml --domain {domain name} --snapshotname {snapshot name} | grep 'description'
© www.soinside.com 2019 - 2024. All rights reserved.