[libvirt] [PATCH 15/17] docs: convert virsh man page from pod to rst

Daniel P. Berrangé berrange at redhat.com
Fri Dec 6 14:50:40 UTC 2019


This was a semi-automated conversion. First it was run through pod2rst,
and then it was manually editted to use a rst structure that matches
expectations of rst2man.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 docs/Makefile.am        |    1 +
 docs/manpages/index.rst |    1 +
 docs/manpages/virsh.rst | 7096 +++++++++++++++++++++++++++++++++++++++
 tools/Makefile.am       |    5 +-
 tools/virsh.pod         | 5526 ------------------------------
 5 files changed, 7099 insertions(+), 5530 deletions(-)
 create mode 100644 docs/manpages/virsh.rst
 delete mode 100644 tools/virsh.pod

diff --git a/docs/Makefile.am b/docs/Makefile.am
index 1f42afedb6..fad506539b 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -204,6 +204,7 @@ manpages1_rst = \
   manpages/virt-pki-validate.rst \
   manpages/virt-xml-validate.rst \
   manpages/virt-admin.rst \
+  manpages/virsh.rst \
   $(NULL)
 manpages7_rst = \
   $(NULL)
diff --git a/docs/manpages/index.rst b/docs/manpages/index.rst
index d7e4bcf1d1..1041dbf8b4 100644
--- a/docs/manpages/index.rst
+++ b/docs/manpages/index.rst
@@ -18,3 +18,4 @@ Tools
 * `virt-sanlock-cleanup(8) <virt-sanlock-cleanup.html>`__ - remove stale sanlock resource lease files
 * `virt-login-shell(1) <virt-login-shell.html>`__ - tool to execute a shell within a container
 * `virt-admin(1) <virt-admin.html>`__ - daemon administration interface
+* `virsh(1) <virsh.html>`__ - management user interface
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
new file mode 100644
index 0000000000..d639509fec
--- /dev/null
+++ b/docs/manpages/virsh.rst
@@ -0,0 +1,7096 @@
+=====
+virsh
+=====
+
+-------------------------
+management user interface
+-------------------------
+
+:Manual section: 1
+:Manual group: Virtualization Support
+
+.. contents:: :depth: 2
+
+SYNOPSIS
+========
+
+
+``virsh`` [*OPTION*]... [*COMMAND_STRING*]
+
+``virsh`` [*OPTION*]... *COMMAND* [*ARG*]...
+
+
+DESCRIPTION
+===========
+
+The ``virsh`` program is the main interface for managing virsh guest
+domains. The program can be used to create, pause, and shutdown
+domains. It can also be used to list current domains. Libvirt is a C
+toolkit to interact with the virtualization capabilities of recent
+versions of Linux (and other OSes). It is free software available
+under the GNU Lesser General Public License. Virtualization of the
+Linux Operating System means the ability to run multiple instances of
+Operating Systems concurrently on a single hardware system where the
+basic resources are driven by a Linux instance. The library aims at
+providing a long term stable C API.  It currently supports Xen, QEMU,
+KVM, LXC, OpenVZ, VirtualBox and VMware ESX.
+
+The basic structure of most virsh usage is:
+
+
+.. code-block:: shell
+
+   virsh [OPTION]... <command> <domain> [ARG]...
+
+
+Where *command* is one of the commands listed below; *domain* is the
+numeric domain id, or the domain name, or the domain UUID; and *ARGS*
+are command specific options.  There are a few exceptions to this rule
+in the cases where the command in question acts on all domains, the
+entire machine, or directly on the xen hypervisor.  Those exceptions
+will be clear for each of those commands.  Note: it is permissible to
+give numeric names to domains, however, doing so will result in a
+domain that can only be identified by domain id. In other words, if a
+numeric value is supplied it will be interpreted as a domain id, not
+as a name. Any *command* starting with ``#`` is treated as a comment
+and silently ignored, all other unrecognized *commands* are diagnosed.
+
+The ``virsh`` program can be used either to run one *COMMAND* by giving the
+command and its arguments on the shell command line, or a *COMMAND_STRING*
+which is a single shell argument consisting of multiple *COMMAND* actions
+and their arguments joined with whitespace and separated by semicolons or
+newlines between commands, where unquoted backslash-newline pairs are
+elided.  Within *COMMAND_STRING*, virsh understands the
+same single, double, and backslash escapes as the shell, although you must
+add another layer of shell escaping in creating the single shell argument,
+and any word starting with unquoted *#* begins a comment that ends at newline.
+If no command is given in the command line, ``virsh`` will then start a minimal
+interpreter waiting for your commands, and the ``quit`` command will then exit
+the program.
+
+The ``virsh`` program understands the following *OPTIONS*.
+
+
+``-c``, ``--connect`` *URI*
+
+Connect to the specified *URI*, as if by the ``connect`` command,
+instead of the default connection.
+
+``-d``, ``--debug`` *LEVEL*
+
+Enable debug messages at integer *LEVEL* and above.  *LEVEL* can
+range from 0 to 4 (default).  See the documentation of ``VIRSH_DEBUG``
+environment variable below for the description of each *LEVEL*.
+
+
+
+- ``-e``, ``--escape`` *string*
+
+Set alternative escape sequence for *console* command. By default,
+telnet's ``^]`` is used. Allowed characters when using hat notation are:
+alphabetic character, @, [, ], \, ^, _.
+
+
+
+- ``-h``, ``--help``
+
+Ignore all other arguments, and behave as if the ``help`` command were
+given instead.
+
+
+
+- ``-k``, ``--keepalive-interval`` *INTERVAL*
+
+Set an *INTERVAL* (in seconds) for sending keepalive messages to
+check whether connection to the server is still alive.  Setting the
+interval to 0 disables client keepalive mechanism.
+
+
+
+- ``-K``, ``--keepalive-count`` *COUNT*
+
+Set a number of times keepalive message can be sent without getting an
+answer from the server without marking the connection dead.  There is
+no effect to this setting in case the *INTERVAL* is set to 0.
+
+
+
+- ``-l``, ``--log`` *FILE*
+
+Output logging details to *FILE*.
+
+
+
+- ``-q``, ``--quiet``
+
+Avoid extra informational messages.
+
+
+
+- ``-r``, ``--readonly``
+
+Make the initial connection read-only, as if by the *--readonly*
+option of the ``connect`` command.
+
+
+
+- ``-t``, ``--timing``
+
+Output elapsed time information for each command.
+
+
+
+- ``-v``, ``--version[=short]``
+
+Ignore all other arguments, and prints the version of the libvirt library
+virsh is coming from
+
+
+
+- ``-V``, ``--version=long``
+
+Ignore all other arguments, and prints the version of the libvirt library
+virsh is coming from and which options and driver are compiled in.
+
+
+
+
+NOTES
+=====
+
+
+Most ``virsh`` operations rely upon the libvirt library being able to
+connect to an already running libvirtd service.  This can usually be
+done using the command ``service libvirtd start``.
+
+Most ``virsh`` commands require root privileges to run due to the
+communications channels used to talk to the hypervisor.  Running as
+non root will return an error.
+
+Most ``virsh`` commands act synchronously, except maybe shutdown,
+setvcpus and setmem. In those cases the fact that the ``virsh``
+program returned, may not mean the action is complete and you
+must poll periodically to detect that the guest completed the
+operation.
+
+``virsh`` strives for backward compatibility.  Although the ``help``
+command only lists the preferred usage of a command, if an older
+version of ``virsh`` supported an alternate spelling of a command or
+option (such as *--tunnelled* instead of *--tunneled*), then
+scripts using that older spelling will continue to work.
+
+Several ``virsh`` commands take an optionally scaled integer; if no
+scale is provided, then the default is listed in the command (for
+historical reasons, some commands default to bytes, while other
+commands default to kibibytes).  The following case-insensitive
+suffixes can be used to select a specific scale:
+
+.. code-block::
+
+   b, byte  byte      1
+   KB       kilobyte  1,000
+   k, KiB   kibibyte  1,024
+   MB       megabyte  1,000,000
+   M, MiB   mebibyte  1,048,576
+   GB       gigabyte  1,000,000,000
+   G, GiB   gibibyte  1,073,741,824
+   TB       terabyte  1,000,000,000,000
+   T, TiB   tebibyte  1,099,511,627,776
+   PB       petabyte  1,000,000,000,000,000
+   P, PiB   pebibyte  1,125,899,906,842,624
+   EB       exabyte   1,000,000,000,000,000,000
+   E, EiB   exbibyte  1,152,921,504,606,846,976
+
+
+GENERIC COMMANDS
+================
+
+
+The following commands are generic i.e. not specific to a domain.
+
+
+help
+----
+
+.. code-block:: shell
+
+   help [command-or-group]
+
+
+This lists each of the virsh commands.  When used without options, all
+commands are listed, one per line, grouped into related categories,
+displaying the keyword for each group.
+
+To display only commands for a specific group, give the keyword for that
+group as an option.  For example:
+
+Example 1
+~~~~~~~~~
+
+.. code-block:: shell
+
+   virsh # help host
+
+   Host and Hypervisor (help keyword 'host'):
+       capabilities                   capabilities
+       cpu-models                     show the CPU models for an architecture
+       connect                        (re)connect to hypervisor
+       freecell                       NUMA free memory
+       hostname                       print the hypervisor hostname
+       qemu-attach                    Attach to existing QEMU process
+       qemu-monitor-command           QEMU Monitor Command
+       qemu-agent-command             QEMU Guest Agent Command
+       sysinfo                        print the hypervisor sysinfo
+       uri                            print the hypervisor canonical URI
+
+
+To display detailed information for a specific command, give its name as the
+option instead.  For example:
+
+Example 2
+~~~~~~~~~
+
+.. code-block:: shell
+
+   virsh # help list
+     NAME
+       list - list domains
+
+     SYNOPSIS
+       list [--inactive] [--all]
+
+     DESCRIPTION
+       Returns list of domains.
+
+     OPTIONS
+       --inactive       list inactive domains
+       --all            list inactive & active domains
+
+
+quit, exit
+----------
+
+.. code-block:: shell
+
+   quit
+   exit
+
+
+quit this interactive terminal
+
+
+
+version
+-------
+
+.. code-block:: shell
+
+   version [--daemon]
+
+
+Will print out the major version info about what this built from.
+If *--daemon* is specified then the version of the libvirt daemon
+is included in the output.
+
+
+Example
+~~~~~~~
+
+.. code-block:: shell
+
+   $ virsh version
+   Compiled against library: libvirt 1.2.3
+   Using library: libvirt 1.2.3
+   Using API: QEMU 1.2.3
+   Running hypervisor: QEMU 2.0.50
+
+   $ virsh version --daemon
+   Compiled against library: libvirt 1.2.3
+   Using library: libvirt 1.2.3
+   Using API: QEMU 1.2.3
+   Running hypervisor: QEMU 2.0.50
+   Running against daemon: 1.2.6
+
+
+cd
+--
+
+.. code-block:: shell
+
+   cd [directory]
+
+
+Will change current directory to *directory*.  The default directory
+for the ``cd`` command is the home directory or, if there is no *HOME*
+variable in the environment, the root directory.
+
+This command is only available in interactive mode.
+
+
+pwd
+---
+
+.. code-block:: shell
+
+   pwd
+
+
+Will print the current directory.
+
+
+connect
+-------
+
+.. code-block:: shell
+
+   connect [URI] [--readonly]
+
+
+(Re)-Connect to the hypervisor. When the shell is first started, this
+is automatically run with the *URI* parameter requested by the ``-c``
+option on the command line. The *URI* parameter specifies how to
+connect to the hypervisor. The URI docs
+`https://libvirt.org/uri.html <https://libvirt.org/uri.html>`_ list the
+values supported, but the most common are:
+
+
+- xen:///system
+
+  this is used to connect to the local Xen hypervisor
+
+- qemu:///system
+
+  connect locally as root to the daemon supervising QEMU and KVM domains
+
+- qemu:///session
+
+  connect locally as a normal user to his own set of QEMU and KVM domains
+
+- lxc:///system
+
+  connect to a local linux container
+
+To find the currently used URI, check the *uri* command documented below.
+
+For remote access see the URI docs
+`https://libvirt.org/uri.html <https://libvirt.org/uri.html>`_ on how
+to make URIs. The *--readonly* option allows for read-only connection
+
+
+uri
+---
+
+.. code-block:: shell
+
+   uri
+
+Prints the hypervisor canonical URI, can be useful in shell mode.
+
+
+hostname
+--------
+
+.. code-block:: shell
+
+   hostname
+
+Print the hypervisor hostname.
+
+
+sysinfo
+-------
+
+.. code-block:: shell
+
+   sysinfo
+
+Print the XML representation of the hypervisor sysinfo, if available.
+
+
+nodeinfo
+--------
+
+.. code-block:: shell
+
+   nodeinfo
+
+Returns basic information about the node, like number and type of CPU,
+and size of the physical memory. The output corresponds to virNodeInfo
+structure. Specifically, the "CPU socket(s)" field means number of CPU
+sockets per NUMA cell. The information libvirt displays is dependent
+upon what each architecture may provide.
+
+
+nodecpumap
+----------
+
+.. code-block:: shell
+
+   nodecpumap [--pretty]
+
+
+Displays the node's total number of CPUs, the number of online CPUs
+and the list of online CPUs.
+
+With *--pretty* the online CPUs are printed as a range instead of a list.
+
+
+nodecpustats
+------------
+
+.. code-block:: shell
+
+   nodecpustats [cpu] [--percent]
+
+Returns cpu stats of the node.
+If *cpu* is specified, this will print the specified cpu statistics only.
+If *--percent* is specified, this will print the percentage of each kind
+of cpu statistics during 1 second.
+
+
+nodememstats
+------------
+
+.. code-block:: shell
+
+   nodememstats [cell]
+
+Returns memory stats of the node.
+If *cell* is specified, this will print the specified cell statistics only.
+
+
+nodesuspend
+-----------
+
+.. code-block:: shell
+
+   nodesuspend [target] [duration]
+
+Puts the node (host machine) into a system-wide sleep state and schedule
+the node's Real-Time-Clock interrupt to resume the node after the time
+duration specified by *duration* is out.
+*target* specifies the state to which the host will be suspended to, it
+can be "mem" (suspend to RAM), "disk" (suspend to disk), or "hybrid"
+(suspend to both RAM and disk).  *duration* specifies the time duration
+in seconds for which the host has to be suspended, it should be at least
+60 seconds.
+
+
+node
+----
+
+.. code-block:: shell
+
+   node-memory-tune [shm-pages-to-scan] [shm-sleep-millisecs] [shm-merge-across-nodes]
+
+Allows you to display or set the node memory parameters.
+*shm-pages-to-scan* can be used to set the number of pages to scan
+before the shared memory service goes to sleep; *shm-sleep-millisecs*
+can be used to set the number of millisecs the shared memory service should
+sleep before next scan; *shm-merge-across-nodes* specifies if pages from
+different numa nodes can be merged. When set to 0, only pages which physically
+reside in the memory area of same NUMA node can be merged. When set to 1,
+pages from all nodes can be merged. Default to 1.
+
+``Note``: Currently the "shared memory service" only means KSM (Kernel Samepage
+Merging).
+
+
+capabilities
+------------
+
+.. code-block:: shell
+
+   capabilities
+
+Print an XML document describing the capabilities of the hypervisor
+we are currently connected to. This includes a section on the host
+capabilities in terms of CPU and features, and a set of description
+for each kind of guest which can be virtualized. For a more complete
+description see:
+
+`https://libvirt.org/formatcaps.html <https://libvirt.org/formatcaps.html>`_
+
+The XML also show the NUMA topology information if available.
+
+
+domcapabilities
+---------------
+
+.. code-block:: shell
+
+   domcapabilities [virttype] [emulatorbin] [arch] [machine]
+
+
+Print an XML document describing the domain capabilities for the
+hypervisor we are connected to using information either sourced from an
+existing domain or taken from the ``virsh capabilities`` output. This may
+be useful if you intend to create a new domain and are curious if for
+instance it could make use of VFIO by creating a domain for the
+hypervisor with a specific emulator and architecture.
+
+Each hypervisor will have different requirements regarding which options
+are required and which are optional. A hypervisor can support providing
+a default value for any of the options.
+
+The *virttype* option specifies the virtualization type used. The value
+to be used is either from the 'type' attribute of the <domain/> top
+level element from the domain XML or the 'type' attribute found within
+each <guest/> element from the ``virsh capabilities`` output.  The
+*emulatorbin* option specifies the path to the emulator. The value to
+be used is either the <emulator> element in the domain XML or the
+``virsh capabilities`` output. The *arch* option specifies the
+architecture to be used for the domain. The value to be used is either
+the "arch" attribute from the domain's XML <os/> element and <type/>
+subelement or the "name" attribute of an <arch/> element from the
+``virsh capabililites`` output. The *machine* specifies the machine type
+for the emulator. The value to be used is either the "machine" attribute
+from the domain's XML <os/> element and <type/> subelement or one from a
+list of machines from the ``virsh capabilities`` output for a specific
+architecture and domain type.
+
+For the qemu hypervisor, a *virttype* of either 'qemu' or 'kvm' must be
+supplied along with either the *emulatorbin* or *arch* in order to
+generate output for the default *machine*.  Supplying a *machine*
+value will generate output for the specific machine.
+
+
+pool-capabilities
+-----------------
+
+.. code-block:: shell
+
+   pool-capabilities
+
+Print an XML document describing the storage pool capabilities for the
+connected storage driver. This may be useful if you intend to create a
+new storage pool and need to know the available pool types and supported
+storage pool source and target volume formats as well as the required
+source elements to create the pool.
+
+
+
+inject
+------
+
+.. code-block:: shell
+
+   inject-nmi domain
+
+Inject NMI to the guest.
+
+
+list
+----
+
+.. code-block:: shell
+
+   list [--inactive | --all]
+        [--managed-save] [--title]
+        { [--table] | --name | --uuid }
+        [--persistent] [--transient]
+        [--with-managed-save] [--without-managed-save]
+        [--autostart] [--no-autostart]
+        [--with-snapshot] [--without-snapshot]
+        [--with-checkpoint] [--without-checkpoint]
+        [--state-running] [--state-paused]
+        [--state-shutoff] [--state-other]
+
+Prints information about existing domains.  If no options are
+specified it prints out information about running domains.
+
+Example 1
+~~~~~~~~~
+
+An example format for the list is as follows:
+
+.. code-block:: shell
+
+   ``virsh`` list
+     Id    Name                           State
+   ----------------------------------------------------
+     0     Domain-0                       running
+     2     fedora                         paused
+
+Name is the name of the domain.  ID the domain numeric id.
+State is the run state (see below).
+
+STATES
+~~~~~~
+
+The State field lists what state each domain is currently in. A domain
+can be in one of the following possible states:
+
+
+- ``running``
+
+  The domain is currently running on a CPU
+
+- ``idle``
+
+  The domain is idle, and not running or runnable.  This can be caused
+  because the domain is waiting on IO (a traditional wait state) or has
+  gone to sleep because there was nothing else for it to do.
+
+- ``paused``
+
+  The domain has been paused, usually occurring through the administrator
+  running ``virsh suspend``.  When in a paused state the domain will still
+  consume allocated resources like memory, but will not be eligible for
+  scheduling by the hypervisor.
+
+- ``in shutdown``
+
+  The domain is in the process of shutting down, i.e. the guest operating system
+  has been notified and should be in the process of stopping its operations
+  gracefully.
+
+- ``shut off``
+
+  The domain is not running.  Usually this indicates the domain has been
+  shut down completely, or has not been started.
+
+- ``crashed``
+
+  The domain has crashed, which is always a violent ending.  Usually
+  this state can only occur if the domain has been configured not to
+  restart on crash.
+
+- ``pmsuspended``
+
+  The domain has been suspended by guest power management, e.g. entered
+  into s3 state.
+
+
+
+Normally only active domains are listed. To list inactive domains specify
+*--inactive* or *--all* to list both active and inactive domains.
+
+Filtering
+~~~~~~~~~
+
+To further filter the list of domains you may specify one or more of filtering
+flags supported by the ``list`` command. These flags are grouped by function.
+Specifying one or more flags from a group enables the filter group. Note that
+some combinations of flags may yield no results. Supported filtering flags and
+groups:
+
+
+Persistence
+...........
+
+Flag *--persistent* is used to include persistent domains in the returned
+list. To include transient domains specify *--transient*.
+
+Existence of managed save image
+...............................
+
+To list domains having a managed save image specify flag
+*--with-managed-save*. For domains that don't have a managed save image
+specify *--without-managed-save*.
+
+Domain state
+............
+
+The following filter flags select a domain by its state:
+*--state-running* for running domains, *--state-paused*  for paused domains,
+*--state-shutoff* for turned off domains and *--state-other* for all
+other states as a fallback.
+
+Autostarting domains
+....................
+
+To list autostarting domains use the flag *--autostart*. To list domains with
+this feature disabled use *--no-autostart*.
+
+Snapshot existence
+..................
+
+Domains that have snapshot images can be listed using flag *--with-snapshot*,
+domains without a snapshot *--without-snapshot*.
+
+Checkpoint existence
+....................
+
+Domains that have checkpoints can be listed using flag *--with-checkpoint*,
+domains without a checkpoint *--without-checkpoint*.
+
+
+When talking to older servers, this command is forced to use a series of API
+calls with an inherent race, where a domain might not be listed or might appear
+more than once if it changed state between calls while the list was being
+collected.  Newer servers do not have this problem.
+
+If *--managed-save* is specified, then domains that have managed save state
+(only possible if they are in the ``shut off`` state, so you need to specify
+*--inactive* or *--all* to actually list them) will instead show as ``saved``
+in the listing. This flag is usable only with the default *--table* output.
+Note that this flag does not filter the list of domains.
+
+If *--name* is specified, domain names are printed instead of the table
+formatted one per line. If *--uuid* is specified domain's UUID's are printed
+instead of names. Flag *--table* specifies that the legacy table-formatted
+output should be used. This is the default.
+
+If both *--name* and *--uuid* are specified, domain UUID's and names
+are printed side by side without any header. Flag *--table* specifies
+that the legacy table-formatted output should be used. This is the
+default if neither *--name* nor *--uuid* are specified. Option
+*--table* is mutually exclusive with options *--uuid* and *--name*.
+
+If *--title* is specified, then the short domain description (title) is
+printed in an extra column. This flag is usable only with the default
+*--table* output.
+
+Example 2
+~~~~~~~~~
+
+.. code-block:: shell
+
+   $ virsh list --title
+     Id    Name        State      Title
+    -------------------------------------------
+     0     Domain-0    running    Mailserver 1
+     2     fedora      paused
+
+
+
+freecell
+--------
+
+.. code-block:: shell
+
+   freecell [{ [--cellno] cellno | --all }]
+
+Prints the available amount of memory on the machine or within a NUMA
+cell.  The freecell command can provide one of three different
+displays of available memory on the machine depending on the options
+specified.  With no options, it displays the total free memory on the
+machine.  With the --all option, it displays the free memory in each
+cell and the total free memory on the machine.  Finally, with a
+numeric argument or with --cellno plus a cell number it will display
+the free memory for the specified cell only.
+
+
+freepages
+---------
+
+.. code-block:: shell
+
+   freepages [{ [--cellno] cellno [--pagesize] pagesize |     --all }]
+
+Prints the available amount of pages within a NUMA cell. *cellno* refers
+to the NUMA cell you're interested in. *pagesize* is a scaled integer (see
+``NOTES`` above).  Alternatively, if *--all* is used, info on each possible
+combination of NUMA cell and page size is printed out.
+
+
+allocpages
+----------
+
+.. code-block:: shell
+
+   allocpages [--pagesize] pagesize [--pagecount] pagecount [[--cellno] cellno] [--add] [--all]
+
+Change the size of pages pool of *pagesize* on the host. If
+*--add* is specified, then *pagecount* pages are added into the
+pool. However, if *--add* wasn't specified, then the
+*pagecount* is taken as the new absolute size of the pool (this
+may be used to free some pages and size the pool down). The
+*cellno* modifier can be used to narrow the modification down to
+a single host NUMA cell. On the other end of spectrum lies
+*--all* which executes the modification on all NUMA cells.
+
+
+cpu-baseline
+------------
+
+.. code-block:: shell
+
+   cpu-baseline FILE [--features] [--migratable]
+
+Compute baseline CPU which will be supported by all host CPUs given in <file>.
+(See ``hypervisor-cpu-baseline`` command to get a CPU which can be provided by a
+specific hypervisor.) The list of host CPUs is built by extracting all <cpu>
+elements from the <file>. Thus, the <file> can contain either a set of <cpu>
+elements separated by new lines or even a set of complete <capabilities>
+elements printed by ``capabilities`` command.  If *--features* is specified,
+then the resulting XML description will explicitly include all features that
+make up the CPU, without this option features that are part of the CPU model
+will not be listed in the XML description.   If *--migratable* is specified,
+features that block migration will not be included in the resulting CPU.
+
+
+cpu-compare
+-----------
+
+.. code-block:: shell
+
+   cpu-compare FILE [--error]
+
+Compare CPU definition from XML <file> with host CPU. (See
+``hypervisor-cpu-compare`` command for comparing the CPU definition with the CPU
+which a specific hypervisor is able to provide on the host.) The XML <file> may
+contain either host or guest CPU definition. The host CPU definition is the
+<cpu> element and its contents as printed by ``capabilities`` command. The
+guest CPU definition is the <cpu> element and its contents from domain XML
+definition or the CPU definition created from the host CPU model found in
+domain capabilities XML (printed by ``domcapabilities`` command). In
+addition to the <cpu> element itself, this command accepts
+full domain XML, capabilities XML, or domain capabilities XML containing
+the CPU definition. For more information on guest CPU definition see:
+`https://libvirt.org/formatdomain.html#elementsCPU <https://libvirt.org/formatdomain.html#elementsCPU>`_. If *--error* is
+specified, the command will return an error when the given CPU is
+incompatible with host CPU and a message providing more details about the
+incompatibility will be printed out.
+
+
+cpu-models
+----------
+
+.. code-block:: shell
+
+   cpu-models arch
+
+Print the list of CPU models known by libvirt for the specified architecture.
+Whether a specific hypervisor is able to create a domain which uses any of
+the printed CPU models is a separate question which can be answered by
+looking at the domain capabilities XML returned by ``domcapabilities`` command.
+Moreover, for some architectures libvirt does not know any CPU models and
+the usable CPU models are only limited by the hypervisor. This command will
+print that all CPU models are accepted for these architectures and the actual
+list of supported CPU models can be checked in the domain capabilities XML.
+
+
+echo
+----
+
+.. code-block:: shell
+
+   echo [--shell] [--xml] [err...] [arg...]
+
+Echo back each *arg*, separated by space.  If *--shell* is
+specified, then the output will be single-quoted where needed, so that
+it is suitable for reuse in a shell context.  If *--xml* is
+specified, then the output will be escaped for use in XML.
+If *--err* is specified, prefix ``"error: "`` and output to stderr
+instead of stdout.
+
+
+hypervisor-cpu-compare
+----------------------
+
+.. code-block:: shell
+
+   hypervisor-cpu-compare FILE [virttype] [emulator] [arch] [machine] [--error]
+
+Compare CPU definition from XML <file> with the CPU the hypervisor is able to
+provide on the host. (This is different from ``cpu-compare`` which compares the
+CPU definition with the host CPU without considering any specific hypervisor
+and its abilities.)
+
+The XML *FILE* may contain either a host or guest CPU definition. The host CPU
+definition is the <cpu> element and its contents as printed by the
+``capabilities`` command. The guest CPU definition is the <cpu> element and its
+contents from the domain XML definition or the CPU definition created from the
+host CPU model found in the domain capabilities XML (printed by the
+``domcapabilities`` command). In addition to the <cpu> element itself, this
+command accepts full domain XML, capabilities XML, or domain capabilities XML
+containing the CPU definition. For more information on guest CPU definition
+see: `https://libvirt.org/formatdomain.html#elementsCPU <https://libvirt.org/formatdomain.html#elementsCPU>`_.
+
+The *virttype* option specifies the virtualization type (usable in the 'type'
+attribute of the <domain> top level element from the domain XML). *emulator*
+specifies the path to the emulator, *arch* specifies the CPU architecture, and
+*machine* specifies the machine type. If *--error* is specified, the command
+will return an error when the given CPU is incompatible with the host CPU and a
+message providing more details about the incompatibility will be printed out.
+
+
+hypervisor-cpu-baseline
+-----------------------
+
+.. code-block:: shell
+
+   hypervisor-cpu-baseline FILE [virttype] [emulator] [arch] [machine] [--features] [--migratable]
+
+Compute a baseline CPU which will be compatible with all CPUs defined in an XML
+*file* and with the CPU the hypervisor is able to provide on the host. (This
+is different from ``cpu-baseline`` which does not consider any hypervisor
+abilities when computing the baseline CPU.)
+
+The XML *FILE* may contain either host or guest CPU definitions describing the
+host CPU model. The host CPU definition is the <cpu> element and its contents
+as printed by ``capabilities`` command. The guest CPU definition may be created
+from the host CPU model found in domain capabilities XML (printed by
+``domcapabilities`` command). In addition to the <cpu> elements, this command
+accepts full capabilities XMLs, or domain capabilities XMLs containing the CPU
+definitions. For best results, use only the CPU definitions from domain
+capabilities.
+
+When *FILE* contains only a single CPU definition, the command will print the
+same CPU with restrictions imposed by the capabilities of the hypervisor.
+Specifically, running th ``virsh hypervisor-cpu-baseline`` command with no
+additional options on the result of ``virsh domcapabilities`` will transform the
+host CPU model from domain capabilities XML to a form directly usable in domain
+XML.
+
+The *virttype* option specifies the virtualization type (usable in the 'type'
+attribute of the <domain> top level element from the domain XML). *emulator*
+specifies the path to the emulator, *arch* specifies the CPU architecture, and
+*machine* specifies the machine type. If *--features* is specified, then the
+resulting XML description will explicitly include all features that make up the
+CPU, without this option features that are part of the CPU model will not be
+listed in the XML description. If *--migratable* is specified, features that
+block migration will not be included in the resulting CPU.
+
+
+DOMAIN COMMANDS
+===============
+
+The following commands manipulate domains directly, as stated
+previously most commands take domain as the first parameter. The
+*domain* can be specified as a short integer, a name or a full UUID.
+
+autostart
+---------
+
+.. code-block:: shell
+
+   autostart [--disable] domain
+
+
+Configure a domain to be automatically started at boot.
+
+The option *--disable* disables autostarting.
+
+
+blkdeviotune
+------------
+
+.. code-block:: shell
+
+   blkdeviotune domain device [[--config] [--live] | [--current]]
+      [[total-bytes-sec] | [read-bytes-sec] [write-bytes-sec]]
+      [[total-iops-sec] | [read-iops-sec] [write-iops-sec]]
+      [[total-bytes-sec-max] | [read-bytes-sec-max] [write-bytes-sec-max]]
+      [[total-iops-sec-max] | [read-iops-sec-max] [write-iops-sec-max]]
+      [[total-bytes-sec-max-length] |
+       [read-bytes-sec-max-length] [write-bytes-sec-max-length]]
+      [[total-iops-sec-max-length] |
+       [read-iops-sec-max-length] [write-iops-sec-max-length]]
+      [size-iops-sec] [group-name]
+
+Set or query the block disk io parameters for a block device of *domain*.
+*device* specifies a unique target name (<target dev='name'/>) or source
+file (<source file='name'/>) for one of the disk devices attached to
+*domain* (see also ``domblklist`` for listing these names).
+
+If no limit is specified, it will query current I/O limits setting.
+Otherwise, alter the limits with these flags:
+*--total-bytes-sec* specifies total throughput limit as a scaled integer, the
+default being bytes per second if no suffix is specified.
+*--read-bytes-sec* specifies read throughput limit as a scaled integer, the
+default being bytes per second if no suffix is specified.
+*--write-bytes-sec* specifies write throughput limit as a scaled integer, the
+default being bytes per second if no suffix is specified.
+*--total-iops-sec* specifies total I/O operations limit per second.
+*--read-iops-sec* specifies read I/O operations limit per second.
+*--write-iops-sec* specifies write I/O operations limit per second.
+*--total-bytes-sec-max* specifies maximum total throughput limit as a scaled
+integer, the default being bytes per second if no suffix is specified
+*--read-bytes-sec-max* specifies maximum read throughput limit as a scaled
+integer, the default being bytes per second if no suffix is specified.
+*--write-bytes-sec-max* specifies maximum write throughput limit as a scaled
+integer, the default being bytes per second if no suffix is specified.
+*--total-iops-sec-max* specifies maximum total I/O operations limit per second.
+*--read-iops-sec-max* specifies maximum read I/O operations limit per second.
+*--write-iops-sec-max* specifies maximum write I/O operations limit per second.
+*--total-bytes-sec-max-length* specifies duration in seconds to allow maximum
+total throughput limit.
+*--read-bytes-sec-max-length* specifies duration in seconds to allow maximum
+read throughput limit.
+*--write-bytes-sec-max-length* specifies duration in seconds to allow maximum
+write throughput limit.
+*--total-iops-sec-max-length* specifies duration in seconds to allow maximum
+total I/O operations limit.
+*--read-iops-sec-max-length* specifies duration in seconds to allow maximum
+read I/O operations limit.
+*--write-iops-sec-max-length* specifies duration in seconds to allow maximum
+write I/O operations limit.
+*--size-iops-sec* specifies size I/O operations limit per second.
+*--group-name* specifies group name to share I/O quota between multiple drives.
+For a qemu domain, if no name is provided, then the default is to have a single
+group for each *device*.
+
+Older versions of virsh only accepted these options with underscore
+instead of dash, as in *--total_bytes_sec*.
+
+Bytes and iops values are independent, but setting only one value (such
+as --read-bytes-sec) resets the other two in that category to unlimited.
+An explicit 0 also clears any limit.  A non-zero value for a given total
+cannot be mixed with non-zero values for read or write.
+
+It is up to the hypervisor to determine how to handle the length values.
+For the qemu hypervisor, if an I/O limit value or maximum value is set,
+then the default value of 1 second will be displayed. Supplying a 0 will
+reset the value back to the default.
+
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+When setting the disk io parameters both *--live* and *--config* flags may be
+given, but *--current* is exclusive. For querying only one of *--live*,
+*--config* or *--current* can be specified. If no flag is specified, behavior
+is different depending on hypervisor.
+
+
+blkiotune
+---------
+
+.. code-block:: shell
+
+   blkiotune domain [--weight weight] [--device-weights device-weights]
+      [--device-read-iops-sec device-read-iops-sec]
+      [--device-write-iops-sec device-write-iops-sec]
+      [--device-read-bytes-sec device-read-bytes-sec]
+      [--device-write-bytes-sec device-write-bytes-sec]
+      [[--config] [--live] | [--current]]
+
+Display or set the blkio parameters. QEMU/KVM supports *--weight*.
+*--weight* is in range [100, 1000]. After kernel 2.6.39, the value
+could be in the range [10, 1000].
+
+``device-weights`` is a single string listing one or more device/weight
+pairs, in the format of /path/to/device,weight,/path/to/device,weight.
+Each weight is in the range [100, 1000], [10, 1000] after kernel 2.6.39,
+or the value 0 to remove that device from per-device listings.
+Only the devices listed in the string are modified;
+any existing per-device weights for other devices remain unchanged.
+
+``device-read-iops-sec`` is a single string listing one or more device/read_iops_sec
+pairs, int the format of /path/to/device,read_iops_sec,/path/to/device,read_iops_sec.
+Each read_iops_sec is a number which type is unsigned int, value 0 to remove that
+device from per-device listing.
+Only the devices listed in the string are modified;
+any existing per-device read_iops_sec for other devices remain unchanged.
+
+``device-write-iops-sec`` is a single string listing one or more device/write_iops_sec
+pairs, int the format of /path/to/device,write_iops_sec,/path/to/device,write_iops_sec.
+Each write_iops_sec is a number which type is unsigned int, value 0 to remove that
+device from per-device listing.
+Only the devices listed in the string are modified;
+any existing per-device write_iops_sec for other devices remain unchanged.
+
+``device-read-bytes-sec`` is a single string listing one or more device/read_bytes_sec
+pairs, int the format of /path/to/device,read_bytes_sec,/path/to/device,read_bytes_sec.
+Each read_bytes_sec is a number which type is unsigned long long, value 0 to remove
+that device from per-device listing.
+Only the devices listed in the string are modified;
+any existing per-device read_bytes_sec for other devices remain unchanged.
+
+``device-write-bytes-sec`` is a single string listing one or more device/write_bytes_sec
+pairs, int the format of /path/to/device,write_bytes_sec,/path/to/device,write_bytes_sec.
+Each write_bytes_sec is a number which type is unsigned long long, value 0 to remove
+that device from per-device listing.
+Only the devices listed in the string are modified;
+any existing per-device write_bytes_sec for other devices remain unchanged.
+
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+
+
+blockcommit
+-----------
+
+.. code-block:: shell
+
+   blockcommit domain path [bandwidth] [--bytes] [base]
+      [--shallow] [top] [--delete] [--keep-relative]
+      [--wait [--async] [--verbose]] [--timeout seconds]
+      [--active] [{--pivot | --keep-overlay}]
+
+Reduce the length of a backing image chain, by committing changes at the
+top of the chain (snapshot or delta files) into backing images.  By
+default, this command attempts to flatten the entire chain.  If *base*
+and/or *top* are specified as files within the backing chain, then the
+operation is constrained to committing just that portion of the chain;
+*--shallow* can be used instead of *base* to specify the immediate
+backing file of the resulting top image to be committed.  The files
+being committed are rendered invalid, possibly as soon as the operation
+starts; using the *--delete* flag will attempt to remove these invalidated
+files at the successful completion of the commit operation. When the
+*--keep-relative* flag is used, the backing file paths will be kept relative.
+
+When *top* is omitted or specified as the active image, it is also
+possible to specify *--active* to trigger a two-phase active commit. In
+the first phase, *top* is copied into *base* and the job can only be
+canceled, with top still containing data not yet in base. In the second
+phase, *top* and *base* remain identical until a call to ``blockjob``
+with the *--abort* flag (keeping top as the active image that tracks
+changes from that point in time) or the *--pivot* flag (making base
+the new active image and invalidating top).
+
+By default, this command returns as soon as possible, and data for
+the entire disk is committed in the background; the progress of the
+operation can be checked with ``blockjob``.  However, if *--wait* is
+specified, then this command will block until the operation completes
+(or for *--active*, enters the second phase), or until the operation
+is canceled because the optional *timeout* in seconds elapses
+or SIGINT is sent (usually with ``Ctrl-C``).  Using *--verbose* along
+with *--wait* will produce periodic status updates.  If job cancellation
+is triggered, *--async* will return control to the user as fast as
+possible, otherwise the command may continue to block a little while
+longer until the job is done cleaning up.  Using *--pivot* is shorthand
+for combining *--active* *--wait* with an automatic ``blockjob``
+*--pivot*; and using *--keep-overlay* is shorthand for combining
+*--active* *--wait* with an automatic ``blockjob`` *--abort*.
+
+*path* specifies fully-qualified path of the disk; it corresponds
+to a unique target name (<target dev='name'/>) or source file (<source
+file='name'/>) for one of the disk devices attached to *domain* (see
+also ``domblklist`` for listing these names).
+*bandwidth* specifies copying bandwidth limit in MiB/s, although for
+qemu, it may be non-zero only for an online domain. For further information
+on the *bandwidth* argument see the corresponding section for the ``blockjob``
+command.
+
+
+blockcopy
+---------
+
+.. code-block:: shell
+
+   blockcopy domain path { dest [format] [--blockdev] | --xml file }
+      [--shallow] [--reuse-external] [bandwidth]
+      [--wait [--async] [--verbose]] [{--pivot | --finish}]
+      [--timeout seconds] [granularity] [buf-size] [--bytes]
+      [--transient-job]
+
+Copy a disk backing image chain to a destination.  Either *dest* as
+the destination file name, or *--xml* with the name of an XML file containing
+a top-level <disk> element describing the destination, must be present.
+Additionally, if *dest* is given, *format* should be specified to declare
+the format of the destination (if *format* is omitted, then libvirt
+will reuse the format of the source, or with *--reuse-external* will
+be forced to probe the destination format, which could be a potential
+security hole).  The command supports *--raw* as a boolean flag synonym for
+*--format=raw*.  When using *dest*, the destination is treated as a regular
+file unless *--blockdev* is used to signal that it is a block device. By
+default, this command flattens the entire chain; but if *--shallow* is
+specified, the copy shares the backing chain.
+
+If *--reuse-external* is specified, then the destination must exist and have
+sufficient space to hold the copy. If *--shallow* is used in
+conjunction with *--reuse-external* then the pre-created image must have
+guest visible contents identical to guest visible contents of the backing
+file of the original image. This may be used to modify the backing file
+names on the destination.
+
+By default, the copy job runs in the background, and consists of two
+phases.  Initially, the job must copy all data from the source, and
+during this phase, the job can only be canceled to revert back to the
+source disk, with no guarantees about the destination.  After this phase
+completes, both the source and the destination remain mirrored until a
+call to ``blockjob`` with the *--abort* and *--pivot* flags pivots over
+to the copy, or a call without *--pivot* leaves the destination as a
+faithful copy of that point in time.  However, if *--wait* is specified,
+then this command will block until the mirroring phase begins, or cancel
+the operation if the optional *timeout* in seconds elapses or SIGINT is
+sent (usually with ``Ctrl-C``).  Using *--verbose* along with *--wait*
+will produce periodic status updates.  Using *--pivot* (similar to
+``blockjob`` *--pivot*) or *--finish* (similar to ``blockjob`` *--abort*)
+implies *--wait*, and will additionally end the job cleanly rather than
+leaving things in the mirroring phase.  If job cancellation is triggered
+by timeout or by *--finish*, *--async* will return control to the user
+as fast as possible, otherwise the command may continue to block a little
+while longer until the job has actually cancelled.
+
+*path* specifies fully-qualified path of the disk.
+*bandwidth* specifies copying bandwidth limit in MiB/s. Specifying a negative
+value is interpreted as an unsigned long long value that might be essentially
+unlimited, but more likely would overflow; it is safer to use 0 for that
+purpose. For further information on the *bandwidth* argument see the
+corresponding section for the ``blockjob`` command.
+Specifying *granularity* allows fine-tuning of the granularity that will be
+copied when a dirty region is detected; larger values trigger less
+I/O overhead but may end up copying more data overall (the default value is
+usually correct); hypervisors may restrict this to be a power of two or fall
+within a certain range. Specifying *buf-size* will control how much data can
+be simultaneously in-flight during the copy; larger values use more memory but
+may allow faster completion (the default value is usually correct).
+
+*--transient-job* allows specifying that the user does not require the job to
+be recovered if the VM crashes or is turned off before the job completes. This
+flag removes the restriction of copy jobs to transient domains if that
+restriction is applied by the hypervisor.
+
+
+blockjob
+--------
+
+.. code-block:: shell
+
+   blockjob domain path { [--abort] [--async] [--pivot] |
+      [--info] [--raw] [--bytes] | [bandwidth] }
+
+Manage active block operations.  There are three mutually-exclusive modes:
+*--info*, *bandwidth*, and *--abort*.  *--async* and *--pivot* imply
+abort mode; *--raw* implies info mode; and if no mode was given, *--info*
+mode is assumed.
+
+*path* specifies fully-qualified path of the disk; it corresponds
+to a unique target name (<target dev='name'/>) or source file (<source
+file='name'/>) for one of the disk devices attached to *domain* (see
+also ``domblklist`` for listing these names).
+
+In *--abort* mode, the active job on the specified disk will
+be aborted.  If *--async* is also specified, this command will return
+immediately, rather than waiting for the cancellation to complete.  If
+*--pivot* is specified, this requests that an active copy or active
+commit job be pivoted over to the new image.
+
+In *--info* mode, the active job information on the specified
+disk will be printed.  By default, the output is a single human-readable
+summary line; this format may change in future versions.  Adding
+*--raw* lists each field of the struct, in a stable format.  If the
+*--bytes* flag is set, then the command errors out if the server could
+not supply bytes/s resolution; when omitting the flag, raw output is
+listed in MiB/s and human-readable output automatically selects the
+best resolution supported by the server.
+
+*bandwidth* can be used to set bandwidth limit for the active job in MiB/s.
+If *--bytes* is specified then the bandwidth value is interpreted in
+bytes/s. Specifying a negative value is interpreted as an unsigned long
+value or essentially unlimited. The hypervisor can choose whether to
+reject the value or convert it to the maximum value allowed. Optionally a
+scaled positive number may be used as bandwidth (see ``NOTES`` above). Using
+*--bytes* with a scaled value permits a finer granularity to be selected.
+A scaled value used without *--bytes* will be rounded down to MiB/s. Note
+that the *--bytes* may be unsupported by the hypervisor.
+
+
+blockpull
+---------
+
+.. code-block:: shell
+
+   blockpull domain path [bandwidth] [--bytes] [base]
+      [--wait [--verbose] [--timeout seconds] [--async]]
+      [--keep-relative]
+
+Populate a disk from its backing image chain. By default, this command
+flattens the entire chain; but if *base* is specified, containing the
+name of one of the backing files in the chain, then that file becomes
+the new backing file and only the intermediate portion of the chain is
+pulled.  Once all requested data from the backing image chain has been
+pulled, the disk no longer depends on that portion of the backing chain.
+
+By default, this command returns as soon as possible, and data for
+the entire disk is pulled in the background; the progress of the
+operation can be checked with ``blockjob``.  However, if *--wait* is
+specified, then this command will block until the operation completes,
+or cancel the operation if the optional *timeout* in seconds elapses
+or SIGINT is sent (usually with ``Ctrl-C``).  Using *--verbose* along
+with *--wait* will produce periodic status updates.  If job cancellation
+is triggered, *--async* will return control to the user as fast as
+possible, otherwise the command may continue to block a little while
+longer until the job is done cleaning up.
+
+Using the *--keep-relative* flag will keep the backing chain names
+relative.
+
+*path* specifies fully-qualified path of the disk; it corresponds
+to a unique target name (<target dev='name'/>) or source file (<source
+file='name'/>) for one of the disk devices attached to *domain* (see
+also ``domblklist`` for listing these names).
+*bandwidth* specifies copying bandwidth limit in MiB/s. For further information
+on the *bandwidth* argument see the corresponding section for the ``blockjob``
+command.
+
+
+blockresize
+-----------
+
+.. code-block:: shell
+
+   blockresize domain path size
+
+Resize a block device of domain while the domain is running, *path*
+specifies the absolute path of the block device; it corresponds
+to a unique target name (<target dev='name'/>) or source file (<source
+file='name'/>) for one of the disk devices attached to *domain* (see
+also ``domblklist`` for listing these names).
+
+*size* is a scaled integer (see ``NOTES`` above) which defaults to KiB
+(blocks of 1024 bytes) if there is no suffix.  You must use a suffix of
+"B" to get bytes (note that for historical reasons, this differs from
+``vol-resize`` which defaults to bytes without a suffix).
+
+
+console
+-------
+
+.. code-block:: shell
+
+   console domain [devname] [--safe] [--force]
+
+Connect the virtual serial console for the guest. The optional
+*devname* parameter refers to the device alias of an alternate
+console, serial or parallel device configured for the guest.
+If omitted, the primary console will be opened.
+
+If the flag *--safe* is specified, the connection is only attempted
+if the driver supports safe console handling. This flag specifies that
+the server has to ensure exclusive access to console devices. Optionally
+the *--force* flag may be specified, requesting to disconnect any existing
+sessions, such as in a case of a broken connection.
+
+
+cpu-stats
+---------
+
+.. code-block:: shell
+
+   cpu-stats domain [--total] [start] [count]
+
+Provide cpu statistics information of a domain. The domain should
+be running. Default it shows stats for all CPUs, and a total. Use
+*--total* for only the total stats, *start* for only the per-cpu
+stats of the CPUs from *start*, *count* for only *count* CPUs'
+stats.
+
+
+create
+------
+
+.. code-block:: shell
+
+   create FILE [--console] [--paused] [--autodestroy]
+      [--pass-fds N,M,...] [--validate]
+
+Create a domain from an XML <file>. Optionally, *--validate* option can be
+passed to validate the format of the input XML file against an internal RNG
+schema (identical to using virt-xml-validate(1) tool). Domains created using
+this command are going to be either transient (temporary ones that will vanish
+once destroyed) or existing persistent domains that will run with one-time use
+configuration, leaving the persistent XML untouched (this can come handy during
+an automated testing of various configurations all based on the original XML).
+See the ``Example`` section for usage demonstration.
+
+The domain will be paused if the *--paused* option is used
+and supported by the driver; otherwise it will be running. If *--console* is
+requested, attach to the console after creation.
+If *--autodestroy* is requested, then the guest will be automatically
+destroyed when virsh closes its connection to libvirt, or otherwise
+exits.
+
+If *--pass-fds* is specified, the argument is a comma separated list
+of open file descriptors which should be pass on into the guest. The
+file descriptors will be re-numbered in the guest, starting from 3. This
+is only supported with container based virtualization.
+
+Example
+~~~~~~~
+
+#. prepare a template from an existing domain (skip directly to 3a if writing
+   one from scratch)
+
+   .. code-block:: shell
+
+      # virsh dumpxml <domain> > domain.xml
+
+#. edit the template using an editor of your choice and:
+
+   a. DO CHANGE! <name> and <uuid> (<uuid> can also be removed), or
+   b. DON'T CHANGE! either <name> or <uuid>
+
+   .. code-block:: shell
+
+      # $EDITOR domain.xml
+
+#. create a domain from domain.xml, depending on whether following 2a or 2b
+   respectively:
+
+   a. the domain is going to be transient
+   b. an existing persistent domain will run with a modified one-time
+      configuration
+
+   .. code-block:: shell
+
+      # virsh create domain.xml
+
+
+define
+------
+
+.. code-block:: shell
+
+   define FILE [--validate]
+
+Define a domain from an XML <file>. Optionally, the format of the input XML
+file can be validated against an internal RNG schema with *--validate*
+(identical to using virt-xml-validate(1) tool). The domain definition is
+registered but not started.  If domain is already running, the changes will take
+effect on the next boot.
+
+
+desc
+----
+
+.. code-block:: shell
+
+   desc domain [[--live] [--config] |
+      [--current]] [--title] [--edit] [--new-desc
+      New description or title message]
+
+Show or modify description and title of a domain. These values are user
+fields that allow storing arbitrary textual data to allow easy
+identification of domains. Title should be short, although it's not enforced.
+(See also ``metadata`` that works with XML based domain metadata.)
+
+Flags *--live* or *--config* select whether this command works on live
+or persistent definitions of the domain. If both *--live* and *--config*
+are specified, the *--config* option takes precedence on getting the current
+description and both live configuration and config are updated while setting
+the description. *--current* is exclusive and implied if none of these was
+specified.
+
+Flag *--edit* specifies that an editor with the contents of current
+description or title should be opened and the contents saved back afterwards.
+
+Flag *--title* selects operation on the title field instead of description.
+
+If neither of *--edit* and *--new-desc* are specified the note or description
+is displayed instead of being modified.
+
+
+destroy
+-------
+
+.. code-block:: shell
+
+   destroy domain [--graceful]
+
+Immediately terminate the domain *domain*.  This doesn't give the domain
+OS any chance to react, and it's the equivalent of ripping the power
+cord out on a physical machine.  In most cases you will want to use
+the ``shutdown`` command instead.  However, this does not delete any
+storage volumes used by the guest, and if the domain is persistent, it
+can be restarted later.
+
+If *domain* is transient, then the metadata of any snapshots will
+be lost once the guest stops running, but the snapshot contents still
+exist, and a new domain with the same name and UUID can restore the
+snapshot metadata with ``snapshot-create``.  Similarly, the metadata of
+any checkpoints will be lost, but can be restored with ``checkpoint-create``.
+
+If *--graceful* is specified, don't resort to extreme measures
+(e.g. SIGKILL) when the guest doesn't stop after a reasonable timeout;
+return an error instead.
+
+
+
+domblkerror
+-----------
+
+.. code-block:: shell
+
+   domblkerror domain
+
+Show errors on block devices.  This command usually comes handy when
+``domstate`` command says that a domain was paused due to I/O error.
+The ``domblkerror`` command lists all block devices in error state and
+the error seen on each of them.
+
+
+
+domblkinfo
+----------
+
+.. code-block:: shell
+
+   domblkinfo domain [block-device --all] [--human]
+
+Get block device size info for a domain.  A *block-device* corresponds
+to a unique target name (<target dev='name'/>) or source file (<source
+file='name'/>) for one of the disk devices attached to *domain* (see
+also ``domblklist`` for listing these names). If *--human* is set, the
+output will have a human readable output.
+If *--all* is set, the output will be a table showing all block devices
+size info associated with *domain*.
+The *--all* option takes precedence of the others.
+
+
+
+domblklist
+----------
+
+.. code-block:: shell
+
+   domblklist domain [--inactive] [--details]
+
+Print a table showing the brief information of all block devices
+associated with *domain*. If *--inactive* is specified, query the
+block devices that will be used on the next boot, rather than those
+currently in use by a running domain. If *--details* is specified,
+disk type and device value will also be printed. Other contexts
+that require a block device name (such as *domblkinfo* or
+*snapshot-create* for disk snapshots) will accept either target
+or unique source names printed by this command.
+
+
+
+domblkstat
+----------
+
+.. code-block:: shell
+
+   domblkstat domain [block-device] [--human]
+
+Get device block stats for a running domain.  A *block-device* corresponds
+to a unique target name (<target dev='name'/>) or source file (<source
+file='name'/>) for one of the disk devices attached to *domain* (see
+also ``domblklist`` for listing these names). On a lxc or qemu domain,
+omitting the *block-device* yields device block stats summarily for the
+entire domain.
+
+Use *--human* for a more human readable output.
+
+Availability of these fields depends on hypervisor. Unsupported fields are
+missing from the output. Other fields may appear if communicating with a newer
+version of libvirtd.
+
+Explanation of fields (fields appear in the following order):
+
+* rd_req            - count of read operations
+* rd_bytes          - count of read bytes
+* wr_req            - count of write operations
+* wr_bytes          - count of written bytes
+* errs              - error count
+* flush_operations  - count of flush operations
+* rd_total_times    - total time read operations took (ns)
+* wr_total_times    - total time write operations took (ns)
+* flush_total_times - total time flush operations took (ns)
+* <-- other fields provided by hypervisor -->
+
+
+
+domblkthreshold
+---------------
+
+.. code-block:: shell
+
+   domblkthreshold domain dev threshold
+
+Set the threshold value for delivering the block-threshold event. *dev*
+specifies the disk device target or backing chain element of given device using
+the 'target[1]' syntax. *threshold* is a scaled value of the offset. If the
+block device should write beyond that offset the event will be delivered.
+
+
+domcontrol
+----------
+
+.. code-block:: shell
+
+   domcontrol domain
+
+Returns state of an interface to VMM used to control a domain.  For
+states other than "ok" or "error" the command also prints number of
+seconds elapsed since the control interface entered its current state.
+
+
+domdisplay
+----------
+
+.. code-block:: shell
+
+   domdisplay domain [--include-password] [[--type] type] [--all]
+
+Output a URI which can be used to connect to the graphical display of the
+domain via VNC, SPICE or RDP.  The particular graphical display type can
+be selected using the ``type`` parameter (e.g. "vnc", "spice", "rdp").  If
+*--include-password* is specified, the SPICE channel password will be
+included in the URI. If *--all* is specified, then all show all possible
+graphical displays, for a VM could have more than one graphical displays.
+
+
+domfsfreeze
+-----------
+
+.. code-block:: shell
+
+   domfsfreeze domain [[--mountpoint] mountpoint...]
+
+Freeze mounted filesystems within a running domain to prepare for consistent
+snapshots.
+
+The *--mountpoint* option takes a parameter ``mountpoint``, which is a
+mount point path of the filesystem to be frozen. This option can occur
+multiple times. If this is not specified, every mounted filesystem is frozen.
+
+Note: ``snapshot-create`` command has a *--quiesce* option to freeze
+and thaw the filesystems automatically to keep snapshots consistent.
+``domfsfreeze`` command is only needed when a user wants to utilize the
+native snapshot features of storage devices not supported by libvirt.
+
+
+domfsinfo
+---------
+
+.. code-block:: shell
+
+   domfsinfo domain
+
+Show a list of mounted filesystems within the running domain. The list contains
+mountpoints, names of a mounted device in the guest, filesystem types, and
+unique target names used in the domain XML (<target dev='name'/>).
+
+Note that this command requires a guest agent configured and running in the
+domain's guest OS.
+
+
+domfsthaw
+---------
+
+.. code-block:: shell
+
+   domfsthaw domain [[--mountpoint] mountpoint...]
+
+Thaw mounted filesystems within a running domain, which have been frozen by
+domfsfreeze command.
+
+The *--mountpoint* option takes a parameter ``mountpoint``, which is a
+mount point path of the filesystem to be thawed. This option can occur
+multiple times. If this is not specified, every mounted filesystem is thawed.
+
+
+domfstrim
+---------
+
+.. code-block:: shell
+
+   domfstrim domain [--minimum bytes] [--mountpoint mountPoint]
+
+Issue a fstrim command on all mounted filesystems within a running
+domain. It discards blocks which are not in use by the filesystem.
+If *--minimum* ``bytes`` is specified, it tells guest kernel length
+of contiguous free range. Smaller than this may be ignored (this is
+a hint and the guest may not respect it). By increasing this value,
+the fstrim operation will complete more quickly for filesystems
+with badly fragmented free space, although not all blocks will
+be discarded.  The default value is zero, meaning "discard
+every free block". Moreover, if a user wants to trim only one mount
+point, it can be specified via optional *--mountpoint* parameter.
+
+
+domhostname
+-----------
+
+.. code-block:: shell
+
+   domhostname domain
+
+Returns the hostname of a domain, if the hypervisor makes it available.
+
+
+domid
+-----
+
+.. code-block:: shell
+
+   domid domain-name-or-uuid
+
+Convert a domain name (or UUID) to a domain id
+
+
+domif
+-----
+
+.. code-block:: shell
+
+   domif-getlink domain interface-device [--config]
+
+Query link state of the domain's virtual interface. If *--config*
+is specified, query the persistent configuration, for compatibility
+purposes, *--persistent* is alias of *--config*.
+
+*interface-device* can be the interface's target name or the MAC address.
+
+
+domif
+-----
+
+.. code-block:: shell
+
+   domif-setlink domain interface-device state [--config]
+
+Modify link state of the domain's virtual interface. Possible values for
+state are "up" and "down". If *--config* is specified, only the persistent
+configuration of the domain is modified, for compatibility purposes,
+*--persistent* is alias of *--config*.
+*interface-device* can be the interface's target name or the MAC address.
+
+
+domifaddr
+---------
+
+.. code-block:: shell
+
+   domifaddr domain [interface] [--full]
+      [--source lease|agent|arp]
+
+Get a list of interfaces of a running domain along with their IP and MAC
+addresses, or limited output just for one interface if *interface* is
+specified. Note that *interface* can be driver dependent, it can be the name
+within guest OS or the name you would see in domain XML. Moreover, the whole
+command may require a guest agent to be configured for the queried domain under
+some hypervisors, notably QEMU.
+
+If *--full* is specified, the interface name and MAC address is always
+displayed when the interface has multiple IP addresses or aliases; otherwise,
+only the interface name and MAC address is displayed for the first name and
+MAC address with "-" for the others using the same name and MAC address.
+
+The *--source* argument specifies what data source to use for the
+addresses, currently 'lease' to read DHCP leases, 'agent' to query
+the guest OS via an agent, or 'arp' to get IP from host's arp tables.
+If unspecified, 'lease' is the default.
+
+
+domiflist
+---------
+
+.. code-block:: shell
+
+   domiflist domain [--inactive]
+
+Print a table showing the brief information of all virtual interfaces
+associated with *domain*. If *--inactive* is specified, query the
+virtual interfaces that will be used on the next boot, rather than those
+currently in use by a running domain. Other contexts that require a MAC
+address of virtual interface (such as *detach-interface* or
+*domif-setlink*) will accept the MAC address printed by this command.
+
+
+domifstat
+---------
+
+.. code-block:: shell
+
+   domifstat domain interface-device
+
+Get network interface stats for a running domain. The network
+interface stats are only available for interfaces that have a
+physical source interface. This does not include, for example, a
+'user' interface type since it is a virtual LAN with NAT to the
+outside world. *interface-device* can be the interface target by
+name or MAC address.
+
+
+domiftune
+---------
+
+.. code-block:: shell
+
+   domiftune domain interface-device [[--config] [--live] | [--current]]
+      [*--inbound average,peak,burst,floor*]
+      [*--outbound average,peak,burst*]
+
+Set or query the domain's network interface's bandwidth parameters.
+*interface-device* can be the interface's target name (<target dev='name'/>),
+or the MAC address.
+
+If no *--inbound* or *--outbound* is specified, this command will
+query and show the bandwidth settings. Otherwise, it will set the
+inbound or outbound bandwidth. *average,peak,burst,floor* is the same as
+in command *attach-interface*.  Values for *average*, *peak* and *floor*
+are expressed in kilobytes per second, while *burst* is expressed in kilobytes
+in a single burst at *peak* speed as described in the Network XML
+documentation at `https://libvirt.org/formatnetwork.html#elementQoS <https://libvirt.org/formatnetwork.html#elementQoS>`_.
+
+To clear inbound or outbound settings, use *--inbound* or *--outbound*
+respectfully with average value of zero.
+
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+
+
+dominfo
+-------
+
+.. code-block:: shell
+
+   dominfo domain
+
+Returns basic information about the domain.
+
+
+domjobabort
+-----------
+
+.. code-block:: shell
+
+   domjobabort domain
+
+Abort the currently running domain job.
+
+
+domjobinfo
+----------
+
+.. code-block:: shell
+
+   domjobinfo domain [--completed [--keep-completed]] [--anystats] [--rawstats]
+
+Returns information about jobs running on a domain. *--completed* tells
+virsh to return information about a recently finished job. Statistics of
+a completed job are automatically destroyed once read (unless
+*--keep-completed* is used) or when libvirtd is restarted.
+
+Normally only statistics for running and successful completed jobs are printed.
+*--anystats* can be used to also display statistics for failed jobs.
+
+In case *--rawstats* is used, all fields are printed as received from the
+server without any attempts to interpret the data. The "Job type:" field is
+special, since it's reported by the API and not part of stats.
+
+Note that time information returned for completed
+migrations may be completely irrelevant unless both source and
+destination hosts have synchronized time (i.e., NTP daemon is running
+on both of them).
+
+
+dommemstat
+----------
+
+.. code-block:: shell
+
+   dommemstat domain [--period seconds] [[--config] [--live] | [--current]]
+
+Get memory stats for a running domain.
+
+Availability of these fields depends on hypervisor. Unsupported fields are
+missing from the output. Other fields may appear if communicating with a newer
+version of libvirtd.
+
+Explanation of fields:
+
+* ``swap_in``           - The amount of data read from swap space (in KiB)
+* ``swap_out``          - The amount of memory written out to swap space (in KiB)
+* ``major_fault``       - The number of page faults where disk IO was required
+* ``minor_fault``       - The number of other page faults
+* ``unused``            - The amount of memory left unused by the system (in KiB)
+* ``available``         - The amount of usable memory as seen by the domain (in KiB)
+* ``actual``            - Current balloon value (in KiB)
+* ``rss``               - Resident Set Size of the running domain's process (in KiB)
+* ``usable``            - The amount of memory which can be reclaimed by balloon
+  without causing host swapping (in KiB)
+* ``last-update``       - Timestamp of the last update of statistics (in seconds)
+* ``disk_caches``       - The amount of memory that can be reclaimed without
+  additional I/O, typically disk caches (in KiB)
+* ``hugetlb_pgalloc``   - The number of successful huge page allocations initiated
+  from within the domain
+* ``hugetlb_pgfail``    - The number of failed huge page allocations initiated from
+  within the domain
+
+For QEMU/KVM with a memory balloon, setting the optional *--period* to a
+value larger than 0 in seconds will allow the balloon driver to return
+additional statistics which will be displayed by subsequent ``dommemstat``
+commands. Setting the *--period* to 0 will stop the balloon driver collection,
+but does not clear the statistics in the balloon driver. Requires at least
+QEMU/KVM 1.5 to be running on the host.
+
+The *--live*, *--config*, and *--current* flags are only valid when using
+the *--period* option in order to set the collection period for the balloon
+driver. If *--live* is specified, only the running guest collection period
+is affected. If *--config* is specified, affect the next boot of a persistent
+guest. If *--current* is specified, affect the current guest state.
+
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on the guest state.
+
+
+domname
+-------
+
+.. code-block:: shell
+
+   domname domain-id-or-uuid
+
+Convert a domain Id (or UUID) to domain name
+
+
+dompmsuspend
+------------
+
+.. code-block:: shell
+
+   dompmsuspend domain target [--duration]
+
+Suspend a running domain into one of these states (possible *target*
+values):
+
+* ``mem`` - equivalent of S3 ACPI state
+* ``disk`` - equivalent of S4 ACPI state
+* ``hybrid`` - RAM is saved to disk but not powered off
+
+The *--duration* argument specifies number of seconds before the domain is
+woken up after it was suspended (see also ``dompmwakeup``). Default is 0 for
+unlimited suspend time. (This feature isn't currently supported by any
+hypervisor driver and 0 should be used.).
+
+Note that this command requires a guest agent configured and running in the
+domain's guest OS.
+
+Beware that at least for QEMU, the domain's process will be terminated when
+target disk is used and a new process will be launched when libvirt is asked
+to wake up the domain. As a result of this, any runtime changes, such as
+device hotplug or memory settings, are lost unless such changes were made
+with *--config* flag.
+
+
+dompmwakeup
+-----------
+
+.. code-block:: shell
+
+   dompmwakeup domain
+
+Wakeup a domain from pmsuspended state (either suspended by dompmsuspend or
+from the guest itself). Injects a wakeup into the guest that is in pmsuspended
+state, rather than waiting for the previously requested duration (if any) to
+elapse. This operation doesn't not necessarily fail if the domain is running.
+
+
+domrename
+---------
+
+.. code-block:: shell
+
+   domrename domain new-name
+
+Rename a domain. This command changes current domain name to the new name
+specified in the second argument.
+
+``Note``: Domain must be inactive and without snapshots or checkpoints.
+
+
+domstate
+--------
+
+.. code-block:: shell
+
+   domstate domain [--reason]
+
+Returns state about a domain.  *--reason* tells virsh to also print
+reason for the state.
+
+
+domstats
+--------
+
+.. code-block:: shell
+
+   domstats [--raw] [--enforce] [--backing] [--nowait] [--state]
+      [--cpu-total] [--balloon] [--vcpu] [--interface]
+      [--block] [--perf] [--iothread]
+      [[--list-active] [--list-inactive]
+       [--list-persistent] [--list-transient] [--list-running]y
+       [--list-paused] [--list-shutoff] [--list-other]] | [domain ...]
+
+Get statistics for multiple or all domains. Without any argument this
+command prints all available statistics for all domains.
+
+The list of domains to gather stats for can be either limited by listing
+the domains as a space separated list, or by specifying one of the
+filtering flags *--list-NNN*. (The approaches can't be combined.)
+
+By default some of the returned fields may be converted to more
+human friendly values by a set of pretty-printers. To suppress this
+behavior use the *--raw* flag.
+
+The individual statistics groups are selectable via specific flags. By
+default all supported statistics groups are returned. Supported
+statistics groups flags are: *--state*, *--cpu-total*, *--balloon*,
+*--vcpu*, *--interface*, *--block*, *--perf*, *--iothread*.
+
+Note that - depending on the hypervisor type and version or the domain state
+- not all of the following statistics may be returned.
+
+When selecting the *--state* group the following fields are returned:
+
+
+* ``state.state`` - state of the VM, returned as number from
+  virDomainState enum
+* ``state.reason`` - reason for entering given state, returned
+  as int from virDomain*Reason enum corresponding
+  to given state
+
+
+*--cpu-total* returns:
+
+
+* ``cpu.time`` - total cpu time spent for this domain in nanoseconds
+* ``cpu.user`` - user cpu time spent in nanoseconds
+* ``cpu.system`` - system cpu time spent in nanoseconds
+* ``cpu.cache.monitor.count`` - the number of cache monitors for this
+  domain
+* ``cpu.cache.monitor.<num>.name`` - the name of cache monitor <num>
+* ``cpu.cache.monitor.<num>.vcpus`` - vcpu list of cache monitor <num>
+* ``cpu.cache.monitor.<num>.bank.count`` - the number of cache banks
+  in cache monitor <num>
+* ``cpu.cache.monitor.<num>.bank.<index>.id`` - host allocated cache id
+  for bank <index> in cache monitor <num>
+* ``cpu.cache.monitor.<num>.bank.<index>.bytes`` - the number of bytes
+  of last level cache that the domain is using on cache bank <index>
+
+
+*--balloon* returns:
+
+* ``balloon.current`` - the memory in KiB currently used
+* ``balloon.maximum`` - the maximum memory in KiB allowed
+* ``balloon.swap_in`` - the amount of data read from swap space (in KiB)
+* ``balloon.swap_out`` - the amount of memory written out to swap
+  space (in KiB)
+* ``balloon.major_fault`` - the number of page faults then disk IO
+  was required
+* ``balloon.minor_fault`` - the number of other page faults
+* ``balloon.unused`` - the amount of memory left unused by the
+  system (in KiB)
+* ``balloon.available`` - the amount of usable memory as seen by
+  the domain (in KiB)
+* ``balloon.rss`` - Resident Set Size of running domain's process
+  (in KiB)
+* ``balloon.usable`` - the amount of memory which can be reclaimed by
+  balloon without causing host swapping (in KiB)
+* ``balloon.last-update`` - timestamp of the last update of statistics
+  (in seconds)
+* ``balloon.disk_caches`` - the amount of memory that can be reclaimed
+  without additional I/O, typically disk (in KiB)
+
+
+*--vcpu* returns:
+
+* ``vcpu.current`` - current number of online virtual CPUs
+* ``vcpu.maximum`` - maximum number of online virtual CPUs
+* ``vcpu.<num>.state`` - state of the virtual CPU <num>, as
+  number from virVcpuState enum
+* ``vcpu.<num>.time`` - virtual cpu time spent by virtual
+  CPU <num> (in microseconds)
+* ``vcpu.<num>.wait`` - virtual cpu time spent by virtual
+  CPU <num> waiting on I/O (in microseconds)
+* ``vcpu.<num>.halted`` - virtual CPU <num> is halted: yes or
+  no (may indicate the processor is idle or even disabled,
+  depending on the architecture)
+
+
+*--interface* returns:
+
+* ``net.count`` - number of network interfaces on this domain
+* ``net.<num>.name`` - name of the interface <num>
+* ``net.<num>.rx.bytes`` - number of bytes received
+* ``net.<num>.rx.pkts`` - number of packets received
+* ``net.<num>.rx.errs`` - number of receive errors
+* ``net.<num>.rx.drop`` - number of receive packets dropped
+* ``net.<num>.tx.bytes`` - number of bytes transmitted
+* ``net.<num>.tx.pkts`` - number of packets transmitted
+* ``net.<num>.tx.errs`` - number of transmission errors
+* ``net.<num>.tx.drop`` - number of transmit packets dropped
+
+
+*--perf* returns the statistics of all enabled perf events:
+
+* ``perf.cmt`` - the cache usage in Byte currently used
+* ``perf.mbmt`` - total system bandwidth from one level of cache
+* ``perf.mbml`` - bandwidth of memory traffic for a memory controller
+* ``perf.cpu_cycles`` - the count of cpu cycles (total/elapsed)
+* ``perf.instructions`` - the count of instructions
+* ``perf.cache_references`` - the count of cache hits
+* ``perf.cache_misses`` - the count of caches misses
+* ``perf.branch_instructions`` - the count of branch instructions
+* ``perf.branch_misses`` - the count of branch misses
+* ``perf.bus_cycles`` - the count of bus cycles
+* ``perf.stalled_cycles_frontend`` - the count of stalled frontend
+  cpu cycles
+* ``perf.stalled_cycles_backend`` - the count of stalled backend
+  cpu cycles
+* ``perf.ref_cpu_cycles`` - the count of ref cpu cycles
+* ``perf.cpu_clock`` - the count of cpu clock time
+* ``perf.task_clock`` - the count of task clock time
+* ``perf.page_faults`` - the count of page faults
+* ``perf.context_switches`` - the count of context switches
+* ``perf.cpu_migrations`` - the count of cpu migrations
+* ``perf.page_faults_min`` - the count of minor page faults
+* ``perf.page_faults_maj`` - the count of major page faults
+* ``perf.alignment_faults`` - the count of alignment faults
+* ``perf.emulation_faults`` - the count of emulation faults
+
+
+See the ``perf`` command for more details about each event.
+
+*--block* returns information about disks associated with each
+domain.  Using the *--backing* flag extends this information to
+cover all resources in the backing chain, rather than the default
+of limiting information to the active layer for each guest disk.
+Information listed includes:
+
+
+* ``block.count`` - number of block devices being listed
+* ``block.<num>.name`` - name of the target of the block
+  device <num> (the same name for multiple entries if I<--backing>
+  is present)
+* ``block.<num>.backingIndex`` - when I<--backing> is present,
+  matches up with the <backingStore> index listed in domain XML for
+  backing files
+* ``block.<num>.path`` - file source of block device <num>, if
+  it is a local file or block device
+* ``block.<num>.rd.reqs`` - number of read requests
+* ``block.<num>.rd.bytes`` - number of read bytes
+* ``block.<num>.rd.times`` - total time (ns) spent on reads
+* ``block.<num>.wr.reqs`` - number of write requests
+* ``block.<num>.wr.bytes`` - number of written bytes
+* ``block.<num>.wr.times`` - total time (ns) spent on writes
+* ``block.<num>.fl.reqs`` - total flush requests
+* ``block.<num>.fl.times`` - total time (ns) spent on cache flushing
+* ``block.<num>.errors`` - Xen only: the 'oo_req' value
+* ``block.<num>.allocation`` - offset of highest written sector in bytes
+* ``block.<num>.capacity`` - logical size of source file in bytes
+* ``block.<num>.physical`` - physical size of source file in bytes
+* ``block.<num>.threshold`` - threshold (in bytes) for delivering the
+  VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD event. See domblkthreshold.
+
+
+*--iothread* returns information about IOThreads on the running guest
+if supported by the hypervisor.
+
+The "poll-max-ns" for each thread is the maximum nanoseconds to allow
+each polling interval to occur. A polling interval is a period of time
+allowed for a thread to process data before being the guest gives up
+its CPU quantum back to the host. A value set too small will not allow
+the IOThread to run long enough on a CPU to process data. A value set
+too high will consume too much CPU time per IOThread failing to allow
+other threads running on the CPU to get time. The polling interval is
+not available for statistical purposes.
+
+* ``iothread.<id>.poll-max-ns`` - maximum polling time in nanoseconds used
+  by the <id> IOThread. A value of 0 (zero) indicates polling is disabled.
+* ``iothread.<id>.poll-grow`` - polling time grow value. A value of 0 (zero)
+  growth is managed by the hypervisor.
+* ``iothread.<id>.poll-shrink`` - polling time shrink value. A value of
+  (zero) indicates shrink is managed by hypervisor.
+
+Selecting a specific statistics groups doesn't guarantee that the
+daemon supports the selected group of stats. Flag *--enforce*
+forces the command to fail if the daemon doesn't support the
+selected group.
+
+When collecting stats libvirtd may wait for some time if there's
+already another job running on given domain for it to finish.
+This may cause unnecessary delay in delivering stats. Using
+*--nowait* suppresses this behaviour. On the other hand
+some statistics might be missing for such domain.
+
+
+domtime
+-------
+
+.. code-block:: shell
+
+   domtime domain { [--now] [--pretty] [--sync] [--time time] }
+
+Gets or sets the domain's system time. When run without any arguments
+(but *domain*), the current domain's system time is printed out. The
+*--pretty* modifier can be used to print the time in more human
+readable form.
+
+When *--time* ``time`` is specified, the domain's time is
+not gotten but set instead. The *--now* modifier acts like if it was
+an alias for *--time* ``$now``, which means it sets the time that is
+currently on the host virsh is running at. In both cases (setting and
+getting), time is in seconds relative to Epoch of 1970-01-01 in UTC.
+The *--sync* modifies the set behavior a bit: The time passed is
+ignored, but the time to set is read from domain's RTC instead. Please
+note, that some hypervisors may require a guest agent to be configured
+in order to get or set the guest time.
+
+
+domuuid
+-------
+
+.. code-block:: shell
+
+   domuuid domain-name-or-id
+
+Convert a domain name or id to domain UUID
+
+
+domxml
+------
+
+.. code-block:: shell
+
+   domxml-from-native format config
+
+Convert the file *config* in the native guest configuration format
+named by *format* to a domain XML format. For QEMU/KVM hypervisor,
+the *format* argument must be ``qemu-argv``. For Xen hypervisor, the
+*format* argument may be ``xen-xm``, ``xen-xl``, or ``xen-sxpr``. For
+LXC hypervisor, the *format* argument must be ``lxc-tools``. For
+VMware/ESX hypervisor, the *format* argument must be ``vmware-vmx``.
+For the Bhyve hypervisor, the *format* argument must be ``bhyve-argv``.
+
+
+domxml
+------
+
+.. code-block:: shell
+
+   domxml-to-native format { [--xml] xml | --domain domain-name-or-id-or-uuid }
+
+Convert the file *xml* into domain XML format or convert an existing
+*--domain* to the native guest configuration format named by *format*.
+The *xml* and *--domain* arguments are mutually exclusive. For the types
+of *format* argument, refer to ``domxml-from-native``.
+
+
+dump
+----
+
+.. code-block:: shell
+
+   dump domain corefilepath [--bypass-cache]
+      { [--live] | [--crash] | [--reset] }
+      [--verbose] [--memory-only] [--format string]
+
+Dumps the core of a domain to a file for analysis.
+If *--live* is specified, the domain continues to run until the core
+dump is complete, rather than pausing up front.
+If *--crash* is specified, the domain is halted with a crashed status,
+rather than merely left in a paused state.
+If *--reset* is specified, the domain is reset after successful dump.
+Note, these three switches are mutually exclusive.
+If *--bypass-cache* is specified, the save will avoid the file system
+cache, although this may slow down the operation.
+If *--memory-only* is specified, the file is elf file, and will only
+include domain's memory and cpu common register value. It is very
+useful if the domain uses host devices directly.
+*--format* *string* is used to specify the format of 'memory-only'
+dump, and *string* can be one of them: elf, kdump-zlib(kdump-compressed
+format with zlib-compressed), kdump-lzo(kdump-compressed format with
+lzo-compressed), kdump-snappy(kdump-compressed format with snappy-compressed).
+
+The progress may be monitored using ``domjobinfo`` virsh command and canceled
+with ``domjobabort`` command (sent by another virsh instance). Another option
+is to send SIGINT (usually with ``Ctrl-C``) to the virsh process running
+``dump`` command. *--verbose* displays the progress of dump.
+
+NOTE: Some hypervisors may require the user to manually ensure proper
+permissions on file and path specified by argument *corefilepath*.
+
+NOTE: Crash dump in a old kvmdump format is being obsolete and cannot be loaded
+and processed by crash utility since its version 6.1.0. A --memory-only option
+is required in order to produce valid ELF file which can be later processed by
+the crash utility.
+
+
+dumpxml
+-------
+
+.. code-block:: shell
+
+   dumpxml domain [--inactive] [--security-info] [--update-cpu] [--migratable]
+
+Output the domain information as an XML dump to stdout, this format can be used
+by the ``create`` command. Additional options affecting the XML dump may be
+used. *--inactive* tells virsh to dump domain configuration that will be used
+on next start of the domain as opposed to the current domain configuration.
+Using *--security-info* will also include security sensitive information
+in the XML dump. *--update-cpu* updates domain CPU requirements according to
+host CPU. With *--migratable* one can request an XML that is suitable for
+migrations, i.e., compatible with older libvirt releases and possibly amended
+with internal run-time options. This option may automatically enable other
+options (*--update-cpu*, *--security-info*, ...) as necessary.
+
+
+edit
+----
+
+.. code-block:: shell
+
+   edit domain
+
+Edit the XML configuration file for a domain, which will affect the
+next boot of the guest.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh dumpxml --inactive --security-info domain > domain.xml
+   vi domain.xml (or make changes with your other text editor)
+   virsh define domain.xml
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+emulatorpin
+-----------
+
+.. code-block:: shell
+
+   emulatorpin domain [cpulist] [[--live] [--config]  | [--current]]
+
+Query or change the pinning of domain's emulator threads to host physical
+CPUs.
+
+See ``vcpupin`` for *cpulist*.
+
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given if *cpulist* is present,
+but *--current* is exclusive.
+If no flag is specified, behavior is different depending on hypervisor.
+
+
+event
+-----
+
+.. code-block:: shell
+
+   event {[domain] { event | --all } [--loop] [--timeout seconds] [--timestamp] | --list}
+
+Wait for a class of domain events to occur, and print appropriate details
+of events as they happen.  The events can optionally be filtered by
+*domain*.  Using *--list* as the only argument will provide a list
+of possible *event* values known by this client, although the connection
+might not allow registering for all these events.  It is also possible
+to use *--all* instead of *event* to register for all possible event
+types at once.
+
+By default, this command is one-shot, and returns success once an event
+occurs; you can send SIGINT (usually via ``Ctrl-C``) to quit immediately.
+If *--timeout* is specified, the command gives up waiting for events
+after *seconds* have elapsed.   With *--loop*, the command prints all
+events until a timeout or interrupt key.
+
+When *--timestamp* is used, a human-readable timestamp will be printed
+before the event.
+
+
+guest
+-----
+
+.. code-block:: shell
+
+   guest-agent-timeout domain --timeout value
+
+Set how long to wait for a response from guest agent commands. By default,
+agent commands block forever waiting for a response. ``value`` must be a
+positive value (wait for given amount of seconds) or one of the following
+values:
+
+* -2 - block forever waiting for a result,
+* -1 - reset timeout to the default value,
+* 0 - do not wait at all,
+
+
+guestinfo
+---------
+
+.. code-block:: shell
+
+   guestinfo domain [--user] [--os] [--timezone] [--hostname] [--filesystem]
+
+Print information about the guest from the point of view of the guest agent.
+Note that this command requires a guest agent to be configured and running in
+the domain's guest OS.
+
+When run without any arguments, this command prints all information types that
+are supported by the guest agent. You can limit the types of information that
+are returned by specifying one or more flags.  If a requested information
+type is not supported, the processes will provide an exit code of 1.
+Available information types flags are *--user*, *--os*,
+*--timezone*, *--hostname*, and *--filesystem*.
+
+Note that depending on the hypervisor type and the version of the guest agent
+running within the domain, not all of the following information may be
+returned.
+
+When selecting the *--user* information type, the following fields may be
+returned:
+
+
+* ``user.count`` - the number of active users on this domain
+* ``user.<num>.name`` - username of user <num>
+* ``user.<num>.domain`` - domain of the user <num> (may only be present on certain
+  guets types)
+* ``user.<num>.login-time`` - the login time of user <num> in milliseconds since
+  the epoch
+
+
+*--os* returns:
+
+* ``os.id`` - a string identifying the operating system
+* ``os.name`` - the name of the operating system
+* ``os.pretty-name`` - a pretty name for the operating system
+* ``os.version`` - the version of the operating system
+* ``os.version-id`` - the version id of the operating system
+* ``os.kernel-release`` - the release of the operating system kernel
+* ``os.kernel-version`` - the version of the operating system kernel
+* ``os.machine`` - the machine hardware name
+* ``os.variant`` - a specific variant or edition of the operating system
+* ``os.variant-id`` - the id for a specific variant or edition of the operating
+  system
+
+
+*--timezone* returns:
+
+* ``timezone.name`` - the name of the timezone
+* ``timezone.offset`` - the offset to UTC in seconds
+
+
+*--hostname* returns:
+
+* ``hostname`` - the hostname of the domain
+
+
+*--filesystem* returns:
+
+* ``fs.count`` - the number of filesystems defined on this domain
+* ``fs.<num>.mountpoint`` - the path to the mount point for filesystem <num>
+* ``fs.<num>.name`` - device name in the guest (e.g. ``sda1``) for filesystem <num>
+* ``fs.<num>.fstype`` - the type of filesystem <num>
+* ``fs.<num>.total-bytes`` - the total size of filesystem <num>
+* ``fs.<num>.used-bytes`` - the number of bytes used in filesystem <num>
+* ``fs.<num>.disk.count`` - the number of disks targeted by filesystem <num>
+* ``fs.<num>.disk.<num>.alias`` - the device alias of disk <num> (e.g. sda)
+* ``fs.<num>.disk.<num>.serial`` - the serial number of disk <num>
+* ``fs.<num>.disk.<num>.device`` - the device node of disk <num>
+
+
+guestvcpus
+----------
+
+.. code-block:: shell
+
+   guestvcpus domain [[--enable] | [--disable]] [cpulist]
+
+Query or change state of vCPUs from guest's point of view using the guest agent.
+When invoked without *cpulist* the guest is queried for available guest vCPUs,
+their state and possibility to be offlined.
+
+If *cpulist* is provided then one of *--enable* or *--disable* must be
+provided too. The desired operation is then executed on the domain.
+
+See ``vcpupin`` for information on *cpulist*.
+
+
+iothreadadd
+-----------
+
+.. code-block:: shell
+
+   iothreadadd domain iothread_id [[--config] [--live] | [--current]]
+
+Add a new IOThread to the domain using the specified *iothread_id*.
+If the *iothread_id* already exists, the command will fail. The
+*iothread_id* must be greater than zero.
+
+If *--live* is specified, affect a running guest. If the guest is not
+running an error is returned.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified or *--live* and *--config* are not specified,
+affect the current guest state.
+
+
+iothreaddel
+-----------
+
+.. code-block:: shell
+
+   iothreaddel domain iothread_id [[--config] [--live] | [--current]]
+
+Delete an IOThread from the domain using the specified *iothread_id*.
+If an IOThread is currently assigned to a disk resource such as via the
+``attach-disk`` command, then the attempt to remove the IOThread will fail.
+If the *iothread_id* does not exist an error will occur.
+
+If *--live* is specified, affect a running guest. If the guest is not
+running an error is returned.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified or *--live* and *--config* are not specified,
+affect the current guest state.
+
+
+iothreadinfo
+------------
+
+.. code-block:: shell
+
+   iothreadinfo domain [[--live] [--config] | [--current]]
+
+Display basic domain IOThreads information including the IOThread ID and
+the CPU Affinity for each IOThread.
+
+If *--live* is specified, get the IOThreads data from the running guest. If
+the guest is not running, an error is returned.
+If *--config* is specified, get the IOThreads data from the next boot of
+a persistent guest.
+If *--current* is specified or *--live* and *--config* are not specified,
+then get the IOThread data based on the current guest state.
+
+
+iothreadpin
+-----------
+
+.. code-block:: shell
+
+   iothreadpin domain iothread cpulist [[--live] [--config] | [--current]]
+
+Change the pinning of a domain IOThread to host physical CPUs. In order
+to retrieve a list of all IOThreads, use ``iothreadinfo``. To pin an
+*iothread* specify the *cpulist* desired for the IOThread ID as listed
+in the ``iothreadinfo`` output.
+
+*cpulist* is a list of physical CPU numbers. Its syntax is a comma
+separated list and a special markup using '-' and '^' (ex. '0-4', '0-3,^2') can
+also be allowed. The '-' denotes the range and the '^' denotes exclusive.
+If you want to reset iothreadpin setting, that is, to pin an *iothread*
+to all physical cpus, simply specify 'r' as a *cpulist*.
+
+If *--live* is specified, affect a running guest. If the guest is not running,
+an error is returned.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified or *--live* and *--config* are not specified,
+affect the current guest state.
+Both *--live* and *--config* flags may be given if *cpulist* is present,
+but *--current* is exclusive.
+If no flag is specified, behavior is different depending on hypervisor.
+
+``Note``: The expression is sequentially evaluated, so "0-15,^8" is
+identical to "9-14,0-7,15" but not identical to "^8,0-15".
+
+
+iothreadset
+-----------
+
+.. code-block:: shell
+
+   iothreadset domain iothread_id [[--poll-max-ns ns] [--poll-grow factor]
+      [--poll-shrink divisor]]
+      [[--config] [--live] | [--current]]
+
+Modifies an existing iothread of the domain using the specified
+*iothread_id*. The *--poll-max-ns* provides the maximum polling
+interval to be allowed for an IOThread in ns. If a 0 (zero) is provided,
+then polling for the IOThread is disabled.  The *--poll-grow* is the
+factor by which the current polling time will be adjusted in order to
+reach the maximum polling time. If a 0 (zero) is provided, then the
+default factor will be used. The *--poll-shrink* is the quotient
+by which the current polling time will be reduced in order to get
+below the maximum polling interval. If a 0 (zero) is provided, then
+the default quotient will be used. The polling values are purely dynamic
+for a running guest. Saving, destroying, stopping, etc. the guest will
+result in the polling values returning to hypervisor defaults at the
+next start, restore, etc.
+
+If *--live* is specified, affect a running guest. If the guest is not
+running an error is returned.
+If *--current* is specified or *--live* is not specified, then handle
+as if *--live* was specified.
+
+
+managedsave
+-----------
+
+.. code-block:: shell
+
+   managedsave domain [--bypass-cache] [{--running | --paused}] [--verbose]
+
+Save and destroy (stop) a running domain, so it can be restarted from the same
+state at a later time.  When the virsh ``start`` command is next run for
+the domain, it will automatically be started from this saved state.
+If *--bypass-cache* is specified, the save will avoid the file system
+cache, although this may slow down the operation.
+
+The progress may be monitored using ``domjobinfo`` virsh command and canceled
+with ``domjobabort`` command (sent by another virsh instance). Another option
+is to send SIGINT (usually with ``Ctrl-C``) to the virsh process running
+``managedsave`` command. *--verbose* displays the progress of save.
+
+Normally, starting a managed save will decide between running or paused
+based on the state the domain was in when the save was done; passing
+either the *--running* or *--paused* flag will allow overriding which
+state the ``start`` should use.
+
+The ``dominfo`` command can be used to query whether a domain currently
+has any managed save image.
+
+
+managedsave-define
+------------------
+
+.. code-block:: shell
+
+   managedsave-define domain xml [{--running | --paused}]
+
+Update the domain XML that will be used when *domain* is later
+started. The *xml* argument must be a file name containing
+the alternative XML, with changes only in the host-specific portions of
+the domain XML. For example, it can be used to change disk file paths.
+
+The managed save image records whether the domain should be started to a
+running or paused state.  Normally, this command does not alter the
+recorded state; passing either the *--running* or *--paused* flag
+will allow overriding which state the ``start`` should use.
+
+
+managedsave-dumpxml
+-------------------
+
+.. code-block:: shell
+
+   managedsave-dumpxml domain [--security-info]
+
+Extract the domain XML that was in effect at the time the saved state
+file *file* was created with the ``managedsave`` command.  Using
+*--security-info* will also include security sensitive information.
+
+
+managedsave-edit
+----------------
+
+.. code-block:: shell
+
+   managedsave-edit domain [{--running | --paused}]
+
+Edit the XML configuration associated with a saved state file of a
+*domain* was created by the ``managedsave`` command.
+
+The managed save image records whether the domain should be started to a
+running or paused state.  Normally, this command does not alter the
+recorded state; passing either the *--running* or *--paused* flag
+will allow overriding which state the ``restore`` should use.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh managedsave-dumpxml domain-name > state-file.xml
+   vi state-file.xml (or make changes with your other text editor)
+   virsh managedsave-define domain-name state-file-xml
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+managedsave-remove
+------------------
+
+.. code-block:: shell
+
+   managedsave-remove domain
+
+Remove the ``managedsave`` state file for a domain, if it exists.  This
+ensures the domain will do a full boot the next time it is started.
+
+
+maxvcpus
+--------
+
+.. code-block:: shell
+
+   maxvcpus [type]
+
+Provide the maximum number of virtual CPUs supported for a guest VM on
+this connection.  If provided, the *type* parameter must be a valid
+type attribute for the <domain> element of XML.
+
+
+memtune
+-------
+
+.. code-block:: shell
+
+   memtune domain [--hard-limit size] [--soft-limit size] [--swap-hard-limit size]
+      [--min-guarantee size] [[--config] [--live] | [--current]]
+
+Allows you to display or set the domain memory parameters. Without
+flags, the current settings are displayed; with a flag, the
+appropriate limit is adjusted if supported by the hypervisor.  LXC and
+QEMU/KVM support *--hard-limit*, *--soft-limit*, and *--swap-hard-limit*.
+*--min-guarantee* is supported only by ESX hypervisor.  Each of these
+limits are scaled integers (see ``NOTES`` above), with a default of
+kibibytes (blocks of 1024 bytes) if no suffix is present. Libvirt rounds
+up to the nearest kibibyte.  Some hypervisors require a larger granularity
+than KiB, and requests that are not an even multiple will be rounded up.
+For example, vSphere/ESX rounds the parameter up to mebibytes (1024 kibibytes).
+
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+
+For QEMU/KVM, the parameters are applied to the QEMU process as a whole.
+Thus, when counting them, one needs to add up guest RAM, guest video RAM, and
+some memory overhead of QEMU itself.  The last piece is hard to determine so
+one needs guess and try.
+
+For LXC, the displayed hard_limit value is the current memory setting
+from the XML or the results from a ``virsh setmem`` command.
+
+
+- *--hard-limit*
+
+  The maximum memory the guest can use.
+
+- *--soft-limit*
+
+  The memory limit to enforce during memory contention.
+
+- *--swap-hard-limit*
+
+  The maximum memory plus swap the guest can use.  This has to be more
+  than hard-limit value provided.
+
+- *--min-guarantee*
+
+  The guaranteed minimum memory allocation for the guest.
+
+
+Specifying -1 as a value for these limits is interpreted as unlimited.
+
+
+metadata
+--------
+
+.. code-block:: shell
+
+   metadata domain [[--live] [--config] | [--current]]
+      [--edit] [uri] [key] [set] [--remove]
+
+Show or modify custom XML metadata of a domain. The metadata is a user
+defined XML that allows storing arbitrary XML data in the domain definition.
+Multiple separate custom metadata pieces can be stored in the domain XML.
+The pieces are identified by a private XML namespace provided via the
+*uri* argument. (See also ``desc`` that works with textual metadata of
+a domain.)
+
+Flags *--live* or *--config* select whether this command works on live
+or persistent definitions of the domain. If both *--live* and *--config*
+are specified, the *--config* option takes precedence on getting the current
+description and both live configuration and config are updated while setting
+the description. *--current* is exclusive and implied if none of these was
+specified.
+
+Flag *--remove* specifies that the metadata element specified by the *uri*
+argument should be removed rather than updated.
+
+Flag *--edit* specifies that an editor with the metadata identified by the
+*uri* argument should be opened and the contents saved back afterwards.
+Otherwise the new contents can be provided via the *set* argument.
+
+When setting metadata via *--edit* or *set* the *key* argument must be
+specified and is used to prefix the custom elements to bind them
+to the private namespace.
+
+If neither of *--edit* and *set* are specified the XML metadata corresponding
+to the *uri* namespace is displayed instead of being modified.
+
+
+migrate
+-------
+
+.. code-block:: shell
+
+   migrate [--live] [--offline] [--direct] [--p2p [--tunnelled]]
+      [--persistent] [--undefinesource] [--suspend] [--copy-storage-all]
+      [--copy-storage-inc] [--change-protection] [--unsafe] [--verbose]
+      [--rdma-pin-all] [--abort-on-error] [--postcopy] [--postcopy-after-precopy]
+      domain desturi [migrateuri] [graphicsuri] [listen-address] [dname]
+      [--timeout seconds [--timeout-suspend | --timeout-postcopy]]
+      [--xml file] [--migrate-disks disk-list] [--disks-port port]
+      [--compressed] [--comp-methods method-list]
+      [--comp-mt-level] [--comp-mt-threads] [--comp-mt-dthreads]
+      [--comp-xbzrle-cache] [--auto-converge] [auto-converge-initial]
+      [auto-converge-increment] [--persistent-xml file] [--tls]
+      [--postcopy-bandwidth bandwidth]
+      [--parallel [--parallel-connections connections]]
+      [--bandwidth bandwidth]
+
+Migrate domain to another host.  Add *--live* for live migration; <--p2p>
+for peer-2-peer migration; *--direct* for direct migration; or *--tunnelled*
+for tunnelled migration.  *--offline* migrates domain definition without
+starting the domain on destination and without stopping it on source host.
+Offline migration may be used with inactive domains and it must be used with
+*--persistent* option.  *--persistent* leaves the domain persistent on
+destination host, *--undefinesource* undefines the domain on the source host,
+and *--suspend* leaves the domain paused on the destination host.
+*--copy-storage-all* indicates migration with non-shared storage with full
+disk copy, *--copy-storage-inc* indicates migration with non-shared storage
+with incremental copy (same base image shared between source and destination).
+In both cases the disk images have to exist on destination host, the
+*--copy-storage-...* options only tell libvirt to transfer data from the
+images on source host to the images found at the same place on the destination
+host. By default only non-shared non-readonly images are transferred. Use
+*--migrate-disks* to explicitly specify a list of disk targets to
+transfer via the comma separated ``disk-list`` argument. *--change-protection*
+enforces that no incompatible configuration changes will be made to the domain
+while the migration is underway; this flag is implicitly enabled when supported
+by the hypervisor, but can be explicitly used to reject the migration if the
+hypervisor lacks change protection support.  *--verbose* displays the progress
+of migration.  *--abort-on-error* cancels
+the migration if a soft error (for example I/O error) happens during the
+migration. *--postcopy* enables post-copy logic in migration, but does not
+actually start post-copy, i.e., migration is started in pre-copy mode.
+Once migration is running, the user may switch to post-copy using the
+``migrate-postcopy`` command sent from another virsh instance or use
+*--postcopy-after-precopy* along with *--postcopy* to let libvirt
+automatically switch to post-copy after the first pass of pre-copy is finished.
+The maximum bandwidth consumed during the post-copy phase may be limited using
+*--postcopy-bandwidth*. The maximum bandwidth consumed during the pre-copy phase
+may be limited using *--bandwidth*.
+
+*--auto-converge* forces convergence during live migration. The initial
+guest CPU throttling rate can be set with *auto-converge-initial*. If the
+initial throttling rate is not enough to ensure convergence, the rate is
+periodically increased by *auto-converge-increment*.
+
+*--rdma-pin-all* can be used with RDMA migration (i.e., when *migrateuri*
+starts with rdma://) to tell the hypervisor to pin all domain's memory at once
+before migration starts rather than letting it pin memory pages as needed. For
+QEMU/KVM this requires hard_limit memory tuning element (in the domain XML) to
+be used and set to the maximum memory configured for the domain plus any memory
+consumed by the QEMU process itself. Beware of setting the memory limit too
+high (and thus allowing the domain to lock most of the host's memory). Doing so
+may be dangerous to both the domain and the host itself since the host's kernel
+may run out of memory.
+
+``Note``: Individual hypervisors usually do not support all possible types of
+migration. For example, QEMU does not support direct migration.
+
+In some cases libvirt may refuse to migrate the domain because doing so may
+lead to potential problems such as data corruption, and thus the migration is
+considered unsafe. For QEMU domain, this may happen if the domain uses disks
+without explicitly setting cache mode to "none". Migrating such domains is
+unsafe unless the disk images are stored on coherent clustered filesystem,
+such as GFS2 or GPFS. If you are sure the migration is safe or you just do not
+care, use *--unsafe* to force the migration.
+
+*dname* is used for renaming the domain to new name during migration, which
+also usually can be omitted.  Likewise, *--xml* ``file`` is usually
+omitted, but can be used to supply an alternative XML file for use on
+the destination to supply a larger set of changes to any host-specific
+portions of the domain XML, such as accounting for naming differences
+between source and destination in accessing underlying storage.
+If *--persistent* is enabled, *--persistent-xml* ``file`` can be used to
+supply an alternative XML file which will be used as the persistent domain
+definition on the destination host.
+
+*--timeout* ``seconds`` tells virsh to run a specified action when live
+migration exceeds that many seconds.  It can only be used with *--live*.
+If *--timeout-suspend* is specified, the domain will be suspended after
+the timeout and the migration will complete offline; this is the default
+if no *--timeout-\\`` option is specified on the command line.  When
+*--timeout-postcopy* is used, virsh will switch migration from pre-copy
+to post-copy upon timeout; migration has to be started with *--postcopy*
+option for this to work.
+
+*--compressed* activates compression, the compression method is chosen
+with *--comp-methods*. Supported methods are "mt" and "xbzrle" and
+can be used in any combination. When no methods are specified, a hypervisor
+default methods will be used. QEMU defaults to "xbzrle". Compression methods
+can be tuned further. *--comp-mt-level* sets compression level.
+Values are in range from 0 to 9, where 1 is maximum speed and 9 is maximum
+compression. *--comp-mt-threads* and *--comp-mt-dthreads* set the number
+of compress threads on source and the number of decompress threads on target
+respectively. *--comp-xbzrle-cache* sets size of page cache in bytes.
+
+Providing *--tls* causes the migration to use the host configured TLS setup
+(see migrate_tls_x509_cert_dir in /etc/libvirt/qemu.conf) in order to perform
+the migration of the domain. Usage requires proper TLS setup for both source
+and target.
+
+*--parallel* option will cause migration data to be sent over multiple
+parallel connections. The number of such connections can be set using
+*--parallel-connections*. Parallel connections may help with saturating the
+network link between the source and the target and thus speeding up the
+migration.
+
+Running migration can be canceled by interrupting virsh (usually using
+``Ctrl-C``) or by ``domjobabort`` command sent from another virsh instance.
+
+The *desturi* and *migrateuri* parameters can be used to control which
+destination the migration uses.  *desturi* is important for managed
+migration, but unused for direct migration; *migrateuri* is required
+for direct migration, but can usually be automatically determined for
+managed migration.
+
+``Note``: The *desturi* parameter for normal migration and peer2peer migration
+has different semantics:
+
+* normal migration: the *desturi* is an address of the target host as seen from the client machine.
+
+* peer2peer migration: the *desturi* is an address of the target host as seen from the source machine.
+
+When *migrateuri* is not specified, libvirt will automatically determine the
+hypervisor specific URI.  Some hypervisors, including QEMU, have an optional
+"migration_host" configuration parameter (useful when the host has multiple
+network interfaces).  If this is unspecified, libvirt determines a name
+by looking up the target host's configured hostname.
+
+There are a few scenarios where specifying *migrateuri* may help:
+
+* The configured hostname is incorrect, or DNS is broken.
+  If a host has a hostname which will not resolve to match one of its public IP addresses, then
+  libvirt will generate an incorrect URI.  In this case *migrateuri* should be
+  explicitly specified, using an IP address, or a correct hostname.
+
+* The host has multiple network interfaces.  If a host has multiple network
+  interfaces, it might be desirable for the migration data stream to be sent over
+  a specific interface for either security or performance reasons.  In this case
+  *migrateuri* should be explicitly specified, using an IP address associated
+  with the network to be used.
+
+* The firewall restricts what ports are available.  When libvirt generates a
+  migration URI, it will pick a port number using hypervisor specific rules.
+  Some hypervisors only require a single port to be open in the firewalls, while
+  others require a whole range of port numbers.  In the latter case *migrateuri*
+  might be specified to choose a specific port number outside the default range in
+  order to comply with local firewall policies.
+
+See `https://libvirt.org/migration.html#uris <https://libvirt.org/migration.html#uris>`_ for more details on
+migration URIs.
+
+Optional *graphicsuri* overrides connection parameters used for automatically
+reconnecting a graphical clients at the end of migration. If omitted, libvirt
+will compute the parameters based on target host IP address. In case the
+client does not have a direct access to the network virtualization hosts are
+connected to and needs to connect through a proxy, *graphicsuri* may be used
+to specify the address the client should connect to. The URI is formed as
+follows:
+
+.. code-block:: shell
+
+      protocol://hostname[:port]/[?parameters]
+
+where protocol is either "spice" or "vnc" and parameters is a list of protocol
+specific parameters separated by '&'. Currently recognized parameters are
+"tlsPort" and "tlsSubject". For example,
+
+.. code-block:: shell
+
+      spice://target.host.com:1234/?tlsPort=4567
+
+Optional *listen-address* sets the listen address that hypervisor on the
+destination side should bind to for incoming migration. Both IPv4 and IPv6
+addresses are accepted as well as hostnames (the resolving is done on
+destination). Some hypervisors do not support this feature and will return an
+error if this parameter is used.
+
+Optional *disks-port* sets the port that hypervisor on destination side should
+bind to for incoming disks traffic. Currently it is supported only by qemu.
+
+
+migrate-compcache
+-----------------
+
+.. code-block:: shell
+
+   migrate-compcache domain [--size bytes]
+
+Sets and/or gets size of the cache (in bytes) used for compressing repeatedly
+transferred memory pages during live migration. When called without *size*,
+the command just prints current size of the compression cache. When *size*
+is specified, the hypervisor is asked to change compression cache to *size*
+bytes and then the current size is printed (the result may differ from the
+requested size due to rounding done by the hypervisor). The *size* option
+is supposed to be used while the domain is being live-migrated as a reaction
+to migration progress and increasing number of compression cache misses
+obtained from domjobinfo.
+
+
+migrate-getmaxdowntime
+----------------------
+
+.. code-block:: shell
+
+   migrate-getmaxdowntime domain
+
+
+Get the maximum tolerable downtime for a domain which is being live-migrated to
+another host.  This is the number of milliseconds the guest is allowed
+to be down at the end of live migration.
+
+
+migrate-getspeed
+----------------
+
+.. code-block:: shell
+
+   migrate-getspeed domain [--postcopy]
+
+Get the maximum migration bandwidth (in MiB/s) for a domain. If the
+*--postcopy* option is specified, the command will get the maximum bandwidth
+allowed during a post-copy migration phase.
+
+
+migrate-postcopy
+----------------
+
+.. code-block:: shell
+
+   migrate-postcopy domain
+
+Switch the current migration from pre-copy to post-copy. This is only
+supported for a migration started with *--postcopy* option.
+
+
+migrate-setmaxdowntime
+----------------------
+
+.. code-block:: shell
+
+   migrate-setmaxdowntime domain downtime
+
+Set maximum tolerable downtime for a domain which is being live-migrated to
+another host.  The *downtime* is a number of milliseconds the guest is allowed
+to be down at the end of live migration.
+
+
+migrate-setspeed
+----------------
+
+.. code-block:: shell
+
+   migrate-setspeed domain bandwidth [--postcopy]
+
+Set the maximum migration bandwidth (in MiB/s) for a domain which is being
+migrated to another host. *bandwidth* is interpreted as an unsigned long
+long value. Specifying a negative value results in an essentially unlimited
+value being provided to the hypervisor. The hypervisor can choose whether to
+reject the value or convert it to the maximum value allowed. If the
+*--postcopy* option is specified, the command will set the maximum bandwidth
+allowed during a post-copy migration phase.
+
+
+numatune
+--------
+
+.. code-block:: shell
+
+   numatune domain [--mode mode] [--nodeset nodeset]
+      [[--config] [--live] | [--current]]
+
+Set or get a domain's numa parameters, corresponding to the <numatune>
+element of domain XML.  Without flags, the current settings are
+displayed.
+
+*mode* can be one of \`strict', \`interleave' and \`preferred' or any
+valid number from the virDomainNumatuneMemMode enum in case the daemon
+supports it.  For a running domain, the mode can't be changed, and the
+nodeset can be changed only if the domain was started with a mode of
+\`strict'.
+
+*nodeset* is a list of numa nodes used by the host for running the domain.
+Its syntax is a comma separated list, with '-' for ranges and '^' for
+excluding a node.
+
+If *--live* is specified, set scheduler information of a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+
+
+perf
+----
+
+.. code-block:: shell
+
+   perf domain [--enable eventSpec] [--disable eventSpec]
+      [[--config] [--live] | [--current]]
+
+Get the current perf events setting or enable/disable specific perf
+events for a guest domain.
+
+Perf is a performance analyzing tool in Linux, and it can instrument
+CPU performance counters, tracepoints, kprobes, and uprobes (dynamic
+tracing). Perf supports a list of measurable events, and can measure
+events coming from different sources. For instance, some event are
+pure kernel counters, in this case they are called software events,
+including context-switches, minor-faults, etc.. Now dozens of events
+from different sources can be supported by perf.
+
+Currently only QEMU/KVM supports this command. The *--enable* and *--disable*
+option combined with ``eventSpec`` can be used to enable or disable specific
+performance event. ``eventSpec`` is a string list of one or more events
+separated by commas. Valid event names are as follows:
+
+Valid perf event names
+~~~~~~~~~~~~~~~~~~~~~~
+
+* ``cmt`` - A PQos (Platform Qos) feature to monitor the
+  usage of cache by applications running on the platform.
+* ``mbmt`` - Provides a way to monitor the total system
+  memory bandwidth between one level of cache and another.
+* ``mbml`` - Provides a way to limit the amount of data
+  (bytes/s) send through the memory controller on the socket.
+* ``cache_misses`` - Provides the count of cache misses by
+  applications running on the platform.
+* ``cache_references`` - Provides the count of cache hits by
+  applications running on th e platform.
+* ``instructions`` - Provides the count of instructions executed
+  by applications running on the platform.
+* ``cpu_cycles`` - Provides the count of cpu cycles
+  (total/elapsed). May be used with instructions in order to get
+  a cycles per instruction.
+* ``branch_instructions`` - Provides the count of branch instructions
+  executed by applications running on the platform.
+* ``branch_misses`` - Provides the count of branch misses executed
+  by applications running on the platform.
+* ``bus_cycles`` - Provides the count of bus cycles executed
+  by applications running on the platform.
+* ``stalled_cycles_frontend`` - Provides the count of stalled cpu
+  cycles in the frontend of the instruction processor pipeline by
+  applications running on the platform.
+* ``stalled_cycles_backend`` - Provides the count of stalled cpu
+  cycles in the backend of the instruction processor pipeline by
+  applications running on the platform.
+* ``ref_cpu_cycles`` -  Provides the count of total cpu cycles
+  not affected by CPU frequency scaling by applications running
+  on the platform.
+* ``cpu_clock`` - Provides the cpu clock time consumed by
+  applications running on the platform.
+* ``task_clock`` - Provides the task clock time consumed by
+  applications running on the platform.
+* ``page_faults`` - Provides the count of page faults by
+  applications running on the platform.
+* ``context_switches`` - Provides the count of context switches
+  by applications running on the platform.
+* ``cpu_migrations`` - Provides the count cpu migrations by
+  applications running on the platform.
+* ``page_faults_min`` - Provides the count minor page faults
+  by applications running on the platform.
+* ``page_faults_maj`` - Provides the count major page faults
+  by applications running on the platform.
+* ``alignment_faults`` - Provides the count alignment faults
+  by applications running on the platform.
+* ``emulation_faults`` - Provides the count emulation faults
+  by applications running on the platform.
+
+``Note``: The statistics can be retrieved using the ``domstats`` command using
+the *--perf* flag.
+
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+
+
+reboot
+------
+
+.. code-block:: shell
+
+   reboot domain [--mode MODE-LIST]
+
+Reboot a domain.  This acts just as if the domain had the ``reboot``
+command run from the console.  The command returns as soon as it has
+executed the reboot action, which may be significantly before the
+domain actually reboots.
+
+The exact behavior of a domain when it reboots is set by the
+*on_reboot* parameter in the domain's XML definition.
+
+By default the hypervisor will try to pick a suitable shutdown
+method. To specify an alternative method, the *--mode* parameter
+can specify a comma separated list which includes ``acpi``, ``agent``,
+``initctl``, ``signal`` and ``paravirt``. The order in which drivers will
+try each mode is undefined, and not related to the order specified to virsh.
+For strict control over ordering, use a single mode at a time and
+repeat the command.
+
+
+reset
+-----
+
+.. code-block:: shell
+
+   reset domain
+
+Reset a domain immediately without any guest shutdown. ``reset``
+emulates the power reset button on a machine, where all guest
+hardware sees the RST line set and reinitializes internal state.
+
+``Note``: Reset without any guest OS shutdown risks data loss.
+
+
+restore
+-------
+
+.. code-block:: shell
+
+   restore state-file [--bypass-cache] [--xml file]
+      [{--running | --paused}]
+
+Restores a domain from a ``virsh save`` state file. See *save* for more info.
+
+If *--bypass-cache* is specified, the restore will avoid the file system
+cache, although this may slow down the operation.
+
+*--xml* ``file`` is usually omitted, but can be used to supply an
+alternative XML file for use on the restored guest with changes only
+in the host-specific portions of the domain XML.  For example, it can
+be used to account for file naming differences in underlying storage
+due to disk snapshots taken after the guest was saved.
+
+Normally, restoring a saved image will use the state recorded in the
+save image to decide between running or paused; passing either the
+*--running* or *--paused* flag will allow overriding which state the
+domain should be started in.
+
+``Note``: To avoid corrupting file system contents within the domain, you
+should not reuse the saved state file for a second ``restore`` unless you
+have also reverted all storage volumes back to the same contents as when
+the state file was created.
+
+
+resume
+------
+
+.. code-block:: shell
+
+   resume domain
+
+Moves a domain out of the suspended state.  This will allow a previously
+suspended domain to now be eligible for scheduling by the underlying
+hypervisor.
+
+
+save
+----
+
+.. code-block:: shell
+
+   save domain state-file [--bypass-cache] [--xml file]
+      [{--running | --paused}] [--verbose]
+
+Saves a running domain (RAM, but not disk state) to a state file so that
+it can be restored
+later.  Once saved, the domain will no longer be running on the
+system, thus the memory allocated for the domain will be free for
+other domains to use.  ``virsh restore`` restores from this state file.
+If *--bypass-cache* is specified, the save will avoid the file system
+cache, although this may slow down the operation.
+
+The progress may be monitored using ``domjobinfo`` virsh command and canceled
+with ``domjobabort`` command (sent by another virsh instance). Another option
+is to send SIGINT (usually with ``Ctrl-C``) to the virsh process running
+``save`` command. *--verbose* displays the progress of save.
+
+This is roughly equivalent to doing a hibernate on a running computer,
+with all the same limitations.  Open network connections may be
+severed upon restore, as TCP timeouts may have expired.
+
+*--xml* ``file`` is usually omitted, but can be used to supply an
+alternative XML file for use on the restored guest with changes only
+in the host-specific portions of the domain XML.  For example, it can
+be used to account for file naming differences that are planned to
+be made via disk snapshots of underlying storage after the guest is saved.
+
+Normally, restoring a saved image will decide between running or paused
+based on the state the domain was in when the save was done; passing
+either the *--running* or *--paused* flag will allow overriding which
+state the ``restore`` should use.
+
+Domain saved state files assume that disk images will be unchanged
+between the creation and restore point.  For a more complete system
+restore point, where the disk state is saved alongside the memory
+state, see the ``snapshot`` family of commands.
+
+
+save-image-define
+-----------------
+
+.. code-block:: shell
+
+   save-image-define file xml [{--running | --paused}]
+
+Update the domain XML that will be used when *file* is later
+used in the ``restore`` command.  The *xml* argument must be a file
+name containing the alternative XML, with changes only in the
+host-specific portions of the domain XML.  For example, it can
+be used to account for file naming differences resulting from creating
+disk snapshots of underlying storage after the guest was saved.
+
+The save image records whether the domain should be restored to a
+running or paused state.  Normally, this command does not alter the
+recorded state; passing either the *--running* or *--paused* flag
+will allow overriding which state the ``restore`` should use.
+
+
+save-image-dumpxml
+------------------
+
+.. code-block:: shell
+
+   save-image-dumpxml file [--security-info]
+
+Extract the domain XML that was in effect at the time the saved state
+file *file* was created with the ``save`` command.  Using
+*--security-info* will also include security sensitive information.
+
+
+save-image-edit
+---------------
+
+.. code-block:: shell
+
+   save-image-edit file [{--running | --paused}]
+
+Edit the XML configuration associated with a saved state file *file*
+created by the ``save`` command.
+
+The save image records whether the domain should be restored to a
+running or paused state.  Normally, this command does not alter the
+recorded state; passing either the *--running* or *--paused* flag
+will allow overriding which state the ``restore`` should use.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh save-image-dumpxml state-file > state-file.xml
+   vi state-file.xml (or make changes with your other text editor)
+   virsh save-image-define state-file state-file-xml
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+schedinfo
+---------
+
+.. code-block:: shell
+
+   schedinfo domain [[--config] [--live] | [--current]] [[--set] parameter=value]...
+   schedinfo [--weight number] [--cap number] domain
+
+Allows you to show (and set) the domain scheduler parameters. The parameters
+available for each hypervisor are:
+
+LXC (posix scheduler) : cpu_shares, vcpu_period, vcpu_quota
+
+QEMU/KVM (posix scheduler): cpu_shares, vcpu_period, vcpu_quota,
+emulator_period, emulator_quota, iothread_quota, iothread_period
+
+Xen (credit scheduler): weight, cap
+
+ESX (allocation scheduler): reservation, limit, shares
+
+If *--live* is specified, set scheduler information of a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+
+``Note``: The cpu_shares parameter has a valid value range of 0-262144; Negative
+values are wrapped to positive, and larger values are capped at the maximum.
+Therefore, -1 is a useful shorthand for 262144. On the Linux kernel, the
+values 0 and 1 are automatically converted to a minimal value of 2.
+
+``Note``: The weight and cap parameters are defined only for the
+XEN_CREDIT scheduler.
+
+``Note``: The vcpu_period, emulator_period, and iothread_period parameters
+have a valid value range of 1000-1000000 or 0, and the vcpu_quota,
+emulator_quota, and iothread_quota parameters have a valid value range of
+1000-18446744073709551 or less than 0. The value 0 for
+either parameter is the same as not specifying that parameter.
+
+
+screenshot
+----------
+
+.. code-block:: shell
+
+   screenshot domain [imagefilepath] [--screen screenID]
+
+Takes a screenshot of a current domain console and stores it into a file.
+Optionally, if the hypervisor supports more displays for a domain, *screenID*
+allows specifying which screen will be captured. It is the sequential number
+of screen. In case of multiple graphics cards, heads are enumerated before
+devices, e.g. having two graphics cards, both with four heads, screen ID 5
+addresses the second head on the second card.
+
+
+send-key
+--------
+
+.. code-block:: shell
+
+   send-key domain [--codeset codeset] [--holdtime holdtime] keycode...
+
+Parse the *keycode* sequence as keystrokes to send to *domain*.
+Each *keycode* can either be a numeric value or a symbolic name from
+the corresponding codeset.  If *--holdtime* is given, each keystroke
+will be held for that many milliseconds.  The default codeset is
+``linux``, but use of the *--codeset* option allows other codesets to
+be chosen.
+
+If multiple keycodes are specified, they are all sent simultaneously
+to the guest, and they may be received in random order. If you need
+distinct keypresses, you must use multiple send-key invocations.
+
+- ``linux``
+
+  The numeric values are those defined by the Linux generic input
+  event subsystem. The symbolic names match the corresponding
+  Linux key constant macro names.
+
+  See virkeycode-linux(7) and virkeyname-linux(7)
+
+- ``xt``
+
+  The numeric values are those defined by the original XT keyboard
+  controller. No symbolic names are provided
+
+  See virkeycode-xt(7)
+
+- ``atset1``
+
+  The numeric values are those defined by the AT keyboard controller,
+  set 1 (aka XT compatible set). Extended keycoes from ``atset1``
+  may differ from extended keycodes in the ``xt`` codeset. No symbolic
+  names are provided
+
+  See virkeycode-atset1(7)
+
+- ``atset2``
+
+  The numeric values are those defined by the AT keyboard controller,
+  set 2. No symbolic names are provided
+
+  See virkeycode-atset2(7)
+
+- ``atset3``
+
+  The numeric values are those defined by the AT keyboard controller,
+  set 3 (aka PS/2 compatible set). No symbolic names are provided
+
+  See virkeycode-atset3(7)
+
+- ``os_x``
+
+  The numeric values are those defined by the macOS keyboard input
+  subsystem. The symbolic names match the corresponding macOS key
+  constant macro names
+
+  See virkeycode-osx(7) and virkeyname-osx(7)
+
+- ``xt_kbd``
+
+  The numeric values are those defined by the Linux KBD device.
+  These are a variant on the original XT codeset, but often with
+  different encoding for extended keycodes. No symbolic names are
+  provided.
+
+  See virkeycode-xtkbd(7)
+
+- ``win32``
+
+  The numeric values are those defined by the Win32 keyboard input
+  subsystem. The symbolic names match the corresponding Win32 key
+  constant macro names
+
+  See virkeycode-win32(7) and virkeyname-win32(7)
+
+- ``usb``
+
+  The numeric values are those defined by the USB HID specification
+  for keyboard input. No symbolic names are provided
+
+  See virkeycode-usb(7)
+
+- ``qnum``
+
+  The numeric values are those defined by the QNUM extension for sending
+  raw keycodes. These are a variant on the XT codeset, but extended
+  keycodes have the low bit of the second byte set, instead of the high
+  bit of the first byte. No symbolic names are provided.
+
+  See virkeycode-qnum(7)
+
+
+Examples
+~~~~~~~~
+
+.. code-block:: shell
+
+   # send three strokes 'k', 'e', 'y', using xt codeset. these
+   # are all pressed simultaneously and may be received by the guest
+   # in random order
+   virsh send-key dom --codeset xt 37 18 21
+
+   # send one stroke 'right-ctrl+C'
+   virsh send-key dom KEY_RIGHTCTRL KEY_C
+
+   # send a tab, held for 1 second
+   virsh send-key --holdtime 1000 0xf
+
+
+
+send-process-signal
+-------------------
+
+.. code-block:: shell
+
+   send-process-signal domain-id pid signame
+
+Send a signal *signame* to the process identified by *pid* running in
+the virtual domain *domain-id*. The *pid* is a process ID in the virtual
+domain namespace.
+
+The *signame* argument may be either an integer signal constant number,
+or one of the symbolic names:
+
+.. code-block:: shell
+
+      "nop", "hup", "int", "quit", "ill",
+      "trap", "abrt", "bus", "fpe", "kill",
+      "usr1", "segv", "usr2", "pipe", "alrm",
+      "term", "stkflt", "chld", "cont", "stop",
+      "tstp", "ttin", "ttou", "urg", "xcpu",
+      "xfsz", "vtalrm", "prof", "winch", "poll",
+      "pwr", "sys", "rt0", "rt1", "rt2", "rt3",
+      "rt4", "rt5", "rt6", "rt7", "rt8", "rt9",
+      "rt10", "rt11", "rt12", "rt13", "rt14", "rt15",
+      "rt16", "rt17", "rt18", "rt19", "rt20", "rt21",
+      "rt22", "rt23", "rt24", "rt25", "rt26", "rt27",
+      "rt28", "rt29", "rt30", "rt31", "rt32"
+
+The symbol name may optionally be prefixed with ``sig`` or ``sig_`` and
+may be in uppercase or lowercase.
+
+Examples
+~~~~~~~~
+
+.. code-block:: shell
+
+   virsh send-process-signal myguest 1 15
+   virsh send-process-signal myguest 1 term
+   virsh send-process-signal myguest 1 sigterm
+   virsh send-process-signal myguest 1 SIG_HUP
+
+
+set-lifecycle-action
+--------------------
+
+.. code-block:: shell
+
+   set-lifecycle-action domain type action
+      [[--config] [--live] | [--current]]
+
+Set the lifecycle *action* for specified lifecycle *type*.
+The valid types are "poweroff", "reboot" and "crash", and for each of
+them valid *action* is one of "destroy", "restart", "rename-restart",
+"preserve".  For *type* "crash", additional actions "coredump-destroy"
+and "coredump-restart" are supported.
+
+
+set-user-password
+-----------------
+
+.. code-block:: shell
+
+   set-user-password domain user password [--encrypted]
+
+Set the password for the *user* account in the guest domain.
+
+If *--encrypted* is specified, the password is assumed to be already
+encrypted by the method required by the guest OS.
+
+For QEMU/KVM, this requires the guest agent to be configured
+and running.
+
+
+setmaxmem
+---------
+
+.. code-block:: shell
+
+   setmaxmem domain size [[--config] [--live] | [--current]]
+
+Change the maximum memory allocation limit for a guest domain.
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+
+Some hypervisors such as QEMU/KVM don't support live changes (especially
+increasing) of the maximum memory limit.  Even persistent configuration changes
+might not be performed with some hypervisors/configuration (e.g. on NUMA enabled
+domains on QEMU).  For complex configuration changes use command ``edit``
+instead).
+
+*size* is a scaled integer (see ``NOTES`` above); it defaults to kibibytes
+(blocks of 1024 bytes) unless you provide a suffix (and the older option
+name *--kilobytes* is available as a deprecated synonym) .  Libvirt rounds
+up to the nearest kibibyte.  Some hypervisors require a larger granularity
+than KiB, and requests that are not an even multiple will be rounded up.
+For example, vSphere/ESX rounds the parameter up to mebibytes (1024 kibibytes).
+
+
+setmem
+------
+
+.. code-block:: shell
+
+   setmem domain size [[--config] [--live] | [--current]]
+
+Change the memory allocation for a guest domain.
+If *--live* is specified, perform a memory balloon of a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+
+*size* is a scaled integer (see ``NOTES`` above); it defaults to kibibytes
+(blocks of 1024 bytes) unless you provide a suffix (and the older option
+name *--kilobytes* is available as a deprecated synonym) .  Libvirt rounds
+up to the nearest kibibyte.  Some hypervisors require a larger granularity
+than KiB, and requests that are not an even multiple will be rounded up.
+For example, vSphere/ESX rounds the parameter up to mebibytes (1024 kibibytes).
+
+For Xen, you can only adjust the memory of a running domain if the domain is
+paravirtualized or running the PV balloon driver.
+
+For LXC, the value being set is the cgroups value for limit_in_bytes or the
+maximum amount of user memory (including file cache). When viewing memory
+inside the container, this is the /proc/meminfo "MemTotal" value. When viewing
+the value from the host, use the ``virsh memtune`` command. In order to view
+the current memory in use and the maximum value allowed to set memory, use
+the ``virsh dominfo`` command.
+
+
+setvcpus
+--------
+
+.. code-block:: shell
+
+   setvcpus domain count [--maximum] [[--config] [--live] | [--current]] [--guest] [--hotpluggable]
+
+Change the number of virtual CPUs active in a guest domain.  By default,
+this command works on active guest domains.  To change the settings for an
+inactive guest domain, use the *--config* flag.
+
+The *count* value may be limited by host, hypervisor, or a limit coming
+from the original description of the guest domain. For Xen, you can only
+adjust the virtual CPUs of a running domain if the domain is paravirtualized.
+
+If the *--config* flag is specified, the change is made to the stored XML
+configuration for the guest domain, and will only take effect when the guest
+domain is next started.
+
+If *--live* is specified, the guest domain must be active, and the change
+takes place immediately.  Both the *--config* and *--live* flags may be
+specified together if supported by the hypervisor.  If this command is run
+before the guest has finished booting, the guest may fail to process
+the change.
+
+If *--current* is specified, affect the current guest state.
+
+When no flags are given, the *--live*
+flag is assumed and the guest domain must be active.  In this situation it
+is up to the hypervisor whether the *--config* flag is also assumed, and
+therefore whether the XML configuration is adjusted to make the change
+persistent.
+
+If *--guest* is specified, then the count of cpus is modified in the guest
+instead of the hypervisor. This flag is usable only for live domains
+and may require guest agent to be configured in the guest.
+
+To allow adding vcpus to persistent definitions that can be later hotunplugged
+after the domain is booted it is necessary to specify the *--hotpluggable*
+flag. Vcpus added to live domains supporting vcpu unplug are automatically
+marked as hotpluggable.
+
+The *--maximum* flag controls the maximum number of virtual cpus that can
+be hot-plugged the next time the domain is booted.  As such, it must only be
+used with the *--config* flag, and not with the *--live* or the *--current*
+flag. Note that it may not be possible to change the maximum vcpu count if
+the processor topology is specified for the guest.
+
+
+setvcpu
+-------
+
+.. code-block:: shell
+
+   setvcpu domain vcpulist [--enable] | [--disable]
+      [[--live] [--config] | [--current]]
+
+Change state of individual vCPUs using hot(un)plug mechanism.
+
+See ``vcpupin`` for information on format of *vcpulist*. Hypervisor drivers may
+require that *vcpulist* contains exactly vCPUs belonging to one hotpluggable
+entity. This is usually just a single vCPU but certain architectures such as
+ppc64 require a full core to be specified at once.
+
+Note that hypervisors may refuse to disable certain vcpus such as vcpu 0 or
+others.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state. This is the
+default. Both *--live* and *--config* flags may be given, but *--current* is
+exclusive.
+
+
+shutdown
+--------
+
+.. code-block:: shell
+
+   shutdown domain [--mode MODE-LIST]
+
+Gracefully shuts down a domain.  This coordinates with the domain OS
+to perform graceful shutdown, so there is no guarantee that it will
+succeed, and may take a variable length of time depending on what
+services must be shutdown in the domain.
+
+The exact behavior of a domain when it shuts down is set by the
+*on_poweroff* parameter in the domain's XML definition.
+
+If *domain* is transient, then the metadata of any snapshots and
+checkpoints will be lost once the guest stops running, but the underlying
+contents still exist, and a new domain with the same name and UUID can
+restore the snapshot metadata with ``snapshot-create``, and the checkpoint
+metadata with ``checkpoint-create``.
+
+By default the hypervisor will try to pick a suitable shutdown
+method. To specify an alternative method, the *--mode* parameter
+can specify a comma separated list which includes ``acpi``, ``agent``,
+``initctl``, ``signal`` and ``paravirt``. The order in which drivers will
+try each mode is undefined, and not related to the order specified to virsh.
+For strict control over ordering, use a single mode at a time and
+repeat the command.
+
+
+start
+-----
+
+.. code-block:: shell
+
+   start domain-name-or-uuid [--console] [--paused]
+      [--autodestroy] [--bypass-cache] [--force-boot]
+      [--pass-fds N,M,...]
+
+Start a (previously defined) inactive domain, either from the last
+``managedsave`` state, or via a fresh boot if no managedsave state is
+present.  The domain will be paused if the *--paused* option is
+used and supported by the driver; otherwise it will be running.
+If *--console* is requested, attach to the console after creation.
+If *--autodestroy* is requested, then the guest will be automatically
+destroyed when virsh closes its connection to libvirt, or otherwise
+exits.  If *--bypass-cache* is specified, and managedsave state exists,
+the restore will avoid the file system cache, although this may slow
+down the operation.  If *--force-boot* is specified, then any
+managedsave state is discarded and a fresh boot occurs.
+
+If *--pass-fds* is specified, the argument is a comma separated list
+of open file descriptors which should be pass on into the guest. The
+file descriptors will be re-numbered in the guest, starting from 3. This
+is only supported with container based virtualization.
+
+
+suspend
+-------
+
+.. code-block:: shell
+
+   suspend domain
+
+Suspend a running domain. It is kept in memory but won't be scheduled
+anymore.
+
+
+ttyconsole
+----------
+
+.. code-block:: shell
+
+   ttyconsole domain
+
+Output the device used for the TTY console of the domain. If the information
+is not available the processes will provide an exit code of 1.
+
+
+undefine
+--------
+
+.. code-block:: shell
+
+   undefine domain [--managed-save] [--snapshots-metadata]
+      [--checkpoints-metadata] [--nvram] [--keep-nvram]
+      [ {--storage volumes | --remove-all-storage
+         [--delete-storage-volume-snapshots]} --wipe-storage]
+
+Undefine a domain. If the domain is running, this converts it to a
+transient domain, without stopping it. If the domain is inactive,
+the domain configuration is removed.
+
+The *--managed-save* flag guarantees that any managed save image (see
+the ``managedsave`` command) is also cleaned up.  Without the flag, attempts
+to undefine a domain with a managed save image will fail.
+
+The *--snapshots-metadata* flag guarantees that any snapshots (see the
+``snapshot-list`` command) are also cleaned up when undefining an inactive
+domain.  Without the flag, attempts to undefine an inactive domain with
+snapshot metadata will fail.  If the domain is active, this flag is
+ignored.
+
+The *--checkpoints-metadata* flag guarantees that any checkpoints (see the
+``checkpoint-list`` command) are also cleaned up when undefining an inactive
+domain.  Without the flag, attempts to undefine an inactive domain with
+checkpoint metadata will fail.  If the domain is active, this flag is
+ignored.
+
+*--nvram* and *--keep-nvram* specify accordingly to delete or keep nvram
+(/domain/os/nvram/) file. If the domain has an nvram file and the flags are
+omitted, the undefine will fail.
+
+The *--storage* flag takes a parameter ``volumes``, which is a comma separated
+list of volume target names or source paths of storage volumes to be removed
+along with the undefined domain. Volumes can be undefined and thus removed only
+on inactive domains. Volume deletion is only attempted after the domain is
+undefined; if not all of the requested volumes could be deleted, the
+error message indicates what still remains behind. If a volume path is not
+found in the domain definition, it's treated as if the volume was successfully
+deleted. Only volumes managed by libvirt in storage pools can be removed this
+way.
+(See ``domblklist`` for list of target names associated to a domain).
+Example: --storage vda,/path/to/storage.img
+
+The *--remove-all-storage* flag specifies that all of the domain's storage
+volumes should be deleted.
+
+The *--delete-storage-volume-snapshots* (previously *--delete-snapshots*)
+flag specifies that any snapshots associated with
+the storage volume should be deleted as well. Requires the
+*--remove-all-storage* flag to be provided. Not all storage drivers
+support this option, presently only rbd. Using this when also removing volumes
+handled by a storage driver which does not support the flag will result in
+failure.
+
+The flag *--wipe-storage* specifies that the storage volumes should be
+wiped before removal.
+
+NOTE: For an inactive domain, the domain name or UUID must be used as the
+*domain*.
+
+
+vcpucount
+---------
+
+.. code-block:: shell
+
+   vcpucount domain  [{--maximum | --active}
+      {--config | --live | --current}] [--guest]
+
+Print information about the virtual cpu counts of the given
+*domain*.  If no flags are specified, all possible counts are
+listed in a table; otherwise, the output is limited to just the
+numeric value requested.  For historical reasons, the table
+lists the label "current" on the rows that can be queried in isolation
+via the *--active* flag, rather than relating to the *--current* flag.
+
+*--maximum* requests information on the maximum cap of vcpus that a
+domain can add via ``setvcpus``, while *--active* shows the current
+usage; these two flags cannot both be specified.  *--config*
+requires a persistent domain and requests information regarding the next
+time the domain will be booted, *--live* requires a running domain and
+lists current values, and *--current* queries according to the current
+state of the domain (corresponding to *--live* if running, or
+*--config* if inactive); these three flags are mutually exclusive.
+
+If *--guest* is specified, then the count of cpus is reported from
+the perspective of the guest. This flag is usable only for live domains
+and may require guest agent to be configured in the guest.
+
+
+vcpuinfo
+--------
+
+.. code-block:: shell
+
+   vcpuinfo domain [--pretty]
+
+Returns basic information about the domain virtual CPUs, like the number of
+vCPUs, the running time, the affinity to physical processors.
+
+With *--pretty*, cpu affinities are shown as ranges.
+
+Example
+~~~~~~~
+
+.. code-block:: shell
+
+   $ virsh vcpuinfo fedora
+   VCPU:           0
+   CPU:            0
+   State:          running
+   CPU time:       7,0s
+   CPU Affinity:   yyyy
+
+   VCPU:           1
+   CPU:            1
+   State:          running
+   CPU time:       0,7s
+   CPU Affinity:   yyyy
+
+
+``STATES``
+
+The State field displays the current operating state of a virtual CPU
+
+
+- ``offline``
+
+  The virtual CPU is offline and not usable by the domain.
+  This state is not supported by all hypervisors.
+
+- ``running``
+
+  The virtual CPU is available to the domain and is operating.
+
+- ``blocked``
+
+  The virtual CPU is available to the domain but is waiting for a resource.
+  This state is not supported by all hypervisors, in which case *running*
+  may be reported instead.
+
+- ``no state``
+
+  The virtual CPU state could not be determined. This could happen if
+  the hypervisor is newer than virsh.
+
+- ``N/A``
+
+  There's no information about the virtual CPU state available. This can
+  be the case if the domain is not running or the hypervisor does
+  not report the virtual CPU state.
+
+
+vcpupin
+-------
+
+.. code-block:: shell
+
+   vcpupin domain [vcpu] [cpulist] [[--live] [--config] | [--current]]
+
+Query or change the pinning of domain VCPUs to host physical CPUs.  To
+pin a single *vcpu*, specify *cpulist*; otherwise, you can query one
+*vcpu* or omit *vcpu* to list all at once.
+
+*cpulist* is a list of physical CPU numbers. Its syntax is a comma
+separated list and a special markup using '-' and '^' (ex. '0-4', '0-3,^2') can
+also be allowed. The '-' denotes the range and the '^' denotes exclusive.
+For pinning the *vcpu* to all physical cpus specify 'r' as a *cpulist*.
+If *--live* is specified, affect a running guest.
+If *--config* is specified, affect the next boot of a persistent guest.
+If *--current* is specified, affect the current guest state.
+Both *--live* and *--config* flags may be given if *cpulist* is present,
+but *--current* is exclusive.
+If no flag is specified, behavior is different depending on hypervisor.
+
+``Note``: The expression is sequentially evaluated, so "0-15,^8" is
+identical to "9-14,0-7,15" but not identical to "^8,0-15".
+
+
+vncdisplay
+----------
+
+.. code-block:: shell
+
+   vncdisplay domain
+
+Output the IP address and port number for the VNC display. If the information
+is not available the processes will provide an exit code of 1.
+
+
+DEVICE COMMANDS
+===============
+
+The following commands manipulate devices associated to domains.
+The *domain* can be specified as a short integer, a name or a full UUID.
+To better understand the values allowed as options for the command
+reading the documentation at `https://libvirt.org/formatdomain.html <https://libvirt.org/formatdomain.html>`_ on the
+format of the device sections to get the most accurate set of accepted values.
+
+
+attach-device
+-------------
+
+.. code-block:: shell
+
+   attach-device domain FILE [[[--live] [--config] | [--current]] | [--persistent]]
+
+Attach a device to the domain, using a device definition in an XML
+file using a device definition element such as <disk> or <interface>
+as the top-level element.  See the documentation at
+`https://libvirt.org/formatdomain.html#elementsDevices <https://libvirt.org/formatdomain.html#elementsDevices>`_ to learn about
+libvirt XML format for a device.  If *--config* is specified the
+command alters the persistent domain configuration with the device
+attach taking effect the next time libvirt starts the domain.
+For cdrom and floppy devices, this command only replaces the media
+within an existing device; consider using ``update-device`` for this
+usage.  For passthrough host devices, see also ``nodedev-detach``,
+needed if the PCI device does not use managed mode.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. When no flag is specified legacy API is used whose behavior depends
+on the hypervisor driver.
+
+For compatibility purposes, *--persistent* behaves like *--config* for
+an offline domain, and like *--live* *--config* for a running domain.
+
+``Note``: using of partial device definition XML files may lead to unexpected
+results as some fields may be autogenerated and thus match devices other than
+expected.
+
+
+attach-disk
+-----------
+
+.. code-block:: shell
+
+   attach-disk domain source target [[[--live] [--config] |
+      [--current]] | [--persistent]] [--targetbus bus]
+      [--driver driver] [--subdriver subdriver] [--iothread iothread]
+      [--cache cache] [--io io] [--type type] [--alias alias]
+      [--mode mode] [--sourcetype sourcetype] [--serial serial]
+      [--wwn wwn] [--rawio] [--address address] [--multifunction]
+      [--print-xml]
+
+Attach a new disk device to the domain.
+*source* is path for the files and devices. *target* controls the bus or
+device under which the disk is exposed to the guest OS. It indicates the
+"logical" device name; the optional *targetbus* attribute specifies the type
+of disk device to emulate; possible values are driver specific, with typical
+values being *ide*, *scsi*, *virtio*, *xen*, *usb*, *sata*, or *sd*, if
+omitted, the bus type is inferred from the style of the device name (e.g.  a
+device named 'sda' will typically be exported using a SCSI bus).  *driver* can
+be *file*, *tap* or *phy* for the Xen
+hypervisor depending on the kind of access; or *qemu* for the QEMU emulator.
+Further details to the driver can be passed using *subdriver*. For Xen
+*subdriver* can be *aio*, while for QEMU subdriver should match the format
+of the disk source, such as *raw* or *qcow2*.  Hypervisor default will be
+used if *subdriver* is not specified.  However, the default may not be
+correct, esp. for QEMU as for security reasons it is configured not to detect
+disk formats.  *type* can indicate *lun*, *cdrom* or *floppy* as
+alternative to the disk default, although this use only replaces the media
+within the existing virtual cdrom or floppy device; consider using
+``update-device`` for this usage instead.
+*alias* can set user supplied alias.
+*mode* can specify the two specific mode *readonly* or *shareable*.
+*sourcetype* can indicate the type of source (block|file)
+*cache* can be one of "default", "none", "writethrough", "writeback",
+"directsync" or "unsafe".
+*io* controls specific policies on I/O; QEMU guests support "threads" and "native".
+*iothread* is the number within the range of domain IOThreads to which
+this disk may be attached (QEMU only).
+*serial* is the serial of disk device. *wwn* is the wwn of disk device.
+*rawio* indicates the disk needs rawio capability.
+*address* is the address of disk device in the form of
+pci:domain.bus.slot.function, scsi:controller.bus.unit,
+ide:controller.bus.unit, usb:bus.port, sata:controller.bus.unit or
+ccw:cssid.ssid.devno. Virtio-ccw devices must have their cssid set to 0xfe.
+*multifunction* indicates specified pci address is a multifunction pci device
+address.
+
+If *--print-xml* is specified, then the XML of the disk that would be attached
+is printed instead.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. When no flag is specified legacy API is used whose behavior depends
+on the hypervisor driver.
+
+For compatibility purposes, *--persistent* behaves like *--config* for
+an offline domain, and like *--live* *--config* for a running domain.
+Likewise, *--shareable* is an alias for *--mode shareable*.
+
+
+attach-interface
+----------------
+
+.. code-block:: shell
+
+   attach-interface domain type source [[[--live]
+      [--config] | [--current]] | [--persistent]]
+      [--target target] [--mac mac] [--script script] [--model model]
+      [--inbound average,peak,burst,floor] [--outbound average,peak,burst]
+      [--alias alias] [--managed] [--print-xml]
+
+Attach a new network interface to the domain.
+
+``type`` can be one of the:
+
+*network* to indicate connection via a libvirt virtual network,
+
+*bridge* to indicate connection via a bridge device on the host,
+
+*direct* to indicate connection directly to one of the host's network
+interfaces or bridges,
+
+*hostdev* to indicate connection using a passthrough of PCI device
+on the host.
+
+``source`` indicates the source of the connection.  The source depends
+on the type of the interface:
+
+*network* name of the virtual network,
+
+*bridge* the name of the bridge device,
+
+*direct* the name of the host's interface or bridge,
+
+*hostdev* the PCI address of the host's interface formatted
+as domain:bus:slot.function.
+
+``--target`` is used to specify the tap/macvtap device to be used to
+connect the domain to the source.  Names starting with 'vnet' are
+considered as auto-generated and are blanked out/regenerated each
+time the interface is attached.
+
+``--mac`` specifies the MAC address of the network interface; if a MAC
+address is not given, a new address will be automatically generated
+(and stored in the persistent configuration if "--config" is given on
+the command line).
+
+``--script`` is used to specify a path to a custom script to be called
+while attaching to a bridge - this will be called instead of the default
+script not in addition to it.  This is valid only for interfaces of
+*bridge* type and only for Xen domains.
+
+``--model`` specifies the network device model to be presented to the
+domain.
+
+``alias`` can set user supplied alias.
+
+``--inbound`` and ``--outbound`` control the bandwidth of the
+interface.  At least one from the *average*, *floor* pair must be
+specified.  The other two *peak* and *burst* are optional, so
+"average,peak", "average,,burst", "average,,,floor", "average" and
+",,,floor" are also legal.  Values for *average*, *floor* and *peak*
+are expressed in kilobytes per second, while *burst* is expressed in
+kilobytes in a single burst at *peak* speed as described in the
+Network XML documentation at
+`https://libvirt.org/formatnetwork.html#elementQoS <https://libvirt.org/formatnetwork.html#elementQoS>`_.
+
+``--managed`` is usable only for *hostdev* type and tells libvirt
+that the interface should be managed, which means detached and reattached
+from/to the host by libvirt.
+
+If ``--print-xml`` is specified, then the XML of the interface that would be
+attached is printed instead.
+
+If ``--live`` is specified, affect a running domain.
+If ``--config`` is specified, affect the next startup of a persistent domain.
+If ``--current`` is specified, affect the current domain state.
+Both ``--live`` and ``--config`` flags may be given, but ``--current`` is
+exclusive.  When no flag is specified legacy API is used whose behavior
+depends on the hypervisor driver.
+
+For compatibility purposes, ``--persistent`` behaves like ``--config`` for
+an offline domain, and like ``--live`` ``--config`` for a running domain.
+
+``Note``: the optional target value is the name of a device to be created
+as the back-end on the node.  If not provided a device named "vnetN" or "vifN"
+will be created automatically.
+
+
+detach-device
+-------------
+
+.. code-block:: shell
+
+   detach-device domain FILE [[[--live] [--config] |
+      [--current]] | [--persistent]]
+
+Detach a device from the domain, takes the same kind of XML descriptions
+as command ``attach-device``.
+For passthrough host devices, see also ``nodedev-reattach``, needed if
+the device does not use managed mode.
+
+``Note``: The supplied XML description of the device should be as specific
+as its definition in the domain XML. The set of attributes used
+to match the device are internal to the drivers. Using a partial definition,
+or attempting to detach a device that is not present in the domain XML,
+but shares some specific attributes with one that is present,
+may lead to unexpected results.
+
+``Quirk``: Device unplug is asynchronous in most cases and requires guest
+cooperation. This means that it's up to the discretion of the guest to disallow
+or delay the unplug arbitrarily. As the libvirt API used in this command was
+designed as synchronous it returns success after some timeout even if the device
+was not unplugged yet to allow further interactions with the domain e.g. if the
+guest is unresponsive. Callers which need to make sure that the
+device was unplugged can use libvirt events (see virsh event) to be notified
+when the device is removed. Note that the event may arrive before the command
+returns.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. When no flag is specified legacy API is used whose behavior depends
+on the hypervisor driver.
+
+For compatibility purposes, *--persistent* behaves like *--config* for
+an offline domain, and like *--live* *--config* for a running domain.
+
+Note that older versions of virsh used *--config* as an alias for
+*--persistent*.
+
+
+detach-device-alias
+-------------------
+
+.. code-block:: shell
+
+   detach-device-alias domain alias [[[--live] [--config] | [--current]]]]
+
+Detach a device with given *alias* from the *domain*. This command returns
+successfully after the unplug request was sent to the hypervisor. The actual
+removal of the device is notified asynchronously via libvirt events
+(see virsh event).
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive.
+
+
+detach-disk
+-----------
+
+.. code-block:: shell
+
+   detach-disk domain target [[[--live] [--config] |
+      [--current]] | [--persistent]] [--print-xml]
+
+Detach a disk device from a domain. The *target* is the device as seen
+from the domain.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. When no flag is specified legacy API is used whose behavior depends
+on the hypervisor driver.
+
+For compatibility purposes, *--persistent* behaves like *--config* for
+an offline domain, and like *--live* *--config* for a running domain.
+
+Note that older versions of virsh used *--config* as an alias for
+*--persistent*.
+
+If ``--print-xml`` is specified, then the XML which would be used to detach the
+disk is printed instead.
+
+Please see documentation for ``detach-device`` for known quirks.
+
+
+
+detach-interface
+----------------
+
+.. code-block:: shell
+
+   detach-interface domain type [--mac mac]
+      [[[--live] [--config] | [--current]] | [--persistent]]
+
+Detach a network interface from a domain.
+*type* can be either *network* to indicate a physical network device or
+*bridge* to indicate a bridge to a device. It is recommended to use the
+*mac* option to distinguish between the interfaces if more than one are
+present on the domain.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. When no flag is specified legacy API is used whose behavior depends
+on the hypervisor driver.
+
+For compatibility purposes, *--persistent* behaves like *--config* for
+an offline domain, and like *--live* *--config* for a running domain.
+
+Note that older versions of virsh used *--config* as an alias for
+*--persistent*.
+
+Please see documentation for ``detach-device`` for known quirks.
+
+
+update-device
+-------------
+
+.. code-block:: shell
+
+   update-device domain file [--force] [[[--live]
+      [--config] | [--current]] | [--persistent]]
+
+Update the characteristics of a device associated with *domain*,
+based on the device definition in an XML *file*.  The *--force* option
+can be used to force device update, e.g., to eject a CD-ROM even if it is
+locked/mounted in the domain. See the documentation at
+`https://libvirt.org/formatdomain.html#elementsDevices <https://libvirt.org/formatdomain.html#elementsDevices>`_ to learn about
+libvirt XML format for a device.
+
+If *--live* is specified, affect a running domain.
+If *--config* is specified, affect the next startup of a persistent domain.
+If *--current* is specified, affect the current domain state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. Not specifying any flag is the same as specifying *--current*.
+
+For compatibility purposes, *--persistent* behaves like *--config* for
+an offline domain, and like *--live* *--config* for a running domain.
+
+Note that older versions of virsh used *--config* as an alias for
+*--persistent*.
+
+``Note``: using of partial device definition XML files may lead to unexpected
+results as some fields may be autogenerated and thus match devices other than
+expected.
+
+
+change-media
+------------
+
+.. code-block:: shell
+
+   change-media domain path [--eject] [--insert]
+      [--update] [source] [--force] [[--live] [--config] |
+      [--current]] [--print-xml] [--block]
+
+Change media of CDROM or floppy drive. *path* can be the fully-qualified path
+or the unique target name (<target dev='hdc'>) of the disk device. *source*
+specifies the path of the media to be inserted or updated. The *--block* flag
+allows setting the backing type in case a block device is used as media for the
+CDROM or floppy drive instead of a file.
+
+*--eject* indicates the media will be ejected.
+*--insert* indicates the media will be inserted. *source* must be specified.
+If the device has source (e.g. <source file='media'>), and *source* is not
+specified, *--update* is equal to *--eject*. If the device has no source,
+and *source* is specified, *--update* is equal to *--insert*. If the device
+has source, and *source* is specified, *--update* behaves like combination
+of *--eject* and *--insert*.
+If none of *--eject*, *--insert*, and *--update* is specified, *--update*
+is used by default.
+The *--force* option can be used to force media changing.
+If *--live* is specified, alter live configuration of running guest.
+If *--config* is specified, alter persistent configuration, effect observed
+on next boot.
+*--current* can be either or both of *live* and *config*, depends on
+the hypervisor's implementation.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. If no flag is specified, behavior is different depending
+on hypervisor.
+If *--print-xml* is specified, the XML that would be used to change media is
+printed instead of changing the media.
+
+
+NODEDEV COMMANDS
+================
+
+The following commands manipulate host devices that are intended to be
+passed through to guest domains via <hostdev> elements in a domain's
+<devices> section.  A node device key is generally specified by the bus
+name followed by its address, using underscores between all components,
+such as pci_0000_00_02_1, usb_1_5_3, or net_eth1_00_27_13_6a_fe_00.
+The ``nodedev-list`` gives the full list of host devices that are known
+to libvirt, although this includes devices that cannot be assigned to
+a guest (for example, attempting to detach the PCI device that controls
+the host's hard disk controller where the guest's disk images live could
+cause the host system to lock up or reboot).
+
+For more information on node device definition see:
+`https://libvirt.org/formatnode.html <https://libvirt.org/formatnode.html>`_.
+
+Passthrough devices cannot be simultaneously used by the host and its
+guest domains, nor by multiple active guests at once.  If the
+<hostdev> description of a PCI device includes the attribute ``managed='yes'``,
+and the hypervisor driver supports it, then the device is in managed mode, and
+attempts to use that passthrough device in an active guest will
+automatically behave as if ``nodedev-detach`` (guest start, device
+hot-plug) and ``nodedev-reattach`` (guest stop, device hot-unplug) were
+called at the right points.  If a PCI device is not marked as managed,
+then it must manually be detached before guests can use it, and manually
+reattached to be returned to the host.  Also, if a device is manually detached,
+then the host does not regain control of the device without a matching
+reattach, even if the guests use the device in managed mode.
+
+
+nodedev-create
+--------------
+
+.. code-block:: shell
+
+   nodedev-create FILE
+
+Create a device on the host node that can then be assigned to virtual
+machines. Normally, libvirt is able to automatically determine which
+host nodes are available for use, but this allows registration of
+host hardware that libvirt did not automatically detect.  *file*
+contains xml for a top-level <device> description of a node device.
+
+
+nodedev-destroy
+---------------
+
+.. code-block:: shell
+
+   nodedev-destroy device
+
+Destroy (stop) a device on the host. *device* can be either device
+name or wwn pair in "wwnn,wwpn" format (only works for vHBA currently).
+Note that this makes libvirt quit managing a host device, and may even
+make that device unusable by the rest of the physical host until a reboot.
+
+
+nodedev-detach
+--------------
+
+.. code-block:: shell
+
+   nodedev-detach nodedev [--driver backend_driver]
+
+Detach *nodedev* from the host, so that it can safely be used by
+guests via <hostdev> passthrough.  This is reversed with
+``nodedev-reattach``, and is done automatically for managed devices.
+
+Different backend drivers expect the device to be bound to different
+dummy devices. For example, QEMU's "kvm" backend driver (the default)
+expects the device to be bound to pci-stub, but its "vfio" backend
+driver expects the device to be bound to vfio-pci. The *--driver*
+parameter can be used to specify the desired backend driver.
+
+
+nodedev-dumpxml
+---------------
+
+.. code-block:: shell
+
+   nodedev-dumpxml device
+
+Dump a <device> XML representation for the given node device, including
+such information as the device name, which bus owns the device, the
+vendor and product id, and any capabilities of the device usable by
+libvirt (such as whether device reset is supported). *device* can
+be either device name or wwn pair in "wwnn,wwpn" format (only works
+for HBA).
+
+
+nodedev-list
+------------
+
+.. code-block:: shell
+
+   nodedev-list cap --tree
+
+List all of the devices available on the node that are known by libvirt.
+*cap* is used to filter the list by capability types, the types must be
+separated by comma, e.g. --cap pci,scsi. Valid capability types include
+'system', 'pci', 'usb_device', 'usb', 'net', 'scsi_host', 'scsi_target',
+'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic', 'drm', 'mdev',
+'mdev_types', 'ccw'.
+If *--tree* is used, the output is formatted in a tree representing parents of each
+node.  *cap* and *--tree* are mutually exclusive.
+
+
+nodedev-reattach
+----------------
+
+.. code-block:: shell
+
+   nodedev-reattach nodedev
+
+Declare that *nodedev* is no longer in use by any guests, and that
+the host can resume normal use of the device.  This is done
+automatically for PCI devices in managed mode and USB devices, but
+must be done explicitly to match any explicit ``nodedev-detach``.
+
+
+nodedev-reset
+-------------
+
+.. code-block:: shell
+
+   nodedev-reset nodedev
+
+Trigger a device reset for *nodedev*, useful prior to transferring
+a node device between guest passthrough or the host.  Libvirt will
+often do this action implicitly when required, but this command
+allows an explicit reset when needed.
+
+
+nodedev-event
+-------------
+
+.. code-block:: shell
+
+   nodedev-event {[nodedev] event [--loop] [--timeout seconds] [--timestamp] | --list}
+
+Wait for a class of node device events to occur, and print appropriate
+details of events as they happen.  The events can optionally be filtered
+by *nodedev*.  Using *--list* as the only argument will provide a list
+of possible *event* values known by this client, although the connection
+might not allow registering for all these events.
+
+By default, this command is one-shot, and returns success once an event
+occurs; you can send SIGINT (usually via ``Ctrl-C``) to quit immediately.
+If *--timeout* is specified, the command gives up waiting for events
+after *seconds* have elapsed.   With *--loop*, the command prints all
+events until a timeout or interrupt key.
+
+When *--timestamp* is used, a human-readable timestamp will be printed
+before the event.
+
+
+VIRTUAL NETWORK COMMANDS
+========================
+
+The following commands manipulate networks. Libvirt has the capability to
+define virtual networks which can then be used by domains and linked to
+actual network devices. For more detailed information about this feature
+see the documentation at `https://libvirt.org/formatnetwork.html <https://libvirt.org/formatnetwork.html>`_ . Many
+of the commands for virtual networks are similar to the ones used for domains,
+but the way to name a virtual network is either by its name or UUID.
+
+
+net-autostart
+-------------
+
+.. code-block:: shell
+
+   net-autostart network [--disable]
+
+Configure a virtual network to be automatically started at boot.
+The *--disable* option disable autostarting.
+
+
+net-create
+----------
+
+.. code-block:: shell
+
+   net-create file
+
+Create a transient (temporary) virtual network from an
+XML *file* and instantiate (start) the network.
+See the documentation at `https://libvirt.org/formatnetwork.html <https://libvirt.org/formatnetwork.html>`_
+to get a description of the XML network format used by libvirt.
+
+
+net-define
+----------
+
+.. code-block:: shell
+
+   net-define file
+
+Define an inactive persistent virtual network or modify an existing persistent
+one from the XML *file*.
+
+
+net-destroy
+-----------
+
+.. code-block:: shell
+
+   net-destroy network
+
+Destroy (stop) a given transient or persistent virtual network
+specified by its name or UUID. This takes effect immediately.
+
+
+net-dumpxml
+-----------
+
+.. code-block:: shell
+
+   net-dumpxml network [--inactive]
+
+
+Output the virtual network information as an XML dump to stdout.
+If *--inactive* is specified, then physical functions are not
+expanded into their associated virtual functions.
+
+
+net-edit
+--------
+
+.. code-block:: shell
+
+   net-edit network
+
+Edit the XML configuration file for a network.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh net-dumpxml --inactive network > network.xml
+   vi network.xml (or make changes with your other text editor)
+   virsh net-define network.xml
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+net-event
+---------
+
+.. code-block:: shell
+
+   net-event {[network] event [--loop] [--timeout seconds] [--timestamp] | --list}
+
+Wait for a class of network events to occur, and print appropriate details
+of events as they happen.  The events can optionally be filtered by
+*network*.  Using *--list* as the only argument will provide a list
+of possible *event* values known by this client, although the connection
+might not allow registering for all these events.
+
+By default, this command is one-shot, and returns success once an event
+occurs; you can send SIGINT (usually via ``Ctrl-C``) to quit immediately.
+If *--timeout* is specified, the command gives up waiting for events
+after *seconds* have elapsed.   With *--loop*, the command prints all
+events until a timeout or interrupt key.
+
+When *--timestamp* is used, a human-readable timestamp will be printed
+before the event.
+
+
+net-info
+--------
+
+.. code-block:: shell
+
+   net-info network
+
+Returns basic information about the *network* object.
+
+
+net-list
+--------
+
+.. code-block:: shell
+
+   net-list [--inactive | --all]
+      { [--table] | --name | --uuid }
+      [--persistent] [<--transient>]
+      [--autostart] [<--no-autostart>]
+
+Returns the list of active networks, if *--all* is specified this will also
+include defined but inactive networks, if *--inactive* is specified only the
+inactive ones will be listed. You may also want to filter the returned networks
+by *--persistent* to list the persistent ones, *--transient* to list the
+transient ones, *--autostart* to list the ones with autostart enabled, and
+*--no-autostart* to list the ones with autostart disabled.
+
+If *--name* is specified, network names are printed instead of the table
+formatted one per line. If *--uuid* is specified network's UUID's are printed
+instead of names. Flag *--table* specifies that the legacy table-formatted
+output should be used. This is the default. All of these are mutually
+exclusive.
+
+NOTE: When talking to older servers, this command is forced to use a series of
+API calls with an inherent race, where a pool might not be listed or might appear
+more than once if it changed state between calls while the list was being
+collected.  Newer servers do not have this problem.
+
+
+net-name
+--------
+
+.. code-block:: shell
+
+   net-name network-UUID
+
+Convert a network UUID to network name.
+
+
+net-start
+---------
+
+.. code-block:: shell
+
+   net-start network
+
+Start a (previously defined) inactive network.
+
+
+net-undefine
+------------
+
+.. code-block:: shell
+
+   net-undefine network
+
+Undefine the configuration for a persistent network. If the network is active,
+make it transient.
+
+
+net-uuid
+--------
+
+.. code-block:: shell
+
+   net-uuid network-name
+
+Convert a network name to network UUID.
+
+
+net-update
+----------
+
+.. code-block:: shell
+
+   net-update network command section xml
+      [--parent-index index] [[--live] [--config] | [--current]]
+
+Update the given section of an existing network definition, with the
+changes optionally taking effect immediately, without needing to
+destroy and re-start the network.
+
+*command* is one of "add-first", "add-last", "add" (a synonym for
+add-last), "delete", or "modify".
+
+*section* is one of "bridge", "domain", "ip", "ip-dhcp-host",
+"ip-dhcp-range", "forward", "forward-interface", "forward-pf",
+"portgroup", "dns-host", "dns-txt", or "dns-srv", each section being
+named by a concatenation of the xml element hierarchy leading to the
+element being changed. For example, "ip-dhcp-host" will change a
+<host> element that is contained inside a <dhcp> element inside an
+<ip> element of the network.
+
+*xml* is either the text of a complete xml element of the type being
+changed (e.g. "<host mac="00:11:22:33:44:55' ip='1.2.3.4'/>", or the
+name of a file that contains a complete xml element. Disambiguation is
+done by looking at the first character of the provided text - if the
+first character is "<", it is xml text, if the first character is not
+"<", it is the name of a file that contains the xml text to be used.
+
+The *--parent-index* option is used to specify which of several
+parent elements the requested element is in (0-based). For example, a
+dhcp <host> element could be in any one of multiple <ip> elements in
+the network; if a parent-index isn't provided, the "most appropriate"
+<ip> element will be selected (usually the only one that already has a
+<dhcp> element), but if *--parent-index* is given, that particular
+instance of <ip> will get the modification.
+
+If *--live* is specified, affect a running network.
+If *--config* is specified, affect the next startup of a persistent network.
+If *--current* is specified, affect the current network state.
+Both *--live* and *--config* flags may be given, but *--current* is
+exclusive. Not specifying any flag is the same as specifying *--current*.
+
+
+net-dhcp-leases
+---------------
+
+.. code-block:: shell
+
+   net-dhcp-leases network [mac]
+
+Get a list of dhcp leases for all network interfaces connected to the given
+virtual *network* or limited output just for one interface if *mac* is
+specified.
+
+
+NETWORK PORT COMMANDS
+=====================
+
+The following commands manipulate network ports. Libvirt virtual networks
+have ports created when a virtual machine has a virtual network interface
+added. In general there should be no need to use any of the commands
+here, since the hypervisor drivers run these commands are the right
+point in a virtual machine's lifecycle. They can be useful for debugging
+problems and / or recovering from bugs / stale state.
+
+
+net-port-list
+-------------
+
+.. code-block:: shell
+
+   net-port-list { [--table] | --uuid } network
+
+List all network ports recorded against the network.
+
+If *--uuid* is specified network ports' UUID's are printed
+instead of a table. Flag *--table* specifies that the legacy
+table-formatted output should be used. This is the default.
+All of these are mutually exclusive.
+
+
+net-port-create
+---------------
+
+.. code-block:: shell
+
+   net-port-create network file
+
+Allocate a new network port reserving resources based on the
+port description.
+
+
+net-port-dumpxml
+----------------
+
+.. code-block:: shell
+
+   net-port-dumpxml network port
+
+Output the network port information as an XML dump to stdout.
+
+
+net-port-delete
+---------------
+
+.. code-block:: shell
+
+   net-port-delete network port
+
+Delete record of the network port and release its resources
+
+
+INTERFACE COMMANDS
+==================
+
+The following commands manipulate host interfaces.  Often, these host
+interfaces can then be used by name within domain <interface> elements
+(such as a system-created bridge interface), but there is no
+requirement that host interfaces be tied to any particular guest
+configuration XML at all.
+
+Many of the commands for host interfaces are similar to the ones used
+for domains, and the way to name an interface is either by its name or
+its MAC address.  However, using a MAC address for an *iface*
+argument only works when that address is unique (if an interface and a
+bridge share the same MAC address, which is often the case, then using
+that MAC address results in an error due to ambiguity, and you must
+resort to a name instead).
+
+iface-bridge
+------------
+
+.. code-block:: shell
+
+   iface-bridge interface bridge [--no-stp] [delay] [--no-start]
+
+Create a bridge device named *bridge*, and attach the existing
+network device *interface* to the new bridge.  The new bridge
+defaults to starting immediately, with STP enabled and a delay of 0;
+these settings can be altered with *--no-stp*, *--no-start*, and an
+integer number of seconds for *delay*. All IP address configuration
+of *interface* will be moved to the new bridge device.
+
+See also ``iface-unbridge`` for undoing this operation.
+
+
+iface-define
+------------
+
+.. code-block:: shell
+
+   iface-define file
+
+Define an inactive persistent physical host interface or modify an existing
+persistent one from the XML *file*.
+
+
+iface-destroy
+-------------
+
+.. code-block:: shell
+
+   iface-destroy interface
+
+Destroy (stop) a given host interface, such as by running "if-down" to
+disable that interface from active use. This takes effect immediately.
+
+
+iface-dumpxml
+-------------
+
+.. code-block:: shell
+
+   iface-dumpxml interface [--inactive]
+
+Output the host interface information as an XML dump to stdout.  If
+*--inactive* is specified, then the output reflects the persistent
+state of the interface that will be used the next time it is started.
+
+
+iface-edit
+----------
+
+.. code-block:: shell
+
+   iface-edit interface
+
+Edit the XML configuration file for a host interface.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh iface-dumpxml iface > iface.xml
+   vi iface.xml (or make changes with your other text editor)
+   virsh iface-define iface.xml
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+iface-list
+----------
+
+.. code-block:: shell
+
+   iface-list [--inactive | --all]
+
+Returns the list of active host interfaces.  If *--all* is specified
+this will also include defined but inactive interfaces.  If
+*--inactive* is specified only the inactive ones will be listed.
+
+
+iface-name
+----------
+
+.. code-block:: shell
+
+   iface-name interface
+
+Convert a host interface MAC to interface name, if the MAC address is unique
+among the host's interfaces.
+
+*interface* specifies the interface MAC address.
+
+
+iface-mac
+---------
+
+.. code-block:: shell
+
+   iface-mac interface
+
+Convert a host interface name to MAC address.
+
+*interface* specifies the interface name.
+
+
+iface-start
+-----------
+
+.. code-block:: shell
+
+   iface-start interface
+
+Start a (previously defined) host interface, such as by running "if-up".
+
+
+iface-unbridge
+--------------
+
+.. code-block:: shell
+
+   iface-unbridge bridge [--no-start]
+
+Tear down a bridge device named *bridge*, releasing its underlying
+interface back to normal usage, and moving all IP address
+configuration from the bridge device to the underlying device.  The
+underlying interface is restarted unless *--no-start* is present;
+this flag is present for symmetry, but generally not recommended.
+
+See also ``iface-bridge`` for creating a bridge.
+
+
+iface-undefine
+--------------
+
+.. code-block:: shell
+
+   iface-undefine interface
+
+Undefine the configuration for an inactive host interface.
+
+
+iface-begin
+-----------
+
+.. code-block:: shell
+
+   iface-begin
+
+Create a snapshot of current host interface settings, which can later
+be committed (*iface-commit*) or restored (*iface-rollback*).  If a
+snapshot already exists, then this command will fail until the
+previous snapshot has been committed or restored.  Undefined behavior
+results if any external changes are made to host interfaces outside of
+the libvirt API between the beginning of a snapshot and its eventual
+commit or rollback.
+
+
+iface-commit
+------------
+
+.. code-block:: shell
+
+   iface-commit
+
+Declare all changes since the last *iface-begin* as working, and
+delete the rollback point.  If no interface snapshot has already been
+started, then this command will fail.
+
+
+iface-rollback
+--------------
+
+.. code-block:: shell
+
+   iface-rollback
+
+Revert all host interface settings back to the state recorded in the
+last *iface-begin*.  If no interface snapshot has already been
+started, then this command will fail.  Rebooting the host also serves
+as an implicit rollback point.
+
+
+STORAGE POOL COMMANDS
+=====================
+
+The following commands manipulate storage pools. Libvirt has the
+capability to manage various storage solutions, including files, raw
+partitions, and domain-specific formats, used to provide the storage
+volumes visible as devices within virtual machines. For more detailed
+information about this feature, see the documentation at
+`https://libvirt.org/formatstorage.html <https://libvirt.org/formatstorage.html>`_ . Many of the commands for
+pools are similar to the ones used for domains.
+
+find-storage-pool-sources
+-------------------------
+
+.. code-block:: shell
+
+   find-storage-pool-sources type [srcSpec]
+
+Returns XML describing all possible available storage pool sources that
+could be used to create or define a storage pool of a given *type*. If
+*srcSpec* is provided, it is a file that contains XML to further restrict
+the query for pools.
+
+Not all storage pools support discovery in this manner. Furthermore, for
+those that do support discovery, only specific XML elements are required
+in order to return valid data, while other elements and even attributes
+of some elements are ignored since they are not necessary to find the pool
+based on the search criteria. The following lists the supported *type*
+options and the expected minimal XML elements used to perform the search.
+
+For a "netfs" or "gluster" pool, the minimal expected XML required is the
+<host> element with a "name" attribute describing the IP address or hostname
+to be used to find the pool. The "port" attribute will be ignored as will
+any other provided XML elements in *srcSpec*.
+
+For a "logical" pool, the contents of the *srcSpec* file are ignored,
+although if provided the file must at least exist.
+
+For an "iscsi" pool, the minimal expect XML required is the <host> element
+with a "name" attribute describing the IP address or hostname to be used to
+find the pool (the iSCSI server address). Optionally, the "port" attribute
+may be provided, although it will default to 3260. Optionally, an <initiator>
+XML element with a "name" attribute may be provided to further restrict the
+iSCSI target search to a specific initiator for multi-iqn iSCSI storage pools.
+
+
+find-pool-sources-as
+--------------------
+
+.. code-block:: shell
+
+   find-storage-pool-sources-as type [host] [port] [initiator]
+
+Rather than providing *srcSpec* XML file for ``find-storage-pool-sources``
+use this command option in order to have virsh generate the query XML file
+using the optional arguments. The command will return the same output
+XML as ``find-storage-pool-sources``.
+
+Use *host* to describe a specific host to use for networked storage, such
+as netfs, gluster, and iscsi *type* pools.
+
+Use *port* to further restrict which networked port to utilize for the
+connection if required by the specific storage backend, such as iscsi.
+
+Use *initiator* to further restrict the iscsi *type* pool searches to
+specific target initiators.
+
+
+pool-autostart
+--------------
+
+.. code-block:: shell
+
+   pool-autostart pool-or-uuid [--disable]
+
+Configure whether *pool* should automatically start at boot.
+
+
+pool-build
+----------
+
+.. code-block:: shell
+
+   pool-build pool-or-uuid [--overwrite] [--no-overwrite]
+
+Build a given pool.
+
+Options *--overwrite* and *--no-overwrite* can only be used for
+``pool-build`` a filesystem, disk, or logical pool.
+
+For a file system pool if neither flag is specified, then ``pool-build``
+just makes the target path directory and no attempt to run mkfs on the
+target volume device. If *--no-overwrite* is specified, it probes to
+determine if a filesystem already exists on the target device, returning
+an error if one exists or using mkfs to format the target device if not.
+If *--overwrite* is specified, mkfs is always executed and any existing
+data on the target device is overwritten unconditionally.
+
+For a disk pool, if neither of them is specified or *--no-overwrite*
+is specified, ``pool-build`` will check the target volume device for
+existing filesystems or partitions before attempting to write a new
+label on the target volume device. If the target volume device already
+has a label, the command will fail. If *--overwrite* is specified,
+then no check will be made on the target volume device prior to writing
+a new label. Writing of the label uses the pool source format type
+or "dos" if not specified.
+
+For a logical pool, if neither of them is specified or *--no-overwrite*
+is specified, ``pool-build`` will check the target volume devices for
+existing filesystems or partitions before attempting to initialize
+and format each device for usage by the logical pool. If any target
+volume device already has a label, the command will fail. If
+*--overwrite* is specified, then no check will be made on the target
+volume devices prior to initializing and formatting each device. Once
+all the target volume devices are properly formatted via pvcreate,
+the volume group will be created using all the devices.
+
+
+pool-create
+-----------
+
+.. code-block:: shell
+
+   pool-create file [--build] [[--overwrite] | [--no-overwrite]]
+
+Create and start a pool object from the XML *file*.
+
+[*--build*] [[*--overwrite*] | [*--no-overwrite*]] perform a
+``pool-build`` after creation in order to remove the need for a
+follow-up command to build the pool. The *--overwrite* and
+*--no-overwrite* flags follow the same rules as ``pool-build``. If
+just *--build* is provided, then ``pool-build`` is called with no flags.
+
+
+pool-create-as
+--------------
+
+.. code-block:: shell
+
+   pool-create-as name type
+      [--source-host hostname] [--source-path path] [--source-dev path]
+      [--source-name name] [--target path] [--source-format format]
+      [--auth-type authtype --auth-username username
+      [--secret-usage usage | --secret-uuid uuid]]
+      [--source-protocol-ver ver]
+      [[--adapter-name name] | [--adapter-wwnn wwnn --adapter-wwpn wwpn]
+      [--adapter-parent parent |
+      --adapter-parent-wwnn parent_wwnn adapter-parent-wwpn parent_wwpn |
+      --adapter-parent-fabric-wwn parent_fabric_wwn]]
+      [--build] [[--overwrite] | [--no-overwrite]] [--print-xml]
+
+Create and start a pool object *name* from the raw parameters.  If
+*--print-xml* is specified, then print the XML of the pool object
+without creating the pool.  Otherwise, the pool has the specified
+*type*. When using ``pool-create-as`` for a pool of *type* "disk",
+the existing partitions found on the *--source-dev path* will be used
+to populate the disk pool. Therefore, it is suggested to use
+``pool-define-as`` and ``pool-build`` with the *--overwrite* in order
+to properly initialize the disk pool.
+
+[*--source-host hostname*] provides the source hostname for pools backed
+by storage from a remote server (pool types netfs, iscsi, rbd, sheepdog,
+gluster).
+
+[*--source-path path*] provides the source directory path for pools backed
+by directories (pool type dir).
+
+[*--source-dev path*] provides the source path for pools backed by physical
+devices (pool types fs, logical, disk, iscsi, zfs).
+
+[*--source-name name*] provides the source name for pools backed by storage
+from a named element (pool types logical, rbd, sheepdog, gluster).
+
+[*--target path*] is the path for the mapping of the storage pool into
+the host file system.
+
+[*--source-format format*] provides information about the format of the
+pool (pool types fs, netfs, disk, logical).
+
+[*--auth-type authtype* *--auth-username username*
+[*--secret-usage usage* | *--secret-uuid uuid*]]
+provides the elements required to generate authentication credentials for
+the storage pool. The *authtype* is either chap for iscsi *type* pools or
+ceph for rbd *type* pools. Either the secret *usage* or *uuid* value may
+be provided, but not both.
+
+[*--source-protocol-ver ver*] provides the NFS protocol version number used
+to contact the server's NFS service via nfs mount option 'nfsvers=n'. It is
+expect the *ver* value is an unsigned integer.
+
+[*--adapter-name name*] defines the scsi_hostN adapter name to be used for
+the scsi_host adapter type pool.
+
+[*--adapter-wwnn wwnn* *--adapter-wwpn wwpn* [*--adapter-parent parent* |
+*--adapter-parent-wwnn parent_wwnn* *adapter-parent-wwpn parent_wwpn* |
+*--adapter-parent-fabric-wwn parent_fabric_wwn*]]
+defines the wwnn and wwpn to be used for the fc_host adapter type pool.
+Optionally provide the parent scsi_hostN node device to be used for the
+vHBA either by parent name, parent_wwnn and parent_wwpn, or parent_fabric_wwn.
+The parent name could change between reboots if the hardware environment
+changes, so providing the parent_wwnn and parent_wwpn ensure usage of the
+same physical HBA even if the scsi_hostN node device changes. Usage of the
+parent_fabric_wwn allows a bit more flexibility to choose an HBA on the
+same storage fabric in order to define the pool.
+
+[*--build*] [[*--overwrite*] | [*--no-overwrite*]] perform a
+``pool-build`` after creation in order to remove the need for a
+follow-up command to build the pool. The *--overwrite* and
+*--no-overwrite* flags follow the same rules as ``pool-build``. If
+just *--build* is provided, then ``pool-build`` is called with no flags.
+
+For a "logical" pool only [*--name*] needs to be provided. The
+[*--source-name*] if provided must match the Volume Group name.
+If not provided, one will be generated using the [*--name*]. If
+provided the [*--target*] is ignored and a target source is generated
+using the [*--source-name*] (or as generated from the [*--name*]).
+
+
+pool-define
+-----------
+
+.. code-block:: shell
+
+   pool-define file
+
+Define an inactive persistent storage pool or modify an existing persistent one
+from the XML *file*.
+
+
+pool-define-as
+--------------
+
+.. code-block:: shell
+
+   pool-define-as name type
+      [--source-host hostname] [--source-path path] [--source-dev path]
+      [*--source-name name*] [*--target path*] [*--source-format format*]
+      [*--auth-type authtype* *--auth-username username*
+      [*--secret-usage usage* | *--secret-uuid uuid*]]
+      [*--source-protocol-ver ver*]
+      [[*--adapter-name name*] | [*--adapter-wwnn* *--adapter-wwpn*]
+      [*--adapter-parent parent*]] [*--print-xml*]
+
+Create, but do not start, a pool object *name* from the raw parameters.  If
+*--print-xml* is specified, then print the XML of the pool object
+without defining the pool.  Otherwise, the pool has the specified
+*type*.
+
+Use the same arguments as ``pool-create-as``, except for the *--build*,
+*--overwrite*, and *--no-overwrite* options.
+
+
+pool-destroy
+------------
+
+.. code-block:: shell
+
+   pool-destroy pool-or-uuid
+
+Destroy (stop) a given *pool* object. Libvirt will no longer manage the
+storage described by the pool object, but the raw data contained in
+the pool is not changed, and can be later recovered with
+``pool-create``.
+
+
+pool-delete
+-----------
+
+.. code-block:: shell
+
+   pool-delete pool-or-uuid
+
+Destroy the resources used by a given *pool* object. This operation
+is non-recoverable.  The *pool* object will still exist after this
+command, ready for the creation of new storage volumes.
+
+
+pool-dumpxml
+------------
+
+.. code-block:: shell
+
+   pool-dumpxml [--inactive] pool-or-uuid
+
+Returns the XML information about the *pool* object.
+*--inactive* tells virsh to dump pool configuration that will be used
+on next start of the pool as opposed to the current pool configuration.
+
+
+pool-edit
+---------
+
+.. code-block:: shell
+
+   pool-edit pool-or-uuid
+
+Edit the XML configuration file for a storage pool.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh pool-dumpxml pool > pool.xml
+   vi pool.xml (or make changes with your other text editor)
+   virsh pool-define pool.xml
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+pool-info
+---------
+
+.. code-block:: shell
+
+   pool-info [--bytes] pool-or-uuid
+
+Returns basic information about the *pool* object. If *--bytes* is specified the sizes
+of basic info are not converted to human friendly units.
+
+
+pool-list
+---------
+
+.. code-block:: shell
+
+   pool-list [--inactive] [--all]
+      [--persistent] [--transient]
+      [--autostart] [--no-autostart]
+      [[--details] [--uuid]
+      [--name] [<type>]
+
+List pool objects known to libvirt.  By default, only active pools
+are listed; *--inactive* lists just the inactive pools, and *--all*
+lists all pools.
+
+In addition, there are several sets of filtering flags. *--persistent* is to
+list the persistent pools, *--transient* is to list the transient pools.
+*--autostart* lists the autostarting pools, *--no-autostart* lists the pools
+with autostarting disabled. If *--uuid* is specified only pool's UUIDs are printed.
+If *--name* is specified only pool's names are printed. If both *--name*
+and *--uuid* are specified, pool's UUID and names are printed side by side
+without any header. Option *--details* is mutually exclusive with options
+*--uuid* and *--name*.
+
+You may also want to list pools with specified types using *type*, the
+pool types must be separated by comma, e.g. --type dir,disk. The valid pool
+types include 'dir', 'fs', 'netfs', 'logical', 'disk', 'iscsi', 'scsi',
+'mpath', 'rbd', 'sheepdog', 'gluster', 'zfs', 'vstorage' and 'iscsi-direct'.
+
+The *--details* option instructs virsh to additionally
+display pool persistence and capacity related information where available.
+
+NOTE: When talking to older servers, this command is forced to use a series of
+API calls with an inherent race, where a pool might not be listed or might appear
+more than once if it changed state between calls while the list was being
+collected.  Newer servers do not have this problem.
+
+
+pool-name
+---------
+
+.. code-block:: shell
+
+   pool-name uuid
+
+Convert the *uuid* to a pool name.
+
+
+pool-refresh
+------------
+
+.. code-block:: shell
+
+   pool-refresh pool-or-uuid
+
+Refresh the list of volumes contained in *pool*.
+
+
+pool-start
+----------
+
+.. code-block:: shell
+
+   pool-start pool-or-uuid [--build] [[--overwrite] | [--no-overwrite]]
+
+Start the storage *pool*, which is previously defined but inactive.
+
+[*--build*] [[*--overwrite*] | [*--no-overwrite*]] perform a
+``pool-build`` prior to ``pool-start`` to ensure the pool environment is
+in an expected state rather than needing to run the build command prior
+to startup. The *--overwrite* and *--no-overwrite* flags follow the
+same rules as ``pool-build``. If just *--build* is provided, then
+``pool-build`` is called with no flags.
+
+``Note``: A storage pool that relies on remote resources such as an
+"iscsi" or a (v)HBA backed "scsi" pool may need to be refreshed multiple
+times in order to have all the volumes detected (see ``pool-refresh``).
+This is because the corresponding volume devices may not be present in
+the host's filesystem during the initial pool startup or the current
+refresh attempt. The number of refresh retries is dependent upon the
+network connection and the time the host takes to export the
+corresponding devices.
+
+
+pool-undefine
+-------------
+
+.. code-block:: shell
+
+   pool-undefine pool-or-uuid
+
+Undefine the configuration for an inactive *pool*.
+
+
+pool-uuid
+---------
+
+.. code-block:: shell
+
+   pool-uuid pool
+
+Returns the UUID of the named *pool*.
+
+
+pool-event
+----------
+
+.. code-block:: shell
+
+   pool-event {[pool] event [--loop] [--timeout seconds] [--timestamp] | --list}
+
+Wait for a class of storage pool events to occur, and print appropriate
+details of events as they happen.  The events can optionally be filtered
+by *pool*.  Using *--list* as the only argument will provide a list
+of possible *event* values known by this client, although the connection
+might not allow registering for all these events.
+
+By default, this command is one-shot, and returns success once an event
+occurs; you can send SIGINT (usually via ``Ctrl-C``) to quit immediately.
+If *--timeout* is specified, the command gives up waiting for events
+after *seconds* have elapsed.   With *--loop*, the command prints all
+events until a timeout or interrupt key.
+
+When *--timestamp* is used, a human-readable timestamp will be printed
+before the event.
+
+
+VOLUME COMMANDS
+===============
+
+vol-create
+----------
+
+.. code-block:: shell
+
+   vol-create pool-or-uuid FILE [--prealloc-metadata]
+
+Create a volume from an XML <file>.
+
+*pool-or-uuid* is the name or UUID of the storage pool to create the volume in.
+
+*FILE* is the XML <file> with the volume definition. An easy way to create the
+XML <file> is to use the ``vol-dumpxml`` command to obtain the definition of a
+pre-existing volume.
+
+[*--prealloc-metadata*] preallocate metadata (for qcow2 images which don't
+support full allocation). This option creates a sparse image file with metadata,
+resulting in higher performance compared to images with no preallocation and
+only slightly higher initial disk space usage.
+
+Example
+~~~~~~~
+
+.. code-block:: shell
+
+   virsh vol-dumpxml --pool storagepool1 appvolume1 > newvolume.xml
+   vi newvolume.xml (or make changes with your other text editor)
+   virsh vol-create differentstoragepool newvolume.xml
+
+
+vol-create-from
+---------------
+
+.. code-block:: shell
+
+   vol-create-from pool-or-uuid FILE vol-name-or-key-or-path
+      [--inputpool pool-or-uuid]  [--prealloc-metadata] [--reflink]
+
+Create a volume, using another volume as input.
+
+*pool-or-uuid* is the name or UUID of the storage pool to create the volume in.
+
+*FILE* is the XML <file> with the volume definition.
+
+*vol-name-or-key-or-path* is the name or key or path of the source volume.
+
+*--inputpool* *pool-or-uuid* is the name or uuid of the storage pool the
+source volume is in.
+
+[*--prealloc-metadata*] preallocate metadata (for qcow2 images which don't
+support full allocation). This option creates a sparse image file with metadata,
+resulting in higher performance compared to images with no preallocation and
+only slightly higher initial disk space usage.
+
+When *--reflink* is specified, perform a COW lightweight copy,
+where the data blocks are copied only when modified.
+If this is not possible, the copy fails.
+
+
+vol-create-as
+-------------
+
+.. code-block:: shell
+
+   vol-create-as pool-or-uuid name capacity [--allocation size] [--format string]
+      [--backing-vol vol-name-or-key-or-path]
+      [--backing-vol-format string] [--prealloc-metadata] [--print-xml]
+
+Create a volume from a set of arguments unless *--print-xml* is specified, in
+which case just the XML of the volume object is printed out without any actual
+object creation.
+
+*pool-or-uuid* is the name or UUID of the storage pool to create the volume
+in.
+
+*name* is the name of the new volume. For a disk pool, this must match the
+partition name as determined from the pool's source device path and the next
+available partition. For example, a source device path of /dev/sdb and there
+are no partitions on the disk, then the name must be sdb1 with the next
+name being sdb2 and so on.
+
+*capacity* is the size of the volume to be created, as a scaled integer
+(see ``NOTES`` above), defaulting to bytes if there is no suffix.
+
+*--allocation* *size* is the initial size to be allocated in the volume,
+also as a scaled integer defaulting to bytes.
+
+*--format* *string* is used in file based storage pools to specify the volume
+file format to use; raw, bochs, qcow, qcow2, vmdk, qed. Use extended for disk
+storage pools in order to create an extended partition (other values are
+validity checked but not preserved when libvirtd is restarted or the pool
+is refreshed).
+
+*--backing-vol* *vol-name-or-key-or-path* is the source backing
+volume to be used if taking a snapshot of an existing volume.
+
+*--backing-vol-format* *string* is the format of the snapshot backing volume;
+raw, bochs, qcow, qcow2, qed, vmdk, host_device. These are, however, meant for
+file based storage pools.
+
+[*--prealloc-metadata*] preallocate metadata (for qcow2 images which don't
+support full allocation). This option creates a sparse image file with metadata,
+resulting in higher performance compared to images with no preallocation and
+only slightly higher initial disk space usage.
+
+
+vol-clone
+---------
+
+.. code-block:: shell
+
+   vol-clone vol-name-or-key-or-path name
+      [--pool pool-or-uuid] [--prealloc-metadata] [--reflink]
+
+Clone an existing volume within the parent pool.  Less powerful,
+but easier to type, version of ``vol-create-from``.
+
+*vol-name-or-key-or-path* is the name or key or path of the source volume.
+
+*name* is the name of the new volume.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool
+that contains the source volume and will contain the new volume.
+If the source volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be cloned; otherwise,
+the first volume found by the key or path will be used.
+
+[*--prealloc-metadata*] preallocate metadata (for qcow2 images which don't
+support full allocation). This option creates a sparse image file with metadata,
+resulting in higher performance compared to images with no preallocation and
+only slightly higher initial disk space usage.
+
+When *--reflink* is specified, perform a COW lightweight copy,
+where the data blocks are copied only when modified.
+If this is not possible, the copy fails.
+
+
+vol-delete
+----------
+
+.. code-block:: shell
+
+   vol-delete vol-name-or-key-or-path [--pool pool-or-uuid] [--delete-snapshots]
+
+Delete a given volume.
+
+*vol-name-or-key-or-path* is the volume name or key or path of the volume
+to delete.
+
+[*--pool* *pool-or-uuid*] is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be deleted; otherwise,
+the first volume found by the key or path will be used.
+
+The *--delete-snapshots* flag specifies that any snapshots associated with
+the storage volume should be deleted as well. Not all storage drivers
+support this option, presently only rbd.
+
+
+vol-upload
+----------
+
+.. code-block:: shell
+
+   vol-upload vol-name-or-key-or-path local-file
+      [--pool pool-or-uuid] [--offset bytes]
+      [--length bytes] [--sparse]
+
+Upload the contents of *local-file* to a storage volume.
+
+*vol-name-or-key-or-path* is the name or key or path of the volume where the
+*local-file* will be uploaded.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be uploaded into;
+otherwise, the first volume found by the key or path will be used.
+
+*--offset* is the position in the storage volume at which to start writing
+the data. The value must be 0 or larger.
+
+*--length* is an upper bound of the amount of data to be uploaded.
+A negative value is interpreted as an unsigned long long value to
+essentially include everything from the offset to the end of the volume.
+
+If *--sparse* is specified, this command will preserve volume sparseness.
+
+An error will occur if the *local-file* is greater than the specified
+*length*.
+
+See the description for the libvirt virStorageVolUpload API for details
+regarding possible target volume and pool changes as a result of the
+pool refresh when the upload is attempted.
+
+
+vol-download
+------------
+
+.. code-block:: shell
+
+   vol-download vol-name-or-key-or-path local-file
+      [--pool pool-or-uuid] [--offset bytes] [--length bytes]
+      [--sparse]
+
+Download the contents of a storage volume to *local-file*.
+
+*vol-name-or-key-or-path* is the name or key or path of the volume to
+download into *local-file*.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be uploaded into;
+otherwise, the first volume found by the key or path will be used.
+
+*--offset* is the position in the storage volume at which to start reading
+the data. The value must be 0 or larger.
+
+*--length* is an upper bound of the amount of data to be downloaded.
+A negative value is interpreted as an unsigned long long value to
+essentially include everything from the offset to the end of the volume.
+
+If *--sparse* is specified, this command will preserve volume sparseness.
+
+
+vol-wipe
+--------
+
+.. code-block:: shell
+
+   vol-wipe vol-name-or-key-or-path [--pool pool-or-uuid] [--algorithm algorithm]
+
+Wipe a volume, ensure data previously on the volume is not accessible to
+future reads.
+
+*vol-name-or-key-or-path* is the name or key or path of the volume to wipe.
+It is possible to choose different wiping algorithms instead of re-writing
+volume with zeroes.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the
+volume is in. If the volume name is provided instead of the key or path,
+then providing the pool is necessary to find the volume to be wiped;
+otherwise, the first volume found by the key or path will be used.
+
+Use the *--algorithm* switch choosing from the list of the following
+algorithms in order to define which algorithm to use for the wipe.
+
+``Supported algorithms``
+
+* zero       - 1-pass all zeroes
+* nnsa       - 4-pass NNSA Policy Letter NAP-14.1-C (XVI-8) for
+  sanitizing removable and non-removable hard disks:
+  random x2, 0x00, verify.
+* dod        - 4-pass DoD 5220.22-M section 8-306 procedure for
+  sanitizing removable and non-removable rigid
+  disks: random, 0x00, 0xff, verify.
+* bsi        - 9-pass method recommended by the German Center of
+  Security in Information Technologies
+  (http://www.bsi.bund.de): 0xff, 0xfe, 0xfd, 0xfb,
+  0xf7, 0xef, 0xdf, 0xbf, 0x7f.
+* gutmann    - The canonical 35-pass sequence described in
+  Gutmann's paper.
+* schneier   - 7-pass method described by Bruce Schneier in
+  "Applied Cryptography" (1996): 0x00, 0xff, random x5.
+* pfitzner7  - Roy Pfitzner's 7-random-pass method: random x7.
+* pfitzner33 - Roy Pfitzner's 33-random-pass method: random x33.
+* random     - 1-pass pattern: random.
+* trim       - 1-pass trimming the volume using TRIM or DISCARD
+
+``Note``: The ``scrub`` binary will be used to handle the 'nnsa', 'dod',
+'bsi', 'gutmann', 'schneier', 'pfitzner7' and 'pfitzner33' algorithms.
+The availability of the algorithms may be limited by the version of
+the ``scrub`` binary installed on the host. The 'zero' algorithm will
+write zeroes to the entire volume. For some volumes, such as sparse
+or rbd volumes, this may result in completely filling the volume with
+zeroes making it appear to be completely full. As an alternative, the
+'trim' algorithm does not overwrite all the data in a volume, rather
+it expects the storage driver to be able to discard all bytes in a
+volume. It is up to the storage driver to handle how the discarding
+occurs. Not all storage drivers or volume types can support 'trim'.
+
+
+vol-dumpxml
+-----------
+
+.. code-block:: shell
+
+   vol-dumpxml vol-name-or-key-or-path [--pool pool-or-uuid]
+
+Output the volume information as an XML dump to stdout.
+
+*vol-name-or-key-or-path* is the name or key or path of the volume
+to output the XML.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be uploaded into;
+otherwise, the first volume found by the key or path will be used.
+
+
+vol-info
+--------
+
+.. code-block:: shell
+
+   vol-info vol-name-or-key-or-path [--pool pool-or-uuid] [--bytes] [--physical]
+
+Returns basic information about the given storage volume.
+
+*vol-name-or-key-or-path* is the name or key or path of the volume
+to return information for.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be uploaded into;
+otherwise, the first volume found by the key or path will be used.
+
+If *--bytes* is specified the sizes are not converted to human friendly
+units.
+
+If *--physical* is specified, then the host physical size is returned
+and displayed instead of the allocation value. The physical value for
+some file types, such as qcow2 may have a different (larger) physical
+value than is shown for allocation. Additionally sparse files will
+have different physical and allocation values.
+
+
+vol-list
+--------
+
+.. code-block:: shell
+
+   vol-list [--pool pool-or-uuid] [--details]
+
+Return the list of volumes in the given storage pool.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool.
+
+The *--details* option instructs virsh to additionally display volume
+type and capacity related information where available.
+
+
+vol-pool
+--------
+
+.. code-block:: shell
+
+   vol-pool vol-key-or-path [--uuid]
+
+Return the pool name or UUID for a given volume. By default, the pool name is
+returned.
+
+*vol-key-or-path* is the key or path of the volume to return the pool
+information.
+
+If the *--uuid* option is given, the pool UUID is returned instead.
+
+
+vol-path
+--------
+
+.. code-block:: shell
+
+   vol-path vol-name-or-key [--pool pool-or-uuid]
+
+Return the path for a given volume.
+
+*vol-name-or-key* is the name or key of the volume to return the path.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key, then providing
+the pool is necessary to find the volume to be uploaded into; otherwise,
+the first volume found by the key will be used.
+
+
+vol-name
+--------
+
+.. code-block:: shell
+
+   vol-name vol-key-or-path
+
+Return the name for a given volume.
+
+*vol-key-or-path* is the key or path of the volume to return the name.
+
+
+vol-key
+-------
+
+.. code-block:: shell
+
+   vol-key vol-name-or-path [--pool pool-or-uuid]
+
+Return the volume key for a given volume.
+
+*vol-name-or-path* is the name or path of the volume to return the
+volume key.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the path, then providing
+the pool is necessary to find the volume to be uploaded into; otherwise,
+the first volume found by the path will be used.
+
+
+vol-resize
+----------
+
+.. code-block:: shell
+
+   vol-resize vol-name-or-path capacity [--pool pool-or-uuid] [--allocate] [--delta] [--shrink]
+
+Resize the capacity of the given volume, in bytes.
+
+*vol-name-or-key-or-path* is the name or key or path of the volume
+to resize.
+
+*capacity* is a scaled integer (see ``NOTES`` above) for the volume,
+which defaults to bytes if there is no suffix.
+
+*--pool* *pool-or-uuid* is the name or UUID of the storage pool the volume
+is in. If the volume name is provided instead of the key or path, then
+providing the pool is necessary to find the volume to be uploaded into;
+otherwise, the first volume found by the key or path will be used.
+
+The new *capacity* might be sparse unless *--allocate* is specified.
+
+Normally, *capacity* is the new size, but if *--delta*
+is present, then it is added to the existing size.
+
+Attempts to shrink the volume will fail unless *--shrink* is present.
+The *capacity* cannot be negative unless *--shrink* is provided, but
+a negative sign is not necessary.
+
+This command is only safe for storage volumes not in use by an active
+guest; see also ``blockresize`` for live resizing.
+
+
+SECRET COMMANDS
+===============
+
+The following commands manipulate "secrets" (e.g. passwords, passphrases and
+encryption keys).  Libvirt can store secrets independently from their use, and
+other objects (e.g. volumes or domains) can refer to the secrets for encryption
+or possibly other uses.  Secrets are identified using a UUID.  See
+`https://libvirt.org/formatsecret.html <https://libvirt.org/formatsecret.html>`_ for documentation of the XML format
+used to represent properties of secrets.
+
+secret-define
+-------------
+
+.. code-block:: shell
+
+   secret-define file
+
+Create a secret with the properties specified in *file*, with no associated
+secret value.  If *file* does not specify a UUID, choose one automatically.
+If *file* specifies a UUID of an existing secret, replace its properties by
+properties defined in *file*, without affecting the secret value.
+
+
+secret-dumpxml
+--------------
+
+.. code-block:: shell
+
+   secret-dumpxml secret
+
+Output properties of *secret* (specified by its UUID) as an XML dump to stdout.
+
+
+secret-event
+------------
+
+.. code-block:: shell
+
+   secret-event {[secret] event [--loop] [--timeout seconds] [--timestamp] | --list}
+
+Wait for a class of secret events to occur, and print appropriate details
+of events as they happen.  The events can optionally be filtered by
+*secret*.  Using *--list* as the only argument will provide a list
+of possible *event* values known by this client, although the connection
+might not allow registering for all these events.
+
+By default, this command is one-shot, and returns success once an event
+occurs; you can send SIGINT (usually via ``Ctrl-C``) to quit immediately.
+If *--timeout* is specified, the command gives up waiting for events
+after *seconds* have elapsed.   With *--loop*, the command prints all
+events until a timeout or interrupt key.
+
+When *--timestamp* is used, a human-readable timestamp will be printed
+before the event.
+
+
+secret-set-value
+----------------
+
+.. code-block:: shell
+
+   secret-set-value secret base64
+
+Set the value associated with *secret* (specified by its UUID) to the value
+Base64-encoded value *base64*.
+
+
+secret-get-value
+----------------
+
+.. code-block:: shell
+
+   secret-get-value secret
+
+Output the value associated with *secret* (specified by its UUID) to stdout,
+encoded using Base64.
+
+
+secret-undefine
+---------------
+
+.. code-block:: shell
+
+   secret-undefine secret
+
+
+Delete a *secret* (specified by its UUID), including the associated value, if
+any.
+
+
+secret-list
+-----------
+
+.. code-block:: shell
+
+   secret-list [--ephemeral] [--no-ephemeral]
+      [--private] [--no-private]
+
+Returns the list of secrets. You may also want to filter the returned secrets
+by *--ephemeral* to list the ephemeral ones, *--no-ephemeral* to list the
+non-ephemeral ones, *--private* to list the private ones, and
+*--no-private* to list the non-private ones.
+
+
+SNAPSHOT COMMANDS
+=================
+
+The following commands manipulate domain snapshots.  Snapshots take the
+disk, memory, and device state of a domain at a point-of-time, and save it
+for future use.  They have many uses, from saving a "clean" copy of an OS
+image to saving a domain's state before a potentially destructive operation.
+Snapshots are identified with a unique name.  See
+`https://libvirt.org/formatsnapshot.html <https://libvirt.org/formatsnapshot.html>`_ for documentation of the XML format
+used to represent properties of snapshots.
+
+snapshot-create
+---------------
+
+.. code-block:: shell
+
+   snapshot-create domain [xmlfile] {[--redefine [--current]] |
+      [--no-metadata] [--halt] [--disk-only] [--reuse-external]
+      [--quiesce] [--atomic] [--live]} [--validate]
+
+Create a snapshot for domain *domain* with the properties specified in
+*xmlfile*.   Optionally, the *--validate* option can be passed to
+validate the format of the input XML file against an internal RNG
+schema (identical to using the virt-xml-validate(1) tool). Normally,
+the only properties settable for a domain snapshot
+are the <name> and <description> elements, as well as <disks> if
+*--disk-only* is given; the rest of the fields are
+ignored, and automatically filled in by libvirt.  If *xmlfile* is
+completely omitted, then libvirt will choose a value for all fields.
+The new snapshot will become current, as listed by ``snapshot-current``.
+
+If *--halt* is specified, the domain will be left in an inactive state
+after the snapshot is created.
+
+If *--disk-only* is specified, the snapshot will only include disk
+content rather than the usual full system snapshot with vm state.  Disk
+snapshots are captured faster than full system snapshots, but reverting to a
+disk snapshot may require fsck or journal replays, since it is like
+the disk state at the point when the power cord is abruptly pulled;
+and mixing *--halt* and *--disk-only* loses any data that was not
+flushed to disk at the time.
+
+If *--redefine* is specified, then all XML elements produced by
+``snapshot-dumpxml`` are valid; this can be used to migrate snapshot
+hierarchy from one machine to another, to recreate hierarchy for the
+case of a transient domain that goes away and is later recreated with
+the same name and UUID, or to make slight alterations in the snapshot
+metadata (such as host-specific aspects of the domain XML embedded in
+the snapshot).  When this flag is supplied, the *xmlfile* argument
+is mandatory, and the domain's current snapshot will not be altered
+unless the *--current* flag is also given.
+
+If *--no-metadata* is specified, then the snapshot data is created,
+but any metadata is immediately discarded (that is, libvirt does not
+treat the snapshot as current, and cannot revert to the snapshot
+unless *--redefine* is later used to teach libvirt about the
+metadata again).
+
+If *--reuse-external* is specified, and the snapshot XML requests an
+external snapshot with a destination of an existing file, then the
+destination must exist and be pre-created with correct format and
+metadata. The file is then reused; otherwise, a snapshot is refused
+to avoid losing contents of the existing files.
+
+If *--quiesce* is specified, libvirt will try to use guest agent
+to freeze and unfreeze domain's mounted file systems. However,
+if domain has no guest agent, snapshot creation will fail.
+Currently, this requires *--disk-only* to be passed as well.
+
+If *--atomic* is specified, libvirt will guarantee that the snapshot
+either succeeds, or fails with no changes; not all hypervisors support
+this.  If this flag is not specified, then some hypervisors may fail
+after partially performing the action, and ``dumpxml`` must be used to
+see whether any partial changes occurred.
+
+If *--live* is specified, libvirt takes the snapshot while
+the guest is running. Both disk snapshot and domain memory snapshot are
+taken. This increases the size of the memory image of the external
+snapshot. This is currently supported only for full system external snapshots.
+
+Existence of snapshot metadata will prevent attempts to ``undefine``
+a persistent domain.  However, for transient domains, snapshot
+metadata is silently lost when the domain quits running (whether
+by command such as ``destroy`` or by internal guest action).
+
+For now, it is not possible to create snapshots in a domain that has
+checkpoints, although this restriction will be lifted in a future
+release.
+
+
+snapshot-create-as
+------------------
+
+.. code-block:: shell
+
+   snapshot-create-as domain {[--print-xml] [--no-metadata]
+      [--halt] [--reuse-external]} [name]
+      [description] [--disk-only [--quiesce]] [--atomic]
+      [[--live] [--memspec memspec]] [--diskspec] diskspec]...
+
+Create a snapshot for domain *domain* with the given <name> and
+<description>; if either value is omitted, libvirt will choose a
+value.  If *--print-xml* is specified, then XML appropriate for
+*snapshot-create* is output, rather than actually creating a snapshot.
+Otherwise, if *--halt* is specified, the domain will be left in an
+inactive state after the snapshot is created, and if *--disk-only*
+is specified, the snapshot will not include vm state.
+
+The *--memspec* option can be used to control whether a full system snapshot
+is internal or external.  The *--memspec* flag is mandatory, followed
+by a ``memspec`` of the form ``[file=]name[,snapshot=type]``, where
+type can be ``no``, ``internal``, or ``external``.  To include a literal
+comma in ``file=name``, escape it with a second comma. *--memspec* cannot
+be used together with *--disk-only*.
+
+The *--diskspec* option can be used to control how *--disk-only* and
+external full system snapshots create external files.  This option can occur
+multiple times, according to the number of <disk> elements in the domain
+xml.  Each <diskspec> is in the
+form ``disk[,snapshot=type][,driver=type][,stype=type][,file=name]``.
+A *diskspec* must be provided for disks backed by block devices as libvirt
+doesn't auto-generate file names for those.  The optional ``stype`` parameter
+allows to control the type of the source file. Supported values are 'file'
+(default) and 'block'.
+
+To include a literal comma in ``disk`` or in ``file=name``, escape it with a
+second comma.  A literal *--diskspec* must precede each ``diskspec`` unless
+all three of *domain*, *name*, and *description* are also present.
+For example, a diskspec of "vda,snapshot=external,file=/path/to,,new"
+results in the following XML:
+
+.. code-block:: xml
+
+   <disk name='vda' snapshot='external'>
+     <source file='/path/to,new'/>
+   </disk>
+
+If *--reuse-external* is specified, and the domain XML or *diskspec*
+option requests an external snapshot with a destination of an existing
+file, then the destination must exist and be pre-created with correct
+format and metadata. The file is then reused; otherwise, a snapshot
+is refused to avoid losing contents of the existing files.
+
+If *--quiesce* is specified, libvirt will try to use guest agent
+to freeze and unfreeze domain's mounted file systems. However,
+if domain has no guest agent, snapshot creation will fail.
+Currently, this requires *--disk-only* to be passed as well.
+
+If *--no-metadata* is specified, then the snapshot data is created,
+but any metadata is immediately discarded (that is, libvirt does not
+treat the snapshot as current, and cannot revert to the snapshot
+unless ``snapshot-create`` is later used to teach libvirt about the
+metadata again).
+
+If *--atomic* is specified, libvirt will guarantee that the snapshot
+either succeeds, or fails with no changes; not all hypervisors support
+this.  If this flag is not specified, then some hypervisors may fail
+after partially performing the action, and ``dumpxml`` must be used to
+see whether any partial changes occurred.
+
+If *--live* is specified, libvirt takes the snapshot while the guest is
+running. This increases the size of the memory image of the external
+snapshot. This is currently supported only for external full system snapshots.
+
+For now, it is not possible to create snapshots in a domain that has
+checkpoints, although this restriction will be lifted in a future
+release.
+
+
+snapshot-current
+----------------
+
+.. code-block:: shell
+
+   snapshot-current domain {[--name] | [--security-info] | [snapshotname]}
+
+Without *snapshotname*, this will output the snapshot XML for the domain's
+current snapshot (if any).  If *--name* is specified, just the
+current snapshot name instead of the full xml.  Otherwise, using
+*--security-info* will also include security sensitive information in
+the XML.
+
+With *snapshotname*, this is a request to make the existing named
+snapshot become the current snapshot, without reverting the domain.
+
+
+snapshot-edit
+-------------
+
+.. code-block:: shell
+
+   snapshot-edit domain [snapshotname] [--current] {[--rename] | [--clone]}
+
+Edit the XML configuration file for *snapshotname* of a domain.  If
+both *snapshotname* and *--current* are specified, also force the
+edited snapshot to become the current snapshot.  If *snapshotname*
+is omitted, then *--current* must be supplied, to edit the current
+snapshot.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh snapshot-dumpxml dom name > snapshot.xml
+   vi snapshot.xml (or make changes with your other text editor)
+   virsh snapshot-create dom snapshot.xml --redefine [--current]
+
+except that it does some error checking.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+If *--rename* is specified, then the edits can change the snapshot
+name.  If *--clone* is specified, then changing the snapshot name
+will create a clone of the snapshot metadata.  If neither is specified,
+then the edits must not change the snapshot name.  Note that changing
+a snapshot name must be done with care, since the contents of some
+snapshots, such as internal snapshots within a single qcow2 file, are
+accessible only from the original name.
+
+
+snapshot-info
+-------------
+
+.. code-block:: shell
+
+   snapshot-info domain {snapshot | --current}
+
+Output basic information about a named <snapshot>, or the current snapshot
+with *--current*.
+
+
+snapshot-list
+-------------
+
+.. code-block:: shell
+
+   snapshot-list domain [--metadata] [--no-metadata]
+      [{--parent | --roots | [{--tree | --name}]}] [--topological]
+      [{[--from] snapshot | --current} [--descendants]]
+      [--leaves] [--no-leaves] [--inactive] [--active]
+      [--disk-only] [--internal] [--external]
+
+List all of the available snapshots for the given domain, defaulting
+to show columns for the snapshot name, creation time, and domain state.
+
+Normally, table form output is sorted by snapshot name; using
+*--topological* instead sorts so that no child is listed before its
+ancestors (although there may be more than one possible ordering with
+this property).
+
+If *--parent* is specified, add a column to the output table giving
+the name of the parent of each snapshot.  If *--roots* is specified,
+the list will be filtered to just snapshots that have no parents.
+If *--tree* is specified, the output will be in a tree format, listing
+just snapshot names.  These three options are mutually exclusive. If
+*--name* is specified only the snapshot name is printed. This option is
+mutually exclusive with *--tree*.
+
+If *--from* is provided, filter the list to snapshots which are
+children of the given ``snapshot``; or if *--current* is provided,
+start at the current snapshot.  When used in isolation or with
+*--parent*, the list is limited to direct children unless
+*--descendants* is also present.  When used with *--tree*, the
+use of *--descendants* is implied.  This option is not compatible
+with *--roots*.  Note that the starting point of *--from* or
+*--current* is not included in the list unless the *--tree*
+option is also present.
+
+If *--leaves* is specified, the list will be filtered to just
+snapshots that have no children.  Likewise, if *--no-leaves* is
+specified, the list will be filtered to just snapshots with
+children.  (Note that omitting both options does no filtering,
+while providing both options will either produce the same list
+or error out depending on whether the server recognizes the flags).
+Filtering options are not compatible with *--tree*.
+
+If *--metadata* is specified, the list will be filtered to just
+snapshots that involve libvirt metadata, and thus would prevent
+``undefine`` of a persistent domain, or be lost on ``destroy`` of
+a transient domain.  Likewise, if *--no-metadata* is specified,
+the list will be filtered to just snapshots that exist without
+the need for libvirt metadata.
+
+If *--inactive* is specified, the list will be filtered to snapshots
+that were taken when the domain was shut off.  If *--active* is
+specified, the list will be filtered to snapshots that were taken
+when the domain was running, and where the snapshot includes the
+memory state to revert to that running state.  If *--disk-only* is
+specified, the list will be filtered to snapshots that were taken
+when the domain was running, but where the snapshot includes only
+disk state.
+
+If *--internal* is specified, the list will be filtered to snapshots
+that use internal storage of existing disk images.  If *--external*
+is specified, the list will be filtered to snapshots that use external
+files for disk images or memory state.
+
+
+snapshot-dumpxml
+----------------
+
+.. code-block:: shell
+
+   snapshot-dumpxml domain snapshot [--security-info]
+
+Output the snapshot XML for the domain's snapshot named *snapshot*.
+Using *--security-info* will also include security sensitive information.
+Use ``snapshot-current`` to easily access the XML of the current snapshot.
+
+
+snapshot-parent
+---------------
+
+.. code-block:: shell
+
+   snapshot-parent domain {snapshot | --current}
+
+Output the name of the parent snapshot, if any, for the given
+*snapshot*, or for the current snapshot with *--current*.
+
+
+snapshot-revert
+---------------
+
+.. code-block:: shell
+
+   snapshot-revert domain {snapshot | --current} [{--running | --paused}] [--force]
+
+Revert the given domain to the snapshot specified by *snapshot*, or to
+the current snapshot with *--current*.  Be aware
+that this is a destructive action; any changes in the domain since the last
+snapshot was taken will be lost.  Also note that the state of the domain after
+snapshot-revert is complete will be the state of the domain at the time
+the original snapshot was taken.
+
+Normally, reverting to a snapshot leaves the domain in the state it was
+at the time the snapshot was created, except that a disk snapshot with
+no vm state leaves the domain in an inactive state.  Passing either the
+*--running* or *--paused* flag will perform additional state changes
+(such as booting an inactive domain, or pausing a running domain).  Since
+transient domains cannot be inactive, it is required to use one of these
+flags when reverting to a disk snapshot of a transient domain.
+
+There are two cases where a snapshot revert involves extra risk, which
+requires the use of *--force* to proceed.  One is the case of a
+snapshot that lacks full domain information for reverting
+configuration (such as snapshots created prior to libvirt 0.9.5);
+since libvirt cannot prove that the current configuration matches what
+was in use at the time of the snapshot, supplying *--force* assures
+libvirt that the snapshot is compatible with the current configuration
+(and if it is not, the domain will likely fail to run).  The other is
+the case of reverting from a running domain to an active state where a
+new hypervisor has to be created rather than reusing the existing
+hypervisor, because it implies drawbacks such as breaking any existing
+VNC or Spice connections; this condition happens with an active
+snapshot that uses a provably incompatible configuration, as well as
+with an inactive snapshot that is combined with the *--start* or
+*--pause* flag.
+
+
+snapshot-delete
+---------------
+
+.. code-block:: shell
+
+   snapshot-delete domain {snapshot | --current}
+      [--metadata] [{--children | --children-only}]
+
+Delete the snapshot for the domain named *snapshot*, or the current
+snapshot with *--current*.  If this snapshot
+has child snapshots, changes from this snapshot will be merged into the
+children.  If *--children* is passed, then delete this snapshot and any
+children of this snapshot.  If *--children-only* is passed, then delete
+any children of this snapshot, but leave this snapshot intact.  These
+two flags are mutually exclusive.
+
+If *--metadata* is specified, then only delete the snapshot metadata
+maintained by libvirt, while leaving the snapshot contents intact for
+access by external tools; otherwise deleting a snapshot also removes
+the data contents from that point in time.
+
+
+CHECKPOINT COMMANDS
+===================
+
+The following commands manipulate domain checkpoints.  Checkpoints serve as
+a point in time to identify which portions of a guest's disks have changed
+after that time, making it possible to perform incremental and differential
+backups.  Checkpoints are identified with a unique name.  See
+`https://libvirt.org/formatcheckpoint.html <https://libvirt.org/formatcheckpoint.html>`_ for documentation of the XML
+format used to represent properties of checkpoints.
+
+checkpoint-create
+-----------------
+
+.. code-block:: shell
+
+   checkpoint-create domain [xmlfile] { --redefine | [--quiesce]}
+
+Create a checkpoint for domain *domain* with the properties specified
+in *xmlfile* describing a <domaincheckpoint> top-level element. The
+format of the input XML file will be validated against an internal RNG
+schema (idential to using the virt-xml-validate(1) tool). If
+*xmlfile* is completely omitted, then libvirt will create a
+checkpoint with a name based on the current time.
+
+If *--redefine* is specified, then all XML elements produced by
+``checkpoint-dumpxml`` are valid; this can be used to migrate
+checkpoint hierarchy from one machine to another, to recreate
+hierarchy for the case of a transient domain that goes away and is
+later recreated with the same name and UUID, or to make slight
+alterations in the checkpoint metadata (such as host-specific aspects
+of the domain XML embedded in the checkpoint).  When this flag is
+supplied, the *xmlfile* argument is mandatory.
+
+If *--quiesce* is specified, libvirt will try to use guest agent
+to freeze and unfreeze domain's mounted file systems. However,
+if domain has no guest agent, checkpoint creation will fail.
+
+Existence of checkpoint metadata will prevent attempts to ``undefine``
+a persistent domain.  However, for transient domains, checkpoint
+metadata is silently lost when the domain quits running (whether
+by command such as ``destroy`` or by internal guest action).
+
+For now, it is not possible to create checkpoints in a domain that has
+snapshots, although this restriction will be lifted in a future
+release.
+
+
+checkpoint-create-as
+--------------------
+
+.. code-block:: shell
+
+   checkpoint-create-as domain [--print-xml] [name]
+      [description] [--quiesce] [--diskspec] diskspec]...
+
+Create a checkpoint for domain *domain* with the given <name> and
+<description>; if either value is omitted, libvirt will choose a
+value.  If *--print-xml* is specified, then XML appropriate for
+*checkpoint-create* is output, rather than actually creating a
+checkpoint.
+
+The *--diskspec* option can be used to control which guest disks
+participate in the checkpoint. This option can occur multiple times,
+according to the number of <disk> elements in the domain xml.  Each
+<diskspec> is in the form ``disk[,checkpoint=type][,bitmap=name]``. A
+literal *--diskspec* must precede each ``diskspec`` unless
+all three of *domain*, *name*, and *description* are also present.
+For example, a diskspec of "vda,checkpoint=bitmap,bitmap=map1"
+results in the following XML:
+
+.. code-block:: xml
+
+   <disk name='vda' checkpoint='bitmap' bitmap='map1'/>
+
+If *--quiesce* is specified, libvirt will try to use guest agent
+to freeze and unfreeze domain's mounted file systems. However,
+if domain has no guest agent, checkpoint creation will fail.
+
+For now, it is not possible to create checkpoints in a domain that has
+snapshots, although this restriction will be lifted in a future
+release.
+
+
+checkpoint-edit
+---------------
+
+.. code-block:: shell
+
+   checkpoint-edit domain checkpointname
+
+Edit the XML configuration file for *checkpointname* of a domain.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh checkpoint-dumpxml dom name > checkpoint.xml
+   vi checkpoint.xml (or make changes with your other text editor)
+   virsh checkpoint-create dom checkpoint.xml --redefine
+
+except that it does some error checking, including that the edits
+should not attempt to change the checkpoint name.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+checkpoint-info
+---------------
+
+.. code-block:: shell
+
+   checkpoint-info domain checkpoint
+
+Output basic information about a named <checkpoint>.
+
+
+checkpoint-list
+---------------
+
+.. code-block:: shell
+
+   checkpoint-list domain [{--parent | --roots |
+      [{--tree | --name}]}] [--topological]
+      [[--from] checkpoint | [--descendants]]
+      [--leaves] [--no-leaves]
+
+List all of the available checkpoints for the given domain, defaulting
+to show columns for the checkpoint name and creation time.
+
+Normally, table form output is sorted by checkpoint name; using
+*--topological* instead sorts so that no child is listed before its
+ancestors (although there may be more than one possible ordering with
+this property).
+
+If *--parent* is specified, add a column to the output table giving
+the name of the parent of each checkpoint.  If *--roots* is
+specified, the list will be filtered to just checkpoints that have no
+parents.  If *--tree* is specified, the output will be in a tree
+format, listing just checkpoint names.  These three options are
+mutually exclusive. If *--name* is specified only the checkpoint name
+is printed. This option is mutually exclusive with *--tree*.
+
+If *--from* is provided, filter the list to checkpoints which are
+children of the given ``checkpoint``.  When used in isolation or with
+*--parent*, the list is limited to direct children unless
+*--descendants* is also present.  When used with *--tree*, the use
+of *--descendants* is implied.  This option is not compatible with
+*--roots*.  Note that the starting point of *--from*
+is not included in the list unless the *--tree* option is also
+present.
+
+If *--leaves* is specified, the list will be filtered to just
+checkpoints that have no children.  Likewise, if *--no-leaves* is
+specified, the list will be filtered to just checkpoints with
+children.  (Note that omitting both options does no filtering, while
+providing both options will either produce the same list or error out
+depending on whether the server recognizes the flags).  Filtering
+options are not compatible with *--tree*.
+
+
+checkpoint-dumpxml
+------------------
+
+.. code-block:: shell
+
+   checkpoint-dumpxml domain checkpoint [--security-info] [--no-domain] [--size]
+
+Output the checkpoint XML for the domain's checkpoint named
+*checkpoint*.  Using
+*--security-info* will also include security sensitive information.
+Using *--size* will add XML indicating the current size in bytes of
+guest data that has changed since the checkpoint was created (although
+remember that guest activity between a size check and actually
+creating a backup can result in the backup needing slightly more
+space).  Using *--no-domain* will omit the <domain> element from the
+output for a more compact view.
+
+
+checkpoint-parent
+-----------------
+
+.. code-block:: shell
+
+   checkpoint-parent domain checkpoint
+
+Output the name of the parent checkpoint, if any, for the given
+*checkpoint*.
+
+checkpoint
+----------
+
+.. code-block:: shell
+
+   checkpoint-delete domain checkpoint
+      [--metadata] [{--children | --children-only}]
+
+Delete the checkpoint for the domain named *checkpoint*.  The
+record of which portions of
+the disk changed since the checkpoint are merged into the parent
+checkpoint (if any). If *--children* is passed, then delete this
+checkpoint and any children of this checkpoint.  If *--children-only*
+is passed, then delete any children of this checkpoint, but leave this
+checkpoint intact. These two flags are mutually exclusive.
+
+If *--metadata* is specified, then only delete the checkpoint
+metadata maintained by libvirt, while leaving the checkpoint contents
+intact for access by external tools; otherwise deleting a checkpoint
+also removes the ability to perform an incremental backup from that
+point in time.
+
+
+NWFILTER COMMANDS
+=================
+
+The following commands manipulate network filters. Network filters allow
+filtering of the network traffic coming from and going to virtual machines.
+Individual network traffic filters are written in XML and may contain
+references to other network filters, describe traffic filtering rules,
+or contain both. Network filters are referenced by virtual machines
+from within their interface description. A network filter may be referenced
+by multiple virtual machines' interfaces.
+
+
+nwfilter-define
+---------------
+
+.. code-block:: shell
+
+   nwfilter-define xmlfile
+
+Make a new network filter known to libvirt. If a network filter with
+the same name already exists, it will be replaced with the new XML.
+Any running virtual machine referencing this network filter will have
+its network traffic rules adapted. If for any reason the network traffic
+filtering rules cannot be instantiated by any of the running virtual
+machines, then the new XML will be rejected.
+
+
+nwfilter-undefine
+-----------------
+
+.. code-block:: shell
+
+   nwfilter-undefine nwfilter-name
+
+Delete a network filter. The deletion will fail if any running virtual
+machine is currently using this network filter.
+
+
+nwfilter-list
+-------------
+
+.. code-block:: shell
+
+   nwfilter-list
+
+List all of the available network filters.
+
+
+nwfilter-dumpxml
+----------------
+
+.. code-block:: shell
+
+   nwfilter-dumpxml nwfilter-name
+
+Output the network filter XML.
+
+
+nwfilter-edit
+-------------
+
+.. code-block:: shell
+
+   nwfilter-edit nwfilter-name
+
+Edit the XML of a network filter.
+
+This is equivalent to:
+
+.. code-block:: shell
+
+   virsh nwfilter-dumpxml myfilter > myfilter.xml
+   vi myfilter.xml (or make changes with your other text editor)
+   virsh nwfilter-define myfilter.xml
+
+except that it does some error checking.
+The new network filter may be rejected due to the same reason as
+mentioned in *nwfilter-define*.
+
+The editor used can be supplied by the ``$VISUAL`` or ``$EDITOR`` environment
+variables, and defaults to ``vi``.
+
+
+NWFILTER BINDING COMMANDS
+=========================
+
+The following commands manipulate network filter bindings. Network filter
+bindings track the association between a network port and a network
+filter. Generally the bindings are managed automatically by the hypervisor
+drivers when adding/removing NICs on a guest.
+
+If an admin is creating/deleting TAP devices for non-guest usage,
+however, the network filter binding commands provide a way to make use
+of the network filters directly.
+
+nwfilter-binding-create
+-----------------------
+
+.. code-block:: shell
+
+   nwfilter-binding-create xmlfile
+
+Associate a network port with a network filter. The network filter backend
+will immediately attempt to instantiate the filter rules on the port. This
+command may be used to associate a filter with a currently running guest
+that does not have a filter defined for a specific network port. Since the
+bindings are generally automatically managed by the hypervisor, using this
+command to define a filter for a network port and then starting the guest
+afterwards may prevent the guest from starting if it attempts to use the
+network port and finds a filter already defined.
+
+
+nwfilter-binding-delete
+-----------------------
+
+.. code-block:: shell
+
+   nwfilter-binding-delete port-name
+
+Disassociate a network port from a network filter. The network filter
+backend will immediately tear down the filter rules that exist on the
+port. This command may be used to remove the network port binding for
+a filter currently in use for the guest while the guest is running
+without needing to restart the guest. Restoring the network port binding
+filter for the running guest would be accomplished by using
+*nwfilter-binding-create*.
+
+
+nwfilter-binding-list
+---------------------
+
+.. code-block:: shell
+
+   nwfilter-binding-list
+
+List all of the network ports which have filters associated with them.
+
+
+nwfilter-binding-dumpxml
+------------------------
+
+.. code-block:: shell
+
+   nwfilter-binding-dumpxml port-name
+
+Output the network filter binding XML for the network device called
+``port-name``.
+
+
+HYPERVISOR-SPECIFIC COMMANDS
+============================
+
+NOTE: Use of the following commands is ``strongly`` discouraged.  They
+can cause libvirt to become confused and do the wrong thing on subsequent
+operations.  Once you have used these commands, please do not report
+problems to the libvirt developers; the reports will be ignored.  If
+you find that these commands are the only way to accomplish something,
+then it is better to request that the feature be added as a first-class
+citizen in the regular libvirt library.
+
+qemu-attach
+-----------
+
+.. code-block:: shell
+
+   qemu-attach pid
+
+Attach an externally launched QEMU process to the libvirt QEMU driver.
+The QEMU process must have been created with a monitor connection
+using the UNIX driver. Ideally the process will also have had the
+'-name' argument specified.
+
+.. code-block:: shell
+
+       $ qemu-kvm -cdrom ~/demo.iso \
+           -monitor unix:/tmp/demo,server,nowait \
+           -name foo \
+           -uuid cece4f9f-dff0-575d-0e8e-01fe380f12ea  &
+       $ QEMUPID=$!
+       $ virsh qemu-attach $QEMUPID
+
+Not all functions of libvirt are expected to work reliably after
+attaching to an externally launched QEMU process. There may be
+issues with the guest ABI changing upon migration and device hotplug
+or hotunplug may not work. The attached environment should be considered
+primarily read-only.
+
+
+qemu-monitor-command
+--------------------
+
+.. code-block:: shell
+
+   qemu-monitor-command domain { [--hmp] | [--pretty] } command...
+
+Send an arbitrary monitor command *command* to domain *domain* through the
+qemu monitor.  The results of the command will be printed on stdout.  If
+*--hmp* is passed, the command is considered to be a human monitor command
+and libvirt will automatically convert it into QMP if needed.  In that case
+the result will also be converted back from QMP.  If *--pretty* is given,
+and the monitor uses QMP, then the output will be pretty-printed.  If more
+than one argument is provided for *command*, they are concatenated with a
+space in between before passing the single command to the monitor.
+
+
+qemu-agent-command
+------------------
+
+.. code-block:: shell
+
+   qemu-agent-command domain [--timeout seconds | --async | --block] command...
+
+Send an arbitrary guest agent command *command* to domain *domain* through
+qemu agent.
+*--timeout*, *--async* and *--block* options are exclusive.
+*--timeout* requires timeout seconds *seconds* and it must be positive.
+When *--aysnc* is given, the command waits for timeout whether success or
+failed. And when *--block* is given, the command waits forever with blocking
+timeout.
+
+
+qemu-monitor-event
+------------------
+
+.. code-block:: shell
+
+   qemu-monitor-event [domain] [--event event-name]
+     [--loop] [--timeout seconds] [--pretty] [--regex] [--no-case]
+     [--timestamp]
+
+Wait for arbitrary QEMU monitor events to occur, and print out the
+details of events as they happen.  The events can optionally be filtered
+by *domain* or *event-name*.  The 'query-events' QMP command can be
+used via *qemu-monitor-command* to learn what events are supported.
+If *--regex* is used, *event-name* is a basic regular expression
+instead of a literal string.  If *--no-case* is used, *event-name*
+will match case-insensitively.
+
+By default, this command is one-shot, and returns success once an event
+occurs; you can send SIGINT (usually via ``Ctrl-C``) to quit immediately.
+If *--timeout* is specified, the command gives up waiting for events
+after *seconds* have elapsed.  With *--loop*, the command prints all
+events until a timeout or interrupt key.  If *--pretty* is specified,
+any JSON event details are pretty-printed for better legibility.
+
+When *--timestamp* is used, a human-readable timestamp will be printed
+before the event, and the timing information provided by QEMU will be
+omitted.
+
+
+lxc
+---
+
+.. code-block:: shell
+
+   lxc-enter-namespace domain [--noseclabel] --
+      /path/to/binary [arg1, [arg2, ...]]
+
+Enter the namespace of *domain* and execute the command ``/path/to/binary``
+passing the requested args. The binary path is relative to the container
+root filesystem, not the host root filesystem. The binary will inherit the
+environment variables / console visible to virsh. The command will be run
+with the same sVirt context and cgroups placement as processes within the
+container. This command only works when connected to the LXC hypervisor
+driver.  This command succeeds only if ``/path/to/binary`` has 0 exit status.
+
+By default the new process will run with the security label of the new
+parent container. Use the *--noseclabel* option to instead have the
+process keep the same security label as ``virsh``.
+
+
+ENVIRONMENT
+===========
+
+The following environment variables can be set to alter the behaviour
+of ``virsh``
+
+- VIRSH_DEBUG=<0 to 4>
+
+  Turn on verbose debugging of virsh commands. Valid levels are
+
+  * VIRSH_DEBUG=0
+
+    DEBUG - Messages at ALL levels get logged
+
+  * VIRSH_DEBUG=1
+
+    INFO - Logs messages at levels INFO, NOTICE, WARNING and ERROR
+
+  * VIRSH_DEBUG=2
+
+    NOTICE - Logs messages at levels NOTICE, WARNING and ERROR
+
+  * VIRSH_DEBUG=3
+
+    WARNING - Logs messages at levels WARNING and ERROR
+
+  * VIRSH_DEBUG=4
+
+    ERROR - Messages at only ERROR level gets logged.
+
+- VIRSH_LOG_FILE=``LOGFILE``
+
+  The file to log virsh debug messages.
+
+- VIRSH_DEFAULT_CONNECT_URI
+
+  The hypervisor to connect to by default. Set this to a URI, in the same
+  format as accepted by the ``connect`` option. This environment variable
+  is deprecated in favour of the global ``LIBVIRT_DEFAULT_URI`` variable
+  which serves the same purpose.
+
+- LIBVIRT_DEFAULT_URI
+
+  The hypervisor to connect to by default. Set this to a URI, in the
+  same format as accepted by the ``connect`` option. This overrides
+  the default URI set in any client config file and prevents libvirt
+  from probing for drivers.
+
+- VISUAL
+
+  The editor to use by the ``edit`` and related options.
+
+- EDITOR
+
+  The editor to use by the ``edit`` and related options, if ``VISUAL``
+  is not set.
+
+- VIRSH_HISTSIZE
+
+  The number of commands to remember in the command  history.  The
+  default value is 500.
+
+- LIBVIRT_DEBUG=LEVEL
+
+  Turn on verbose debugging of all libvirt API calls. Valid levels are
+
+  * LIBVIRT_DEBUG=1
+
+    Messages at level DEBUG or above
+
+  * LIBVIRT_DEBUG=2
+
+    Messages at level INFO or above
+
+  * LIBVIRT_DEBUG=3
+
+    Messages at level WARNING or above
+
+  * LIBVIRT_DEBUG=4
+
+    Messages at level ERROR
+
+
+For further information about debugging options consult
+`https://libvirt.org/logging.html <https://libvirt.org/logging.html>`_
+
+
+BUGS
+====
+
+Please report all bugs you discover.  This should be done via either:
+
+#. the mailing list
+
+   `https://libvirt.org/contact.html <https://libvirt.org/contact.html>`_
+
+#. the bug tracker
+
+   `https://libvirt.org/bugs.html <https://libvirt.org/bugs.html>`_
+
+Alternatively, you may report bugs to your software distributor / vendor.
+
+
+AUTHORS
+=======
+
+Please refer to the AUTHORS file distributed with libvirt.
+
+
+COPYRIGHT
+=========
+
+Copyright (C) 2005, 2007-2015 Red Hat, Inc., and the authors listed in the
+libvirt AUTHORS file.
+
+
+LICENSE
+=======
+
+``virsh`` is distributed under the terms of the GNU LGPL v2+.
+This is free software; see the source for copying conditions. There
+is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE
+
+
+SEE ALSO
+========
+
+virt-install(1), virt-xml-validate(1), virt-top(1), virt-df(1),
+`https://libvirt.org/ <https://libvirt.org/>`_
diff --git a/tools/Makefile.am b/tools/Makefile.am
index f490a61348..9565c6026f 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -53,11 +53,9 @@ ICON_FILES = \
 	virsh_win_icon.rc
 
 PODFILES = \
-	virsh.pod \
 	$(NULL)
 
 MANINFILES = \
-	virsh.1.in \
 	$(NULL)
 
 EXTRA_DIST = \
@@ -85,8 +83,7 @@ conf_DATA =
 bin_SCRIPTS = virt-xml-validate virt-pki-validate
 bin_PROGRAMS = virsh virt-admin
 libexec_SCRIPTS = libvirt-guests.sh
-man1_MANS = \
-		virsh.1
+man1_MANS =
 
 if WITH_SANLOCK
 sbin_SCRIPTS = virt-sanlock-cleanup
diff --git a/tools/virsh.pod b/tools/virsh.pod
deleted file mode 100644
index a8331154e1..0000000000
--- a/tools/virsh.pod
+++ /dev/null
@@ -1,5526 +0,0 @@
-=head1 NAME
-
-virsh - management user interface
-
-=head1 SYNOPSIS
-
-B<virsh> [I<OPTION>]... [I<COMMAND_STRING>]
-
-B<virsh> [I<OPTION>]... I<COMMAND> [I<ARG>]...
-
-=head1 DESCRIPTION
-
-The B<virsh> program is the main interface for managing virsh guest
-domains. The program can be used to create, pause, and shutdown
-domains. It can also be used to list current domains. Libvirt is a C
-toolkit to interact with the virtualization capabilities of recent
-versions of Linux (and other OSes). It is free software available
-under the GNU Lesser General Public License. Virtualization of the
-Linux Operating System means the ability to run multiple instances of
-Operating Systems concurrently on a single hardware system where the
-basic resources are driven by a Linux instance. The library aims at
-providing a long term stable C API.  It currently supports Xen, QEMU,
-KVM, LXC, OpenVZ, VirtualBox and VMware ESX.
-
-The basic structure of most virsh usage is:
-
-  virsh [OPTION]... <command> <domain> [ARG]...
-
-Where I<command> is one of the commands listed below; I<domain> is the
-numeric domain id, or the domain name, or the domain UUID; and I<ARGS>
-are command specific options.  There are a few exceptions to this rule
-in the cases where the command in question acts on all domains, the
-entire machine, or directly on the xen hypervisor.  Those exceptions
-will be clear for each of those commands.  Note: it is permissible to
-give numeric names to domains, however, doing so will result in a
-domain that can only be identified by domain id. In other words, if a
-numeric value is supplied it will be interpreted as a domain id, not
-as a name. Any I<command> starting with B<#> is treated as a comment
-and silently ignored, all other unrecognized I<command>s are diagnosed.
-
-The B<virsh> program can be used either to run one I<COMMAND> by giving the
-command and its arguments on the shell command line, or a I<COMMAND_STRING>
-which is a single shell argument consisting of multiple I<COMMAND> actions
-and their arguments joined with whitespace and separated by semicolons or
-newlines between commands, where unquoted backslash-newline pairs are
-elided.  Within I<COMMAND_STRING>, virsh understands the
-same single, double, and backslash escapes as the shell, although you must
-add another layer of shell escaping in creating the single shell argument,
-and any word starting with unquoted I<#> begins a comment that ends at newline.
-If no command is given in the command line, B<virsh> will then start a minimal
-interpreter waiting for your commands, and the B<quit> command will then exit
-the program.
-
-The B<virsh> program understands the following I<OPTIONS>.
-
-=over 4
-
-=item B<-c>, B<--connect> I<URI>
-
-Connect to the specified I<URI>, as if by the B<connect> command,
-instead of the default connection.
-
-=item B<-d>, B<--debug> I<LEVEL>
-
-Enable debug messages at integer I<LEVEL> and above.  I<LEVEL> can
-range from 0 to 4 (default).  See the documentation of B<VIRSH_DEBUG>
-environment variable below for the description of each I<LEVEL>.
-
-=item B<-e>, B<--escape> I<string>
-
-Set alternative escape sequence for I<console> command. By default,
-telnet's B<^]> is used. Allowed characters when using hat notation are:
-alphabetic character, @, [, ], \, ^, _.
-
-=item B<-h>, B<--help>
-
-Ignore all other arguments, and behave as if the B<help> command were
-given instead.
-
-=item B<-k>, B<--keepalive-interval> I<INTERVAL>
-
-Set an I<INTERVAL> (in seconds) for sending keepalive messages to
-check whether connection to the server is still alive.  Setting the
-interval to 0 disables client keepalive mechanism.
-
-=item B<-K>, B<--keepalive-count> I<COUNT>
-
-Set a number of times keepalive message can be sent without getting an
-answer from the server without marking the connection dead.  There is
-no effect to this setting in case the I<INTERVAL> is set to 0.
-
-=item B<-l>, B<--log> I<FILE>
-
-Output logging details to I<FILE>.
-
-=item B<-q>, B<--quiet>
-
-Avoid extra informational messages.
-
-=item B<-r>, B<--readonly>
-
-Make the initial connection read-only, as if by the I<--readonly>
-option of the B<connect> command.
-
-=item B<-t>, B<--timing>
-
-Output elapsed time information for each command.
-
-=item B<-v>, B<--version[=short]>
-
-Ignore all other arguments, and prints the version of the libvirt library
-virsh is coming from
-
-=item B<-V>, B<--version=long>
-
-Ignore all other arguments, and prints the version of the libvirt library
-virsh is coming from and which options and driver are compiled in.
-
-=back
-
-=head1 NOTES
-
-Most B<virsh> operations rely upon the libvirt library being able to
-connect to an already running libvirtd service.  This can usually be
-done using the command B<service libvirtd start>.
-
-Most B<virsh> commands require root privileges to run due to the
-communications channels used to talk to the hypervisor.  Running as
-non root will return an error.
-
-Most B<virsh> commands act synchronously, except maybe shutdown,
-setvcpus and setmem. In those cases the fact that the B<virsh>
-program returned, may not mean the action is complete and you
-must poll periodically to detect that the guest completed the
-operation.
-
-B<virsh> strives for backward compatibility.  Although the B<help>
-command only lists the preferred usage of a command, if an older
-version of B<virsh> supported an alternate spelling of a command or
-option (such as I<--tunnelled> instead of I<--tunneled>), then
-scripts using that older spelling will continue to work.
-
-Several B<virsh> commands take an optionally scaled integer; if no
-scale is provided, then the default is listed in the command (for
-historical reasons, some commands default to bytes, while other
-commands default to kibibytes).  The following case-insensitive
-suffixes can be used to select a specific scale:
-  b, byte  byte      1
-  KB       kilobyte  1,000
-  k, KiB   kibibyte  1,024
-  MB       megabyte  1,000,000
-  M, MiB   mebibyte  1,048,576
-  GB       gigabyte  1,000,000,000
-  G, GiB   gibibyte  1,073,741,824
-  TB       terabyte  1,000,000,000,000
-  T, TiB   tebibyte  1,099,511,627,776
-  PB       petabyte  1,000,000,000,000,000
-  P, PiB   pebibyte  1,125,899,906,842,624
-  EB       exabyte   1,000,000,000,000,000,000
-  E, EiB   exbibyte  1,152,921,504,606,846,976
-
-=head1 GENERIC COMMANDS
-
-The following commands are generic i.e. not specific to a domain.
-
-=over 4
-
-=item B<help> [I<command-or-group>]
-
-This lists each of the virsh commands.  When used without options, all
-commands are listed, one per line, grouped into related categories,
-displaying the keyword for each group.
-
-To display only commands for a specific group, give the keyword for that
-group as an option.  For example:
-
- virsh # help host
-
-  Host and Hypervisor (help keyword 'host'):
-     capabilities                   capabilities
-     cpu-models                     show the CPU models for an architecture
-     connect                        (re)connect to hypervisor
-     freecell                       NUMA free memory
-     hostname                       print the hypervisor hostname
-     qemu-attach                    Attach to existing QEMU process
-     qemu-monitor-command           QEMU Monitor Command
-     qemu-agent-command             QEMU Guest Agent Command
-     sysinfo                        print the hypervisor sysinfo
-     uri                            print the hypervisor canonical URI
-
-To display detailed information for a specific command, give its name as the
-option instead.  For example:
-
- virsh # help list
-   NAME
-     list - list domains
-
-   SYNOPSIS
-     list [--inactive] [--all]
-
-   DESCRIPTION
-     Returns list of domains.
-
-   OPTIONS
-     --inactive       list inactive domains
-     --all            list inactive & active domains
-
-=item B<quit>, B<exit>
-
-quit this interactive terminal
-
-=item B<version> [I<--daemon>]
-
-Will print out the major version info about what this built from.
-If I<--daemon> is specified then the version of the libvirt daemon
-is included in the output.
-
-=over 4
-
-B<Example>
-
- $ virsh version
- Compiled against library: libvirt 1.2.3
- Using library: libvirt 1.2.3
- Using API: QEMU 1.2.3
- Running hypervisor: QEMU 2.0.50
-
- $ virsh version --daemon
- Compiled against library: libvirt 1.2.3
- Using library: libvirt 1.2.3
- Using API: QEMU 1.2.3
- Running hypervisor: QEMU 2.0.50
- Running against daemon: 1.2.6
-
-=back
-
-=item B<cd> [I<directory>]
-
-Will change current directory to I<directory>.  The default directory
-for the B<cd> command is the home directory or, if there is no I<HOME>
-variable in the environment, the root directory.
-
-This command is only available in interactive mode.
-
-=item B<pwd>
-
-Will print the current directory.
-
-=item B<connect> [I<URI>] [I<--readonly>]
-
-(Re)-Connect to the hypervisor. When the shell is first started, this
-is automatically run with the I<URI> parameter requested by the C<-c>
-option on the command line. The I<URI> parameter specifies how to
-connect to the hypervisor. The documentation page at
-L<https://libvirt.org/uri.html> list the values supported, but the most
-common are:
-
-=over 4
-
-=item xen:///system
-
-this is used to connect to the local Xen hypervisor
-
-=item qemu:///system
-
-connect locally as root to the daemon supervising QEMU and KVM domains
-
-=item qemu:///session
-
-connect locally as a normal user to his own set of QEMU and KVM domains
-
-=item lxc:///system
-
-connect to a local linux container
-
-=back
-
-To find the currently used URI, check the I<uri> command documented below.
-
-For remote access see the documentation page at
-L<https://libvirt.org/uri.html> on how to make URIs.
-The I<--readonly> option allows for read-only connection
-
-=item B<uri>
-
-Prints the hypervisor canonical URI, can be useful in shell mode.
-
-=item B<hostname>
-
-Print the hypervisor hostname.
-
-=item B<sysinfo>
-
-Print the XML representation of the hypervisor sysinfo, if available.
-
-=item B<nodeinfo>
-
-Returns basic information about the node, like number and type of CPU,
-and size of the physical memory. The output corresponds to virNodeInfo
-structure. Specifically, the "CPU socket(s)" field means number of CPU
-sockets per NUMA cell. The information libvirt displays is dependent
-upon what each architecture may provide.
-
-=item B<nodecpumap> [I<--pretty>]
-
-Displays the node's total number of CPUs, the number of online CPUs
-and the list of online CPUs.
-
-With I<--pretty> the online CPUs are printed as a range instead of a list.
-
-=item B<nodecpustats> [I<cpu>] [I<--percent>]
-
-Returns cpu stats of the node.
-If I<cpu> is specified, this will print the specified cpu statistics only.
-If I<--percent> is specified, this will print the percentage of each kind
-of cpu statistics during 1 second.
-
-=item B<nodememstats> [I<cell>]
-
-Returns memory stats of the node.
-If I<cell> is specified, this will print the specified cell statistics only.
-
-=item B<nodesuspend> [I<target>] [I<duration>]
-
-Puts the node (host machine) into a system-wide sleep state and schedule
-the node's Real-Time-Clock interrupt to resume the node after the time
-duration specified by I<duration> is out.
-I<target> specifies the state to which the host will be suspended to, it
-can be "mem" (suspend to RAM), "disk" (suspend to disk), or "hybrid"
-(suspend to both RAM and disk).  I<duration> specifies the time duration
-in seconds for which the host has to be suspended, it should be at least
-60 seconds.
-
-=item B<node-memory-tune> [I<shm-pages-to-scan>] [I<shm-sleep-millisecs>]
-[I<shm-merge-across-nodes>]
-
-Allows you to display or set the node memory parameters.
-I<shm-pages-to-scan> can be used to set the number of pages to scan
-before the shared memory service goes to sleep; I<shm-sleep-millisecs>
-can be used to set the number of millisecs the shared memory service should
-sleep before next scan; I<shm-merge-across-nodes> specifies if pages from
-different numa nodes can be merged. When set to 0, only pages which physically
-reside in the memory area of same NUMA node can be merged. When set to 1,
-pages from all nodes can be merged. Default to 1.
-
-B<Note>: Currently the "shared memory service" only means KSM (Kernel Samepage
-Merging).
-
-=item B<capabilities>
-
-Print an XML document describing the capabilities of the hypervisor
-we are currently connected to. This includes a section on the host
-capabilities in terms of CPU and features, and a set of description
-for each kind of guest which can be virtualized. For a more complete
-description see:
-  L<https://libvirt.org/formatcaps.html>
-The XML also show the NUMA topology information if available.
-
-=item B<domcapabilities> [I<virttype>] [I<emulatorbin>]
-[I<arch>] [I<machine>]
-
-Print an XML document describing the domain capabilities for the
-hypervisor we are connected to using information either sourced from an
-existing domain or taken from the B<virsh capabilities> output. This may
-be useful if you intend to create a new domain and are curious if for
-instance it could make use of VFIO by creating a domain for the
-hypervisor with a specific emulator and architecture.
-
-Each hypervisor will have different requirements regarding which options
-are required and which are optional. A hypervisor can support providing
-a default value for any of the options.
-
-The I<virttype> option specifies the virtualization type used. The value
-to be used is either from the 'type' attribute of the <domain/> top
-level element from the domain XML or the 'type' attribute found within
-each <guest/> element from the B<virsh capabilities> output.  The
-I<emulatorbin> option specifies the path to the emulator. The value to
-be used is either the <emulator> element in the domain XML or the
-B<virsh capabilities> output. The I<arch> option specifies the
-architecture to be used for the domain. The value to be used is either
-the "arch" attribute from the domain's XML <os/> element and <type/>
-subelement or the "name" attribute of an <arch/> element from the
-B<virsh capabililites> output. The I<machine> specifies the machine type
-for the emulator. The value to be used is either the "machine" attribute
-from the domain's XML <os/> element and <type/> subelement or one from a
-list of machines from the B<virsh capabilities> output for a specific
-architecture and domain type.
-
-For the qemu hypervisor, a I<virttype> of either 'qemu' or 'kvm' must be
-supplied along with either the I<emulatorbin> or I<arch> in order to
-generate output for the default I<machine>.  Supplying a I<machine>
-value will generate output for the specific machine.
-
-=item B<pool-capabilities>
-Print an XML document describing the storage pool capabilities for the
-connected storage driver. This may be useful if you intend to create a
-new storage pool and need to know the available pool types and supported
-storage pool source and target volume formats as well as the required
-source elements to create the pool.
-
-=item B<inject-nmi> I<domain>
-
-Inject NMI to the guest.
-
-=item B<list> [I<--inactive> | I<--all>]
-              [I<--managed-save>] [I<--title>]
-              { [I<--table>] | I<--name> | I<--uuid> }
-              [I<--persistent>] [I<--transient>]
-              [I<--with-managed-save>] [I<--without-managed-save>]
-              [I<--autostart>] [I<--no-autostart>]
-              [I<--with-snapshot>] [I<--without-snapshot>]
-              [I<--with-checkpoint>] [I<--without-checkpoint>]
-              [I<--state-running>] [I<--state-paused>]
-              [I<--state-shutoff>] [I<--state-other>]
-
-Prints information about existing domains.  If no options are
-specified it prints out information about running domains.
-
-An example format for the list is as follows:
-
-B<virsh> list
-  Id    Name                           State
- ----------------------------------------------------
-  0     Domain-0                       running
-  2     fedora                         paused
-
-Name is the name of the domain.  ID the domain numeric id.
-State is the run state (see below).
-
-B<STATES>
-
-The State field lists what state each domain is currently in. A domain
-can be in one of the following possible states:
-
-
-=over 4
-
-=item B<running>
-
-The domain is currently running on a CPU
-
-=item B<idle>
-
-The domain is idle, and not running or runnable.  This can be caused
-because the domain is waiting on IO (a traditional wait state) or has
-gone to sleep because there was nothing else for it to do.
-
-=item B<paused>
-
-The domain has been paused, usually occurring through the administrator
-running B<virsh suspend>.  When in a paused state the domain will still
-consume allocated resources like memory, but will not be eligible for
-scheduling by the hypervisor.
-
-=item B<in shutdown>
-
-The domain is in the process of shutting down, i.e. the guest operating system
-has been notified and should be in the process of stopping its operations
-gracefully.
-
-=item B<shut off>
-
-The domain is not running.  Usually this indicates the domain has been
-shut down completely, or has not been started.
-
-=item B<crashed>
-
-The domain has crashed, which is always a violent ending.  Usually
-this state can only occur if the domain has been configured not to
-restart on crash.
-
-=item B<pmsuspended>
-
-The domain has been suspended by guest power management, e.g. entered
-into s3 state.
-
-=back
-
-Normally only active domains are listed. To list inactive domains specify
-I<--inactive> or I<--all> to list both active and inactive domains.
-
-To further filter the list of domains you may specify one or more of filtering
-flags supported by the B<list> command. These flags are grouped by function.
-Specifying one or more flags from a group enables the filter group. Note that
-some combinations of flags may yield no results. Supported filtering flags and
-groups:
-
-=over 4
-
-=item B<Persistence>
-
-Flag I<--persistent> is used to include persistent domains in the returned
-list. To include transient domains specify I<--transient>.
-
-=item B<Existence of managed save image>
-
-To list domains having a managed save image specify flag
-I<--with-managed-save>. For domains that don't have a managed save image
-specify I<--without-managed-save>.
-
-=item B<Domain state>
-
-The following filter flags select a domain by its state:
-I<--state-running> for running domains, I<--state-paused>  for paused domains,
-I<--state-shutoff> for turned off domains and I<--state-other> for all
-other states as a fallback.
-
-=item B<Autostarting domains>
-
-To list autostarting domains use the flag I<--autostart>. To list domains with
-this feature disabled use I<--no-autostart>.
-
-=item B<Snapshot existence>
-
-Domains that have snapshot images can be listed using flag I<--with-snapshot>,
-domains without a snapshot I<--without-snapshot>.
-
-=item B<Checkpoint existence>
-
-Domains that have checkpoints can be listed using flag I<--with-checkpoint>,
-domains without a checkpoint I<--without-checkpoint>.
-
-=back
-
-When talking to older servers, this command is forced to use a series of API
-calls with an inherent race, where a domain might not be listed or might appear
-more than once if it changed state between calls while the list was being
-collected.  Newer servers do not have this problem.
-
-If I<--managed-save> is specified, then domains that have managed save state
-(only possible if they are in the B<shut off> state, so you need to specify
-I<--inactive> or I<--all> to actually list them) will instead show as B<saved>
-in the listing. This flag is usable only with the default I<--table> output.
-Note that this flag does not filter the list of domains.
-
-If I<--name> is specified, domain names are printed instead of the table
-formatted one per line. If I<--uuid> is specified domain's UUID's are printed
-instead of names. Flag I<--table> specifies that the legacy table-formatted
-output should be used. This is the default.
-
-If both I<--name> and I<--uuid> are specified, domain UUID's and names
-are printed side by side without any header. Flag I<--table> specifies
-that the legacy table-formatted output should be used. This is the
-default if neither I<--name> nor I<--uuid> are specified. Option
-I<--table> is mutually exclusive with options I<--uuid> and I<--name>.
-
-If I<--title> is specified, then the short domain description (title) is
-printed in an extra column. This flag is usable only with the default
-I<--table> output.
-
-Example:
-
-B<virsh> list --title
-  Id    Name        State      Title
- -------------------------------------------
-  0     Domain-0    running    Mailserver 1
-  2     fedora      paused
-
-=item B<freecell> [{ [I<--cellno>] B<cellno> | I<--all> }]
-
-Prints the available amount of memory on the machine or within a NUMA
-cell.  The freecell command can provide one of three different
-displays of available memory on the machine depending on the options
-specified.  With no options, it displays the total free memory on the
-machine.  With the --all option, it displays the free memory in each
-cell and the total free memory on the machine.  Finally, with a
-numeric argument or with --cellno plus a cell number it will display
-the free memory for the specified cell only.
-
-=item B<freepages> [{ [I<--cellno>] I<cellno> [I<--pagesize>] I<pagesize> |
-    I<--all> }]
-
-Prints the available amount of pages within a NUMA cell. I<cellno> refers
-to the NUMA cell you're interested in. I<pagesize> is a scaled integer (see
-B<NOTES> above).  Alternatively, if I<--all> is used, info on each possible
-combination of NUMA cell and page size is printed out.
-
-=item B<allocpages> [I<--pagesize>] I<pagesize> [I<--pagecount>] I<pagecount>
-[[I<--cellno>] I<cellno>] [I<--add>] [I<--all>]
-
-Change the size of pages pool of I<pagesize> on the host. If
-I<--add> is specified, then I<pagecount> pages are added into the
-pool. However, if I<--add> wasn't specified, then the
-I<pagecount> is taken as the new absolute size of the pool (this
-may be used to free some pages and size the pool down). The
-I<cellno> modifier can be used to narrow the modification down to
-a single host NUMA cell. On the other end of spectrum lies
-I<--all> which executes the modification on all NUMA cells.
-
-=item B<cpu-baseline> I<FILE> [I<--features>] [I<--migratable>]
-
-Compute baseline CPU which will be supported by all host CPUs given in <file>.
-(See B<hypervisor-cpu-baseline> command to get a CPU which can be provided by a
-specific hypervisor.) The list of host CPUs is built by extracting all <cpu>
-elements from the <file>. Thus, the <file> can contain either a set of <cpu>
-elements separated by new lines or even a set of complete <capabilities>
-elements printed by B<capabilities> command.  If I<--features> is specified,
-then the resulting XML description will explicitly include all features that
-make up the CPU, without this option features that are part of the CPU model
-will not be listed in the XML description.   If I<--migratable> is specified,
-features that block migration will not be included in the resulting CPU.
-
-=item B<cpu-compare> I<FILE> [I<--error>]
-
-Compare CPU definition from XML <file> with host CPU. (See
-B<hypervisor-cpu-compare> command for comparing the CPU definition with the CPU
-which a specific hypervisor is able to provide on the host.) The XML <file> may
-contain either host or guest CPU definition. The host CPU definition is the
-<cpu> element and its contents as printed by B<capabilities> command. The
-guest CPU definition is the <cpu> element and its contents from domain XML
-definition or the CPU definition created from the host CPU model found in
-domain capabilities XML (printed by B<domcapabilities> command). In
-addition to the <cpu> element itself, this command accepts
-full domain XML, capabilities XML, or domain capabilities XML containing
-the CPU definition. For more information on guest CPU definition see:
-L<https://libvirt.org/formatdomain.html#elementsCPU>. If I<--error> is
-specified, the command will return an error when the given CPU is
-incompatible with host CPU and a message providing more details about the
-incompatibility will be printed out.
-
-=item B<cpu-models> I<arch>
-
-Print the list of CPU models known by libvirt for the specified architecture.
-Whether a specific hypervisor is able to create a domain which uses any of
-the printed CPU models is a separate question which can be answered by
-looking at the domain capabilities XML returned by B<domcapabilities> command.
-Moreover, for some architectures libvirt does not know any CPU models and
-the usable CPU models are only limited by the hypervisor. This command will
-print that all CPU models are accepted for these architectures and the actual
-list of supported CPU models can be checked in the domain capabilities XML.
-
-=item B<echo> [I<--shell>] [I<--xml>] [I<err>...] [I<arg>...]
-
-Echo back each I<arg>, separated by space.  If I<--shell> is
-specified, then the output will be single-quoted where needed, so that
-it is suitable for reuse in a shell context.  If I<--xml> is
-specified, then the output will be escaped for use in XML.
-If I<--err> is specified, prefix B<"error: "> and output to stderr
-instead of stdout.
-
-=item B<hypervisor-cpu-compare> I<FILE> [I<virttype>] [I<emulator>] [I<arch>]
-[I<machine>] [I<--error>]
-
-Compare CPU definition from XML <file> with the CPU the hypervisor is able to
-provide on the host. (This is different from B<cpu-compare> which compares the
-CPU definition with the host CPU without considering any specific hypervisor
-and its abilities.)
-
-The XML I<FILE> may contain either a host or guest CPU definition. The host CPU
-definition is the <cpu> element and its contents as printed by the
-B<capabilities> command. The guest CPU definition is the <cpu> element and its
-contents from the domain XML definition or the CPU definition created from the
-host CPU model found in the domain capabilities XML (printed by the
-B<domcapabilities> command). In addition to the <cpu> element itself, this
-command accepts full domain XML, capabilities XML, or domain capabilities XML
-containing the CPU definition. For more information on guest CPU definition
-see: L<https://libvirt.org/formatdomain.html#elementsCPU>.
-
-The I<virttype> option specifies the virtualization type (usable in the 'type'
-attribute of the <domain> top level element from the domain XML). I<emulator>
-specifies the path to the emulator, I<arch> specifies the CPU architecture, and
-I<machine> specifies the machine type. If I<--error> is specified, the command
-will return an error when the given CPU is incompatible with the host CPU and a
-message providing more details about the incompatibility will be printed out.
-
-=item B<hypervisor-cpu-baseline> I<FILE> [I<virttype>] [I<emulator>] [I<arch>]
-[I<machine>] [I<--features>] [I<--migratable>]
-
-Compute a baseline CPU which will be compatible with all CPUs defined in an XML
-I<file> and with the CPU the hypervisor is able to provide on the host. (This
-is different from B<cpu-baseline> which does not consider any hypervisor
-abilities when computing the baseline CPU.)
-
-The XML I<FILE> may contain either host or guest CPU definitions describing the
-host CPU model. The host CPU definition is the <cpu> element and its contents
-as printed by B<capabilities> command. The guest CPU definition may be created
-from the host CPU model found in domain capabilities XML (printed by
-B<domcapabilities> command). In addition to the <cpu> elements, this command
-accepts full capabilities XMLs, or domain capabilities XMLs containing the CPU
-definitions. For best results, use only the CPU definitions from domain
-capabilities.
-
-When I<FILE> contains only a single CPU definition, the command will print the
-same CPU with restrictions imposed by the capabilities of the hypervisor.
-Specifically, running th B<virsh hypervisor-cpu-baseline> command with no
-additional options on the result of B<virsh domcapabilities> will transform the
-host CPU model from domain capabilities XML to a form directly usable in domain
-XML.
-
-The I<virttype> option specifies the virtualization type (usable in the 'type'
-attribute of the <domain> top level element from the domain XML). I<emulator>
-specifies the path to the emulator, I<arch> specifies the CPU architecture, and
-I<machine> specifies the machine type. If I<--features> is specified, then the
-resulting XML description will explicitly include all features that make up the
-CPU, without this option features that are part of the CPU model will not be
-listed in the XML description. If I<--migratable> is specified, features that
-block migration will not be included in the resulting CPU.
-
-
-=back
-
-=head1 DOMAIN COMMANDS
-
-The following commands manipulate domains directly, as stated
-previously most commands take domain as the first parameter. The
-I<domain> can be specified as a short integer, a name or a full UUID.
-
-=over 4
-
-=item B<autostart> [I<--disable>] I<domain>
-
-Configure a domain to be automatically started at boot.
-
-The option I<--disable> disables autostarting.
-
-=item B<blkdeviotune> I<domain> I<device>
-[[I<--config>] [I<--live>] | [I<--current>]]
-[[I<total-bytes-sec>] | [I<read-bytes-sec>] [I<write-bytes-sec>]]
-[[I<total-iops-sec>] | [I<read-iops-sec>] [I<write-iops-sec>]]
-[[I<total-bytes-sec-max>] | [I<read-bytes-sec-max>] [I<write-bytes-sec-max>]]
-[[I<total-iops-sec-max>] | [I<read-iops-sec-max>] [I<write-iops-sec-max>]]
-[[I<total-bytes-sec-max-length>] |
-[I<read-bytes-sec-max-length>] [I<write-bytes-sec-max-length>]]
-[[I<total-iops-sec-max-length>] |
-[I<read-iops-sec-max-length>] [I<write-iops-sec-max-length>]]
-[I<size-iops-sec>] [I<group-name>]
-
-Set or query the block disk io parameters for a block device of I<domain>.
-I<device> specifies a unique target name (<target dev='name'/>) or source
-file (<source file='name'/>) for one of the disk devices attached to
-I<domain> (see also B<domblklist> for listing these names).
-
-If no limit is specified, it will query current I/O limits setting.
-Otherwise, alter the limits with these flags:
-I<--total-bytes-sec> specifies total throughput limit as a scaled integer, the
-default being bytes per second if no suffix is specified.
-I<--read-bytes-sec> specifies read throughput limit as a scaled integer, the
-default being bytes per second if no suffix is specified.
-I<--write-bytes-sec> specifies write throughput limit as a scaled integer, the
-default being bytes per second if no suffix is specified.
-I<--total-iops-sec> specifies total I/O operations limit per second.
-I<--read-iops-sec> specifies read I/O operations limit per second.
-I<--write-iops-sec> specifies write I/O operations limit per second.
-I<--total-bytes-sec-max> specifies maximum total throughput limit as a scaled
-integer, the default being bytes per second if no suffix is specified
-I<--read-bytes-sec-max> specifies maximum read throughput limit as a scaled
-integer, the default being bytes per second if no suffix is specified.
-I<--write-bytes-sec-max> specifies maximum write throughput limit as a scaled
-integer, the default being bytes per second if no suffix is specified.
-I<--total-iops-sec-max> specifies maximum total I/O operations limit per second.
-I<--read-iops-sec-max> specifies maximum read I/O operations limit per second.
-I<--write-iops-sec-max> specifies maximum write I/O operations limit per second.
-I<--total-bytes-sec-max-length> specifies duration in seconds to allow maximum
-total throughput limit.
-I<--read-bytes-sec-max-length> specifies duration in seconds to allow maximum
-read throughput limit.
-I<--write-bytes-sec-max-length> specifies duration in seconds to allow maximum
-write throughput limit.
-I<--total-iops-sec-max-length> specifies duration in seconds to allow maximum
-total I/O operations limit.
-I<--read-iops-sec-max-length> specifies duration in seconds to allow maximum
-read I/O operations limit.
-I<--write-iops-sec-max-length> specifies duration in seconds to allow maximum
-write I/O operations limit.
-I<--size-iops-sec> specifies size I/O operations limit per second.
-I<--group-name> specifies group name to share I/O quota between multiple drives.
-For a qemu domain, if no name is provided, then the default is to have a single
-group for each I<device>.
-
-Older versions of virsh only accepted these options with underscore
-instead of dash, as in I<--total_bytes_sec>.
-
-Bytes and iops values are independent, but setting only one value (such
-as --read-bytes-sec) resets the other two in that category to unlimited.
-An explicit 0 also clears any limit.  A non-zero value for a given total
-cannot be mixed with non-zero values for read or write.
-
-It is up to the hypervisor to determine how to handle the length values.
-For the qemu hypervisor, if an I/O limit value or maximum value is set,
-then the default value of 1 second will be displayed. Supplying a 0 will
-reset the value back to the default.
-
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-When setting the disk io parameters both I<--live> and I<--config> flags may be
-given, but I<--current> is exclusive. For querying only one of I<--live>,
-I<--config> or I<--current> can be specified. If no flag is specified, behavior
-is different depending on hypervisor.
-
-=item B<blkiotune> I<domain> [I<--weight> B<weight>]
-[I<--device-weights> B<device-weights>]
-[I<--device-read-iops-sec> B<device-read-iops-sec>]
-[I<--device-write-iops-sec> B<device-write-iops-sec>]
-[I<--device-read-bytes-sec> B<device-read-bytes-sec>]
-[I<--device-write-bytes-sec> B<device-write-bytes-sec>]
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Display or set the blkio parameters. QEMU/KVM supports I<--weight>.
-I<--weight> is in range [100, 1000]. After kernel 2.6.39, the value
-could be in the range [10, 1000].
-
-B<device-weights> is a single string listing one or more device/weight
-pairs, in the format of /path/to/device,weight,/path/to/device,weight.
-Each weight is in the range [100, 1000], [10, 1000] after kernel 2.6.39,
-or the value 0 to remove that device from per-device listings.
-Only the devices listed in the string are modified;
-any existing per-device weights for other devices remain unchanged.
-
-B<device-read-iops-sec> is a single string listing one or more device/read_iops_sec
-pairs, int the format of /path/to/device,read_iops_sec,/path/to/device,read_iops_sec.
-Each read_iops_sec is a number which type is unsigned int, value 0 to remove that
-device from per-device listing.
-Only the devices listed in the string are modified;
-any existing per-device read_iops_sec for other devices remain unchanged.
-
-B<device-write-iops-sec> is a single string listing one or more device/write_iops_sec
-pairs, int the format of /path/to/device,write_iops_sec,/path/to/device,write_iops_sec.
-Each write_iops_sec is a number which type is unsigned int, value 0 to remove that
-device from per-device listing.
-Only the devices listed in the string are modified;
-any existing per-device write_iops_sec for other devices remain unchanged.
-
-B<device-read-bytes-sec> is a single string listing one or more device/read_bytes_sec
-pairs, int the format of /path/to/device,read_bytes_sec,/path/to/device,read_bytes_sec.
-Each read_bytes_sec is a number which type is unsigned long long, value 0 to remove
-that device from per-device listing.
-Only the devices listed in the string are modified;
-any existing per-device read_bytes_sec for other devices remain unchanged.
-
-B<device-write-bytes-sec> is a single string listing one or more device/write_bytes_sec
-pairs, int the format of /path/to/device,write_bytes_sec,/path/to/device,write_bytes_sec.
-Each write_bytes_sec is a number which type is unsigned long long, value 0 to remove
-that device from per-device listing.
-Only the devices listed in the string are modified;
-any existing per-device write_bytes_sec for other devices remain unchanged.
-
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-
-=item B<blockcommit> I<domain> I<path> [I<bandwidth>] [I<--bytes>]
-[I<base>] [I<--shallow>] [I<top>] [I<--delete>] [I<--keep-relative>]
-[I<--wait> [I<--async>] [I<--verbose>]] [I<--timeout> B<seconds>]
-[I<--active>] [{I<--pivot> | I<--keep-overlay>}]
-
-Reduce the length of a backing image chain, by committing changes at the
-top of the chain (snapshot or delta files) into backing images.  By
-default, this command attempts to flatten the entire chain.  If I<base>
-and/or I<top> are specified as files within the backing chain, then the
-operation is constrained to committing just that portion of the chain;
-I<--shallow> can be used instead of I<base> to specify the immediate
-backing file of the resulting top image to be committed.  The files
-being committed are rendered invalid, possibly as soon as the operation
-starts; using the I<--delete> flag will attempt to remove these invalidated
-files at the successful completion of the commit operation. When the
-I<--keep-relative> flag is used, the backing file paths will be kept relative.
-
-When I<top> is omitted or specified as the active image, it is also
-possible to specify I<--active> to trigger a two-phase active commit. In
-the first phase, I<top> is copied into I<base> and the job can only be
-canceled, with top still containing data not yet in base. In the second
-phase, I<top> and I<base> remain identical until a call to B<blockjob>
-with the I<--abort> flag (keeping top as the active image that tracks
-changes from that point in time) or the I<--pivot> flag (making base
-the new active image and invalidating top).
-
-By default, this command returns as soon as possible, and data for
-the entire disk is committed in the background; the progress of the
-operation can be checked with B<blockjob>.  However, if I<--wait> is
-specified, then this command will block until the operation completes
-(or for I<--active>, enters the second phase), or until the operation
-is canceled because the optional I<timeout> in seconds elapses
-or SIGINT is sent (usually with C<Ctrl-C>).  Using I<--verbose> along
-with I<--wait> will produce periodic status updates.  If job cancellation
-is triggered, I<--async> will return control to the user as fast as
-possible, otherwise the command may continue to block a little while
-longer until the job is done cleaning up.  Using I<--pivot> is shorthand
-for combining I<--active> I<--wait> with an automatic B<blockjob>
-I<--pivot>; and using I<--keep-overlay> is shorthand for combining
-I<--active> I<--wait> with an automatic B<blockjob> I<--abort>.
-
-I<path> specifies fully-qualified path of the disk; it corresponds
-to a unique target name (<target dev='name'/>) or source file (<source
-file='name'/>) for one of the disk devices attached to I<domain> (see
-also B<domblklist> for listing these names).
-I<bandwidth> specifies copying bandwidth limit in MiB/s, although for
-qemu, it may be non-zero only for an online domain. For further information
-on the I<bandwidth> argument see the corresponding section for the B<blockjob>
-command.
-
-=item B<blockcopy> I<domain> I<path> { I<dest> [I<format>] [I<--blockdev>]
-| I<--xml> B<file> } [I<--shallow>] [I<--reuse-external>] [I<bandwidth>]
-[I<--wait> [I<--async>] [I<--verbose>]] [{I<--pivot> | I<--finish>}]
-[I<--timeout> B<seconds>] [I<granularity>] [I<buf-size>] [I<--bytes>]
-[I<--transient-job>]
-
-Copy a disk backing image chain to a destination.  Either I<dest> as
-the destination file name, or I<--xml> with the name of an XML file containing
-a top-level <disk> element describing the destination, must be present.
-Additionally, if I<dest> is given, I<format> should be specified to declare
-the format of the destination (if I<format> is omitted, then libvirt
-will reuse the format of the source, or with I<--reuse-external> will
-be forced to probe the destination format, which could be a potential
-security hole).  The command supports I<--raw> as a boolean flag synonym for
-I<--format=raw>.  When using I<dest>, the destination is treated as a regular
-file unless I<--blockdev> is used to signal that it is a block device. By
-default, this command flattens the entire chain; but if I<--shallow> is
-specified, the copy shares the backing chain.
-
-If I<--reuse-external> is specified, then the destination must exist and have
-sufficient space to hold the copy. If I<--shallow> is used in
-conjunction with I<--reuse-external> then the pre-created image must have
-guest visible contents identical to guest visible contents of the backing
-file of the original image. This may be used to modify the backing file
-names on the destination.
-
-By default, the copy job runs in the background, and consists of two
-phases.  Initially, the job must copy all data from the source, and
-during this phase, the job can only be canceled to revert back to the
-source disk, with no guarantees about the destination.  After this phase
-completes, both the source and the destination remain mirrored until a
-call to B<blockjob> with the I<--abort> and I<--pivot> flags pivots over
-to the copy, or a call without I<--pivot> leaves the destination as a
-faithful copy of that point in time.  However, if I<--wait> is specified,
-then this command will block until the mirroring phase begins, or cancel
-the operation if the optional I<timeout> in seconds elapses or SIGINT is
-sent (usually with C<Ctrl-C>).  Using I<--verbose> along with I<--wait>
-will produce periodic status updates.  Using I<--pivot> (similar to
-B<blockjob> I<--pivot>) or I<--finish> (similar to B<blockjob> I<--abort>)
-implies I<--wait>, and will additionally end the job cleanly rather than
-leaving things in the mirroring phase.  If job cancellation is triggered
-by timeout or by I<--finish>, I<--async> will return control to the user
-as fast as possible, otherwise the command may continue to block a little
-while longer until the job has actually cancelled.
-
-I<path> specifies fully-qualified path of the disk.
-I<bandwidth> specifies copying bandwidth limit in MiB/s. Specifying a negative
-value is interpreted as an unsigned long long value that might be essentially
-unlimited, but more likely would overflow; it is safer to use 0 for that
-purpose. For further information on the I<bandwidth> argument see the
-corresponding section for the B<blockjob> command.
-Specifying I<granularity> allows fine-tuning of the granularity that will be
-copied when a dirty region is detected; larger values trigger less
-I/O overhead but may end up copying more data overall (the default value is
-usually correct); hypervisors may restrict this to be a power of two or fall
-within a certain range. Specifying I<buf-size> will control how much data can
-be simultaneously in-flight during the copy; larger values use more memory but
-may allow faster completion (the default value is usually correct).
-
-I<--transient-job> allows specifying that the user does not require the job to
-be recovered if the VM crashes or is turned off before the job completes. This
-flag removes the restriction of copy jobs to transient domains if that
-restriction is applied by the hypervisor.
-
-=item B<blockjob> I<domain> I<path> { [I<--abort>] [I<--async>] [I<--pivot>] |
-[I<--info>] [I<--raw>] [I<--bytes>] | [I<bandwidth>] }
-
-Manage active block operations.  There are three mutually-exclusive modes:
-I<--info>, I<bandwidth>, and I<--abort>.  I<--async> and I<--pivot> imply
-abort mode; I<--raw> implies info mode; and if no mode was given, I<--info>
-mode is assumed.
-
-I<path> specifies fully-qualified path of the disk; it corresponds
-to a unique target name (<target dev='name'/>) or source file (<source
-file='name'/>) for one of the disk devices attached to I<domain> (see
-also B<domblklist> for listing these names).
-
-In I<--abort> mode, the active job on the specified disk will
-be aborted.  If I<--async> is also specified, this command will return
-immediately, rather than waiting for the cancellation to complete.  If
-I<--pivot> is specified, this requests that an active copy or active
-commit job be pivoted over to the new image.
-
-In I<--info> mode, the active job information on the specified
-disk will be printed.  By default, the output is a single human-readable
-summary line; this format may change in future versions.  Adding
-I<--raw> lists each field of the struct, in a stable format.  If the
-I<--bytes> flag is set, then the command errors out if the server could
-not supply bytes/s resolution; when omitting the flag, raw output is
-listed in MiB/s and human-readable output automatically selects the
-best resolution supported by the server.
-
-I<bandwidth> can be used to set bandwidth limit for the active job in MiB/s.
-If I<--bytes> is specified then the bandwidth value is interpreted in
-bytes/s. Specifying a negative value is interpreted as an unsigned long
-value or essentially unlimited. The hypervisor can choose whether to
-reject the value or convert it to the maximum value allowed. Optionally a
-scaled positive number may be used as bandwidth (see B<NOTES> above). Using
-I<--bytes> with a scaled value permits a finer granularity to be selected.
-A scaled value used without I<--bytes> will be rounded down to MiB/s. Note
-that the I<--bytes> may be unsupported by the hypervisor.
-
-=item B<blockpull> I<domain> I<path> [I<bandwidth>] [I<--bytes>] [I<base>]
-[I<--wait> [I<--verbose>] [I<--timeout> B<seconds>] [I<--async>]]
-[I<--keep-relative>]
-
-Populate a disk from its backing image chain. By default, this command
-flattens the entire chain; but if I<base> is specified, containing the
-name of one of the backing files in the chain, then that file becomes
-the new backing file and only the intermediate portion of the chain is
-pulled.  Once all requested data from the backing image chain has been
-pulled, the disk no longer depends on that portion of the backing chain.
-
-By default, this command returns as soon as possible, and data for
-the entire disk is pulled in the background; the progress of the
-operation can be checked with B<blockjob>.  However, if I<--wait> is
-specified, then this command will block until the operation completes,
-or cancel the operation if the optional I<timeout> in seconds elapses
-or SIGINT is sent (usually with C<Ctrl-C>).  Using I<--verbose> along
-with I<--wait> will produce periodic status updates.  If job cancellation
-is triggered, I<--async> will return control to the user as fast as
-possible, otherwise the command may continue to block a little while
-longer until the job is done cleaning up.
-
-Using the I<--keep-relative> flag will keep the backing chain names
-relative.
-
-I<path> specifies fully-qualified path of the disk; it corresponds
-to a unique target name (<target dev='name'/>) or source file (<source
-file='name'/>) for one of the disk devices attached to I<domain> (see
-also B<domblklist> for listing these names).
-I<bandwidth> specifies copying bandwidth limit in MiB/s. For further information
-on the I<bandwidth> argument see the corresponding section for the B<blockjob>
-command.
-
-=item B<blockresize> I<domain> I<path> I<size>
-
-Resize a block device of domain while the domain is running, I<path>
-specifies the absolute path of the block device; it corresponds
-to a unique target name (<target dev='name'/>) or source file (<source
-file='name'/>) for one of the disk devices attached to I<domain> (see
-also B<domblklist> for listing these names).
-
-I<size> is a scaled integer (see B<NOTES> above) which defaults to KiB
-(blocks of 1024 bytes) if there is no suffix.  You must use a suffix of
-"B" to get bytes (note that for historical reasons, this differs from
-B<vol-resize> which defaults to bytes without a suffix).
-
-=item B<console> I<domain> [I<devname>] [I<--safe>] [I<--force>]
-
-Connect the virtual serial console for the guest. The optional
-I<devname> parameter refers to the device alias of an alternate
-console, serial or parallel device configured for the guest.
-If omitted, the primary console will be opened.
-
-If the flag I<--safe> is specified, the connection is only attempted
-if the driver supports safe console handling. This flag specifies that
-the server has to ensure exclusive access to console devices. Optionally
-the I<--force> flag may be specified, requesting to disconnect any existing
-sessions, such as in a case of a broken connection.
-
-=item B<cpu-stats> I<domain> [I<--total>] [I<start>] [I<count>]
-
-Provide cpu statistics information of a domain. The domain should
-be running. Default it shows stats for all CPUs, and a total. Use
-I<--total> for only the total stats, I<start> for only the per-cpu
-stats of the CPUs from I<start>, I<count> for only I<count> CPUs'
-stats.
-
-=item B<create> I<FILE> [I<--console>] [I<--paused>] [I<--autodestroy>]
-[I<--pass-fds N,M,...>] [I<--validate>]
-
-Create a domain from an XML <file>. Optionally, I<--validate> option can be
-passed to validate the format of the input XML file against an internal RNG
-schema (identical to using L<virt-xml-validate(1)> tool). Domains created using
-this command are going to be either transient (temporary ones that will vanish
-once destroyed) or existing persistent domains that will run with one-time use
-configuration, leaving the persistent XML untouched (this can come handy during
-an automated testing of various configurations all based on the original XML).
-See the B<Example> section for usage demonstration.
-
-The domain will be paused if the I<--paused> option is used
-and supported by the driver; otherwise it will be running. If I<--console> is
-requested, attach to the console after creation.
-If I<--autodestroy> is requested, then the guest will be automatically
-destroyed when virsh closes its connection to libvirt, or otherwise
-exits.
-
-If I<--pass-fds> is specified, the argument is a comma separated list
-of open file descriptors which should be pass on into the guest. The
-file descriptors will be re-numbered in the guest, starting from 3. This
-is only supported with container based virtualization.
-
-B<Example>
-
- 1) prepare a template from an existing domain (skip directly to 3a if writing
-    one from scratch)
-
- # virsh dumpxml <domain> > domain.xml
-
- 2) edit the template using an editor of your choice and:
-    a) DO CHANGE! <name> and <uuid> (<uuid> can also be removed), or
-    b) DON'T CHANGE! either <name> or <uuid>
-
- # $EDITOR domain.xml
-
- 3) create a domain from domain.xml, depending on whether following 2a or 2b
-    respectively:
-    a) the domain is going to be transient
-    b) an existing persistent domain will run with a modified one-time
-       configuration
-
- # virsh create domain.xml
-
-=item B<define> I<FILE> [I<--validate>]
-
-Define a domain from an XML <file>. Optionally, the format of the input XML
-file can be validated against an internal RNG schema with I<--validate>
-(identical to using L<virt-xml-validate(1)> tool). The domain definition is
-registered but not started.  If domain is already running, the changes will take
-effect on the next boot.
-
-=item B<desc> I<domain> [[I<--live>] [I<--config>] |
-              [I<--current>]] [I<--title>] [I<--edit>] [I<--new-desc>
-              New description or title message]
-
-Show or modify description and title of a domain. These values are user
-fields that allow storing arbitrary textual data to allow easy
-identification of domains. Title should be short, although it's not enforced.
-(See also B<metadata> that works with XML based domain metadata.)
-
-Flags I<--live> or I<--config> select whether this command works on live
-or persistent definitions of the domain. If both I<--live> and I<--config>
-are specified, the I<--config> option takes precedence on getting the current
-description and both live configuration and config are updated while setting
-the description. I<--current> is exclusive and implied if none of these was
-specified.
-
-Flag I<--edit> specifies that an editor with the contents of current
-description or title should be opened and the contents saved back afterwards.
-
-Flag I<--title> selects operation on the title field instead of description.
-
-If neither of I<--edit> and I<--new-desc> are specified the note or description
-is displayed instead of being modified.
-
-=item B<destroy> I<domain> [I<--graceful>]
-
-Immediately terminate the domain I<domain>.  This doesn't give the domain
-OS any chance to react, and it's the equivalent of ripping the power
-cord out on a physical machine.  In most cases you will want to use
-the B<shutdown> command instead.  However, this does not delete any
-storage volumes used by the guest, and if the domain is persistent, it
-can be restarted later.
-
-If I<domain> is transient, then the metadata of any snapshots will
-be lost once the guest stops running, but the snapshot contents still
-exist, and a new domain with the same name and UUID can restore the
-snapshot metadata with B<snapshot-create>.  Similarly, the metadata of
-any checkpoints will be lost, but can be restored with B<checkpoint-create>.
-
-If I<--graceful> is specified, don't resort to extreme measures
-(e.g. SIGKILL) when the guest doesn't stop after a reasonable timeout;
-return an error instead.
-
-=item B<domblkerror> I<domain>
-
-Show errors on block devices.  This command usually comes handy when
-B<domstate> command says that a domain was paused due to I/O error.
-The B<domblkerror> command lists all block devices in error state and
-the error seen on each of them.
-
-=item B<domblkinfo> I<domain> [I<block-device> I<--all>] [I<--human>]
-
-Get block device size info for a domain.  A I<block-device> corresponds
-to a unique target name (<target dev='name'/>) or source file (<source
-file='name'/>) for one of the disk devices attached to I<domain> (see
-also B<domblklist> for listing these names). If I<--human> is set, the
-output will have a human readable output.
-If I<--all> is set, the output will be a table showing all block devices
-size info associated with I<domain>.
-The I<--all> option takes precedence of the others.
-
-=item B<domblklist> I<domain> [I<--inactive>] [I<--details>]
-
-Print a table showing the brief information of all block devices
-associated with I<domain>. If I<--inactive> is specified, query the
-block devices that will be used on the next boot, rather than those
-currently in use by a running domain. If I<--details> is specified,
-disk type and device value will also be printed. Other contexts
-that require a block device name (such as I<domblkinfo> or
-I<snapshot-create> for disk snapshots) will accept either target
-or unique source names printed by this command.
-
-=item B<domblkstat> I<domain> [I<block-device>] [I<--human>]
-
-Get device block stats for a running domain.  A I<block-device> corresponds
-to a unique target name (<target dev='name'/>) or source file (<source
-file='name'/>) for one of the disk devices attached to I<domain> (see
-also B<domblklist> for listing these names). On a lxc or qemu domain,
-omitting the I<block-device> yields device block stats summarily for the
-entire domain.
-
-Use I<--human> for a more human readable output.
-
-Availability of these fields depends on hypervisor. Unsupported fields are
-missing from the output. Other fields may appear if communicating with a newer
-version of libvirtd.
-
-B<Explanation of fields> (fields appear in the following order):
-  rd_req            - count of read operations
-  rd_bytes          - count of read bytes
-  wr_req            - count of write operations
-  wr_bytes          - count of written bytes
-  errs              - error count
-  flush_operations  - count of flush operations
-  rd_total_times    - total time read operations took (ns)
-  wr_total_times    - total time write operations took (ns)
-  flush_total_times - total time flush operations took (ns)
-    <-- other fields provided by hypervisor -->
-
-
-=item B<domblkthreshold> I<domain> I<dev> I<threshold>
-
-Set the threshold value for delivering the block-threshold event. I<dev>
-specifies the disk device target or backing chain element of given device using
-the 'target[1]' syntax. I<threshold> is a scaled value of the offset. If the
-block device should write beyond that offset the event will be delivered.
-
-=item B<domcontrol> I<domain>
-
-Returns state of an interface to VMM used to control a domain.  For
-states other than "ok" or "error" the command also prints number of
-seconds elapsed since the control interface entered its current state.
-
-=item B<domdisplay> I<domain> [I<--include-password>]
-[[I<--type>] B<type>] [I<--all>]
-
-Output a URI which can be used to connect to the graphical display of the
-domain via VNC, SPICE or RDP.  The particular graphical display type can
-be selected using the B<type> parameter (e.g. "vnc", "spice", "rdp").  If
-I<--include-password> is specified, the SPICE channel password will be
-included in the URI. If I<--all> is specified, then all show all possible
-graphical displays, for a VM could have more than one graphical displays.
-
-=item B<domfsfreeze> I<domain> [[I<--mountpoint>] B<mountpoint>...]
-
-Freeze mounted filesystems within a running domain to prepare for consistent
-snapshots.
-
-The I<--mountpoint> option takes a parameter B<mountpoint>, which is a
-mount point path of the filesystem to be frozen. This option can occur
-multiple times. If this is not specified, every mounted filesystem is frozen.
-
-Note: B<snapshot-create> command has a I<--quiesce> option to freeze
-and thaw the filesystems automatically to keep snapshots consistent.
-B<domfsfreeze> command is only needed when a user wants to utilize the
-native snapshot features of storage devices not supported by libvirt.
-
-=item B<domfsinfo> I<domain>
-
-Show a list of mounted filesystems within the running domain. The list contains
-mountpoints, names of a mounted device in the guest, filesystem types, and
-unique target names used in the domain XML (<target dev='name'/>).
-
-Note that this command requires a guest agent configured and running in the
-domain's guest OS.
-
-=item B<domfsthaw> I<domain> [[I<--mountpoint>] B<mountpoint>...]
-
-Thaw mounted filesystems within a running domain, which have been frozen by
-domfsfreeze command.
-
-The I<--mountpoint> option takes a parameter B<mountpoint>, which is a
-mount point path of the filesystem to be thawed. This option can occur
-multiple times. If this is not specified, every mounted filesystem is thawed.
-
-=item B<domfstrim> I<domain> [I<--minimum> B<bytes>]
-[I<--mountpoint mountPoint>]
-
-Issue a fstrim command on all mounted filesystems within a running
-domain. It discards blocks which are not in use by the filesystem.
-If I<--minimum> B<bytes> is specified, it tells guest kernel length
-of contiguous free range. Smaller than this may be ignored (this is
-a hint and the guest may not respect it). By increasing this value,
-the fstrim operation will complete more quickly for filesystems
-with badly fragmented free space, although not all blocks will
-be discarded.  The default value is zero, meaning "discard
-every free block". Moreover, if a user wants to trim only one mount
-point, it can be specified via optional I<--mountpoint> parameter.
-
-=item B<domhostname> I<domain>
-
-Returns the hostname of a domain, if the hypervisor makes it available.
-
-=item B<domid> I<domain-name-or-uuid>
-
-Convert a domain name (or UUID) to a domain id
-
-=item B<domif-getlink> I<domain> I<interface-device> [I<--config>]
-
-Query link state of the domain's virtual interface. If I<--config>
-is specified, query the persistent configuration, for compatibility
-purposes, I<--persistent> is alias of I<--config>.
-
-I<interface-device> can be the interface's target name or the MAC address.
-
-=item B<domif-setlink> I<domain> I<interface-device> I<state> [I<--config>]
-
-Modify link state of the domain's virtual interface. Possible values for
-state are "up" and "down". If I<--config> is specified, only the persistent
-configuration of the domain is modified, for compatibility purposes,
-I<--persistent> is alias of I<--config>.
-I<interface-device> can be the interface's target name or the MAC address.
-
-=item B<domifaddr> I<domain> [I<interface>] [I<--full>]
-              [I<--source lease|agent|arp>]
-
-Get a list of interfaces of a running domain along with their IP and MAC
-addresses, or limited output just for one interface if I<interface> is
-specified. Note that I<interface> can be driver dependent, it can be the name
-within guest OS or the name you would see in domain XML. Moreover, the whole
-command may require a guest agent to be configured for the queried domain under
-some hypervisors, notably QEMU.
-
-If I<--full> is specified, the interface name and MAC address is always
-displayed when the interface has multiple IP addresses or aliases; otherwise,
-only the interface name and MAC address is displayed for the first name and
-MAC address with "-" for the others using the same name and MAC address.
-
-The I<--source> argument specifies what data source to use for the
-addresses, currently 'lease' to read DHCP leases, 'agent' to query
-the guest OS via an agent, or 'arp' to get IP from host's arp tables.
-If unspecified, 'lease' is the default.
-
-=item B<domiflist> I<domain> [I<--inactive>]
-
-Print a table showing the brief information of all virtual interfaces
-associated with I<domain>. If I<--inactive> is specified, query the
-virtual interfaces that will be used on the next boot, rather than those
-currently in use by a running domain. Other contexts that require a MAC
-address of virtual interface (such as I<detach-interface> or
-I<domif-setlink>) will accept the MAC address printed by this command.
-
-=item B<domifstat> I<domain> I<interface-device>
-
-Get network interface stats for a running domain. The network
-interface stats are only available for interfaces that have a
-physical source interface. This does not include, for example, a
-'user' interface type since it is a virtual LAN with NAT to the
-outside world. I<interface-device> can be the interface target by
-name or MAC address.
-
-=item B<domiftune> I<domain> I<interface-device>
-[[I<--config>] [I<--live>] | [I<--current>]]
-[I<--inbound average,peak,burst,floor>]
-[I<--outbound average,peak,burst>]
-
-Set or query the domain's network interface's bandwidth parameters.
-I<interface-device> can be the interface's target name (<target dev='name'/>),
-or the MAC address.
-
-If no I<--inbound> or I<--outbound> is specified, this command will
-query and show the bandwidth settings. Otherwise, it will set the
-inbound or outbound bandwidth. I<average,peak,burst,floor> is the same as
-in command I<attach-interface>.  Values for I<average>, I<peak> and I<floor>
-are expressed in kilobytes per second, while I<burst> is expressed in kilobytes
-in a single burst at I<peak> speed as described in the Network XML
-documentation at L<https://libvirt.org/formatnetwork.html#elementQoS>.
-
-To clear inbound or outbound settings, use I<--inbound> or I<--outbound>
-respectfully with average value of zero.
-
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-
-=item B<dominfo> I<domain>
-
-Returns basic information about the domain.
-
-=item B<domjobabort> I<domain>
-
-Abort the currently running domain job.
-
-=item B<domjobinfo> I<domain> [I<--completed> [I<--keep-completed>]]
-[I<--anystats>] [I<--rawstats>]
-
-Returns information about jobs running on a domain. I<--completed> tells
-virsh to return information about a recently finished job. Statistics of
-a completed job are automatically destroyed once read (unless
-I<--keep-completed> is used) or when libvirtd is restarted.
-
-Normally only statistics for running and successful completed jobs are printed.
-I<--anystats> can be used to also display statistics for failed jobs.
-
-In case I<--rawstats> is used, all fields are printed as received from the
-server without any attempts to interpret the data. The "Job type:" field is
-special, since it's reported by the API and not part of stats.
-
-Note that time information returned for completed
-migrations may be completely irrelevant unless both source and
-destination hosts have synchronized time (i.e., NTP daemon is running
-on both of them).
-
-=item B<dommemstat> I<domain> [I<--period> B<seconds>]
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Get memory stats for a running domain.
-
-Availability of these fields depends on hypervisor. Unsupported fields are
-missing from the output. Other fields may appear if communicating with a newer
-version of libvirtd.
-
-B<Explanation of fields>:
-  swap_in           - The amount of data read from swap space (in KiB)
-  swap_out          - The amount of memory written out to swap space (in KiB)
-  major_fault       - The number of page faults where disk IO was required
-  minor_fault       - The number of other page faults
-  unused            - The amount of memory left unused by the system (in KiB)
-  available         - The amount of usable memory as seen by the domain (in KiB)
-  actual            - Current balloon value (in KiB)
-  rss               - Resident Set Size of the running domain's process (in KiB)
-  usable            - The amount of memory which can be reclaimed by balloon
-without causing host swapping (in KiB)
-  last-update       - Timestamp of the last update of statistics (in seconds)
-  disk_caches       - The amount of memory that can be reclaimed without
-additional I/O, typically disk caches (in KiB)
-  hugetlb_pgalloc   - The number of successful huge page allocations initiated
-from within the domain
-  hugetlb_pgfail    - The number of failed huge page allocations initiated from
-within the domain
-
-For QEMU/KVM with a memory balloon, setting the optional I<--period> to a
-value larger than 0 in seconds will allow the balloon driver to return
-additional statistics which will be displayed by subsequent B<dommemstat>
-commands. Setting the I<--period> to 0 will stop the balloon driver collection,
-but does not clear the statistics in the balloon driver. Requires at least
-QEMU/KVM 1.5 to be running on the host.
-
-The I<--live>, I<--config>, and I<--current> flags are only valid when using
-the I<--period> option in order to set the collection period for the balloon
-driver. If I<--live> is specified, only the running guest collection period
-is affected. If I<--config> is specified, affect the next boot of a persistent
-guest. If I<--current> is specified, affect the current guest state.
-
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on the guest state.
-
-=item B<domname> I<domain-id-or-uuid>
-
-Convert a domain Id (or UUID) to domain name
-
-=item B<dompmsuspend> I<domain> I<target> [I<--duration>]
-
-Suspend a running domain into one of these states (possible I<target>
-values):
-    mem equivalent of S3 ACPI state
-    disk equivalent of S4 ACPI state
-    hybrid RAM is saved to disk but not powered off
-
-The I<--duration> argument specifies number of seconds before the domain is
-woken up after it was suspended (see also B<dompmwakeup>). Default is 0 for
-unlimited suspend time. (This feature isn't currently supported by any
-hypervisor driver and 0 should be used.).
-
-Note that this command requires a guest agent configured and running in the
-domain's guest OS.
-
-Beware that at least for QEMU, the domain's process will be terminated when
-target disk is used and a new process will be launched when libvirt is asked
-to wake up the domain. As a result of this, any runtime changes, such as
-device hotplug or memory settings, are lost unless such changes were made
-with I<--config> flag.
-
-
-=item B<dompmwakeup> I<domain>
-
-Wakeup a domain from pmsuspended state (either suspended by dompmsuspend or
-from the guest itself). Injects a wakeup into the guest that is in pmsuspended
-state, rather than waiting for the previously requested duration (if any) to
-elapse. This operation doesn't not necessarily fail if the domain is running.
-
-=item B<domrename> I<domain> I<new-name>
-
-Rename a domain. This command changes current domain name to the new name
-specified in the second argument.
-
-B<Note>: Domain must be inactive and without snapshots or checkpoints.
-
-=item B<domstate> I<domain> [I<--reason>]
-
-Returns state about a domain.  I<--reason> tells virsh to also print
-reason for the state.
-
-=item B<domstats> [I<--raw>] [I<--enforce>] [I<--backing>] [I<--nowait>]
-[I<--state>] [I<--cpu-total>] [I<--balloon>] [I<--vcpu>] [I<--interface>]
-[I<--block>] [I<--perf>] [I<--iothread>]
-[[I<--list-active>] [I<--list-inactive>]
-[I<--list-persistent>] [I<--list-transient>] [I<--list-running>]
-[I<--list-paused>] [I<--list-shutoff>] [I<--list-other>]] | [I<domain> ...]
-
-Get statistics for multiple or all domains. Without any argument this
-command prints all available statistics for all domains.
-
-The list of domains to gather stats for can be either limited by listing
-the domains as a space separated list, or by specifying one of the
-filtering flags I<--list-*>. (The approaches can't be combined.)
-
-By default some of the returned fields may be converted to more
-human friendly values by a set of pretty-printers. To suppress this
-behavior use the I<--raw> flag.
-
-The individual statistics groups are selectable via specific flags. By
-default all supported statistics groups are returned. Supported
-statistics groups flags are: I<--state>, I<--cpu-total>, I<--balloon>,
-I<--vcpu>, I<--interface>, I<--block>, I<--perf>, I<--iothread>.
-
-Note that - depending on the hypervisor type and version or the domain state
-- not all of the following statistics may be returned.
-
-When selecting the I<--state> group the following fields are returned:
-
- "state.state" - state of the VM, returned as number from
-                 virDomainState enum
- "state.reason" - reason for entering given state, returned
-                  as int from virDomain*Reason enum corresponding
-                  to given state
-
-I<--cpu-total> returns:
-
- "cpu.time" - total cpu time spent for this domain in nanoseconds
- "cpu.user" - user cpu time spent in nanoseconds
- "cpu.system" - system cpu time spent in nanoseconds
- "cpu.cache.monitor.count" - the number of cache monitors for this
-                             domain
- "cpu.cache.monitor.<num>.name" - the name of cache monitor <num>
- "cpu.cache.monitor.<num>.vcpus" - vcpu list of cache monitor <num>
- "cpu.cache.monitor.<num>.bank.count" - the number of cache banks
-                                        in cache monitor <num>
- "cpu.cache.monitor.<num>.bank.<index>.id" - host allocated cache id
-                                             for bank <index> in
-                                             cache monitor <num>
- "cpu.cache.monitor.<num>.bank.<index>.bytes" - the number of bytes
-                                                of last level cache
-                                                that the domain is
-                                                using on cache bank
-                                                <index>
-
-I<--balloon> returns:
-
- "balloon.current" - the memory in KiB currently used
- "balloon.maximum" - the maximum memory in KiB allowed
- "balloon.swap_in" - the amount of data read from swap space (in KiB)
- "balloon.swap_out" - the amount of memory written out to swap
-                      space (in KiB)
- "balloon.major_fault" - the number of page faults then disk IO
-                         was required
- "balloon.minor_fault" - the number of other page faults
- "balloon.unused" - the amount of memory left unused by the
-                    system (in KiB)
- "balloon.available" - the amount of usable memory as seen by
-                       the domain (in KiB)
- "balloon.rss" - Resident Set Size of running domain's process
-                 (in KiB)
- "balloon.usable" - the amount of memory which can be reclaimed by
-                    balloon without causing host swapping (in KiB)
- "balloon.last-update" - timestamp of the last update of statistics
-                         (in seconds)
- "balloon.disk_caches " - the amount of memory that can be reclaimed
-                          without additional I/O, typically disk
-                          caches (in KiB)
-
-I<--vcpu> returns:
-
- "vcpu.current" - current number of online virtual CPUs
- "vcpu.maximum" - maximum number of online virtual CPUs
- "vcpu.<num>.state" - state of the virtual CPU <num>, as
-                      number from virVcpuState enum
- "vcpu.<num>.time" - virtual cpu time spent by virtual
-                     CPU <num> (in microseconds)
- "vcpu.<num>.wait" - virtual cpu time spent by virtual
-                     CPU <num> waiting on I/O (in microseconds)
- "vcpu.<num>.halted" - virtual CPU <num> is halted: yes or
-                       no (may indicate the processor is idle
-                       or even disabled, depending on the
-                       architecture)
-
-I<--interface> returns:
-
- "net.count" - number of network interfaces on this domain
- "net.<num>.name" - name of the interface <num>
- "net.<num>.rx.bytes" - number of bytes received
- "net.<num>.rx.pkts" - number of packets received
- "net.<num>.rx.errs" - number of receive errors
- "net.<num>.rx.drop" - number of receive packets dropped
- "net.<num>.tx.bytes" - number of bytes transmitted
- "net.<num>.tx.pkts" - number of packets transmitted
- "net.<num>.tx.errs" - number of transmission errors
- "net.<num>.tx.drop" - number of transmit packets dropped
-
-I<--perf> returns the statistics of all enabled perf events:
-
- "perf.cmt" - the cache usage in Byte currently used
- "perf.mbmt" - total system bandwidth from one level of cache
- "perf.mbml" - bandwidth of memory traffic for a memory controller
- "perf.cpu_cycles" - the count of cpu cycles (total/elapsed)
- "perf.instructions" - the count of instructions
- "perf.cache_references" - the count of cache hits
- "perf.cache_misses" - the count of caches misses
- "perf.branch_instructions" - the count of branch instructions
- "perf.branch_misses" - the count of branch misses
- "perf.bus_cycles" - the count of bus cycles
- "perf.stalled_cycles_frontend" - the count of stalled frontend
-                                  cpu cycles
- "perf.stalled_cycles_backend" - the count of stalled backend
-                                 cpu cycles
- "perf.ref_cpu_cycles" - the count of ref cpu cycles
- "perf.cpu_clock" - the count of cpu clock time
- "perf.task_clock" - the count of task clock time
- "perf.page_faults" - the count of page faults
- "perf.context_switches" - the count of context switches
- "perf.cpu_migrations" - the count of cpu migrations
- "perf.page_faults_min" - the count of minor page faults
- "perf.page_faults_maj" - the count of major page faults
- "perf.alignment_faults" - the count of alignment faults
- "perf.emulation_faults" - the count of emulation faults
-
-See the B<perf> command for more details about each event.
-
-I<--block> returns information about disks associated with each
-domain.  Using the I<--backing> flag extends this information to
-cover all resources in the backing chain, rather than the default
-of limiting information to the active layer for each guest disk.
-Information listed includes:
-
- "block.count" - number of block devices being listed
- "block.<num>.name" - name of the target of the block
-                      device <num> (the same name for
-                      multiple entries if I<--backing>
-                      is present)
- "block.<num>.backingIndex" - when I<--backing> is present,
-                              matches up with the <backingStore>
-                              index listed in domain XML for
-                              backing files
- "block.<num>.path" - file source of block device <num>, if
-                      it is a local file or block device
- "block.<num>.rd.reqs" - number of read requests
- "block.<num>.rd.bytes" - number of read bytes
- "block.<num>.rd.times" - total time (ns) spent on reads
- "block.<num>.wr.reqs" - number of write requests
- "block.<num>.wr.bytes" - number of written bytes
- "block.<num>.wr.times" - total time (ns) spent on writes
- "block.<num>.fl.reqs" - total flush requests
- "block.<num>.fl.times" - total time (ns) spent on cache flushing
- "block.<num>.errors" - Xen only: the 'oo_req' value
- "block.<num>.allocation" - offset of highest written sector in bytes
- "block.<num>.capacity" - logical size of source file in bytes
- "block.<num>.physical" - physical size of source file in bytes
- "block.<num>.threshold" - threshold (in bytes) for delivering the
-                           VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD event
-                           See domblkthreshold.
-
-I<--iothread> returns information about IOThreads on the running guest
-if supported by the hypervisor.
-
-The "poll-max-ns" for each thread is the maximum nanoseconds to allow
-each polling interval to occur. A polling interval is a period of time
-allowed for a thread to process data before being the guest gives up
-its CPU quantum back to the host. A value set too small will not allow
-the IOThread to run long enough on a CPU to process data. A value set
-too high will consume too much CPU time per IOThread failing to allow
-other threads running on the CPU to get time. The polling interval is
-not available for statistical purposes.
-
- "iothread.<id>.poll-max-ns" - maximum polling time in nanoseconds used
-                               by the <id> IOThread. A value of 0 (zero)
-                               indicates polling is disabled.
- "iothread.<id>.poll-grow" - polling time grow value. A value of 0 (zero)
-                             indicates growth is managed by the hypervisor.
- "iothread.<id>.poll-shrink" - polling time shrink value. A value of
-                               0 (zero) indicates shrink is managed by
-                               the hypervisor.
-
-Selecting a specific statistics groups doesn't guarantee that the
-daemon supports the selected group of stats. Flag I<--enforce>
-forces the command to fail if the daemon doesn't support the
-selected group.
-
-When collecting stats libvirtd may wait for some time if there's
-already another job running on given domain for it to finish.
-This may cause unnecessary delay in delivering stats. Using
-I<--nowait> suppresses this behaviour. On the other hand
-some statistics might be missing for such domain.
-
-=item B<domtime> I<domain> { [I<--now>] [I<--pretty>] [I<--sync>]
-[I<--time> B<time>] }
-
-Gets or sets the domain's system time. When run without any arguments
-(but I<domain>), the current domain's system time is printed out. The
-I<--pretty> modifier can be used to print the time in more human
-readable form.
-
-When I<--time> B<time> is specified, the domain's time is
-not gotten but set instead. The I<--now> modifier acts like if it was
-an alias for I<--time> B<$now>, which means it sets the time that is
-currently on the host virsh is running at. In both cases (setting and
-getting), time is in seconds relative to Epoch of 1970-01-01 in UTC.
-The I<--sync> modifies the set behavior a bit: The time passed is
-ignored, but the time to set is read from domain's RTC instead. Please
-note, that some hypervisors may require a guest agent to be configured
-in order to get or set the guest time.
-
-=item B<domuuid> I<domain-name-or-id>
-
-Convert a domain name or id to domain UUID
-
-=item B<domxml-from-native> I<format> I<config>
-
-Convert the file I<config> in the native guest configuration format
-named by I<format> to a domain XML format. For QEMU/KVM hypervisor,
-the I<format> argument must be B<qemu-argv>. For Xen hypervisor, the
-I<format> argument may be B<xen-xm>, B<xen-xl>, or B<xen-sxpr>. For
-LXC hypervisor, the I<format> argument must be B<lxc-tools>. For
-VMware/ESX hypervisor, the I<format> argument must be B<vmware-vmx>.
-For the Bhyve hypervisor, the I<format> argument must be B<bhyve-argv>.
-
-=item B<domxml-to-native> I<format>
-{ [I<--xml>] I<xml> | I<--domain> I<domain-name-or-id-or-uuid> }
-
-Convert the file I<xml> into domain XML format or convert an existing
-I<--domain> to the native guest configuration format named by I<format>.
-The I<xml> and I<--domain> arguments are mutually exclusive. For the types
-of I<format> argument, refer to B<domxml-from-native>.
-
-=item B<dump> I<domain> I<corefilepath> [I<--bypass-cache>]
-{ [I<--live>] | [I<--crash>] | [I<--reset>] } [I<--verbose>] [I<--memory-only>]
-[I<--format> I<string>]
-
-Dumps the core of a domain to a file for analysis.
-If I<--live> is specified, the domain continues to run until the core
-dump is complete, rather than pausing up front.
-If I<--crash> is specified, the domain is halted with a crashed status,
-rather than merely left in a paused state.
-If I<--reset> is specified, the domain is reset after successful dump.
-Note, these three switches are mutually exclusive.
-If I<--bypass-cache> is specified, the save will avoid the file system
-cache, although this may slow down the operation.
-If I<--memory-only> is specified, the file is elf file, and will only
-include domain's memory and cpu common register value. It is very
-useful if the domain uses host devices directly.
-I<--format> I<string> is used to specify the format of 'memory-only'
-dump, and I<string> can be one of them: elf, kdump-zlib(kdump-compressed
-format with zlib-compressed), kdump-lzo(kdump-compressed format with
-lzo-compressed), kdump-snappy(kdump-compressed format with snappy-compressed).
-
-The progress may be monitored using B<domjobinfo> virsh command and canceled
-with B<domjobabort> command (sent by another virsh instance). Another option
-is to send SIGINT (usually with C<Ctrl-C>) to the virsh process running
-B<dump> command. I<--verbose> displays the progress of dump.
-
-NOTE: Some hypervisors may require the user to manually ensure proper
-permissions on file and path specified by argument I<corefilepath>.
-
-NOTE: Crash dump in a old kvmdump format is being obsolete and cannot be loaded
-and processed by crash utility since its version 6.1.0. A --memory-only option
-is required in order to produce valid ELF file which can be later processed by
-the crash utility.
-
-=item B<dumpxml> I<domain> [I<--inactive>] [I<--security-info>]
-[I<--update-cpu>] [I<--migratable>]
-
-Output the domain information as an XML dump to stdout, this format can be used
-by the B<create> command. Additional options affecting the XML dump may be
-used. I<--inactive> tells virsh to dump domain configuration that will be used
-on next start of the domain as opposed to the current domain configuration.
-Using I<--security-info> will also include security sensitive information
-in the XML dump. I<--update-cpu> updates domain CPU requirements according to
-host CPU. With I<--migratable> one can request an XML that is suitable for
-migrations, i.e., compatible with older libvirt releases and possibly amended
-with internal run-time options. This option may automatically enable other
-options (I<--update-cpu>, I<--security-info>, ...) as necessary.
-
-=item B<edit> I<domain>
-
-Edit the XML configuration file for a domain, which will affect the
-next boot of the guest.
-
-This is equivalent to:
-
- virsh dumpxml --inactive --security-info domain > domain.xml
- vi domain.xml (or make changes with your other text editor)
- virsh define domain.xml
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<emulatorpin> I<domain> [I<cpulist>] [[I<--live>] [I<--config>]
- | [I<--current>]]
-
-Query or change the pinning of domain's emulator threads to host physical
-CPUs.
-
-See B<vcpupin> for I<cpulist>.
-
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given if I<cpulist> is present,
-but I<--current> is exclusive.
-If no flag is specified, behavior is different depending on hypervisor.
-
-=item B<event> {[I<domain>] { I<event> | I<--all> } [I<--loop>]
-[I<--timeout> I<seconds>] [I<--timestamp>] | I<--list>}
-
-Wait for a class of domain events to occur, and print appropriate details
-of events as they happen.  The events can optionally be filtered by
-I<domain>.  Using I<--list> as the only argument will provide a list
-of possible I<event> values known by this client, although the connection
-might not allow registering for all these events.  It is also possible
-to use I<--all> instead of I<event> to register for all possible event
-types at once.
-
-By default, this command is one-shot, and returns success once an event
-occurs; you can send SIGINT (usually via C<Ctrl-C>) to quit immediately.
-If I<--timeout> is specified, the command gives up waiting for events
-after I<seconds> have elapsed.   With I<--loop>, the command prints all
-events until a timeout or interrupt key.
-
-When I<--timestamp> is used, a human-readable timestamp will be printed
-before the event.
-
-=item B<guest-agent-timeout> I<domain> I<--timeout> B<value>
-
-Set how long to wait for a response from guest agent commands. By default,
-agent commands block forever waiting for a response. B<value> must be a
-positive value (wait for given amount of seconds) or one of the following
-values:
-
- -2 - block forever waiting for a result,
- -1 - reset timeout to the default value,
-  0 - do not wait at all,
-
-=item B<guestinfo> I<domain> [I<--user>] [I<--os>] [I<--timezone>]
-[I<--hostname>] [I<--filesystem>]
-
-Print information about the guest from the point of view of the guest agent.
-Note that this command requires a guest agent to be configured and running in
-the domain's guest OS.
-
-When run without any arguments, this command prints all information types that
-are supported by the guest agent. You can limit the types of information that
-are returned by specifying one or more flags.  If a requested information
-type is not supported, the processes will provide an exit code of 1.
-Available information types flags are I<--user>, I<--os>,
-I<--timezone>, I<--hostname>, and I<--filesystem>.
-
-Note that depending on the hypervisor type and the version of the guest agent
-running within the domain, not all of the following information may be
-returned.
-
-When selecting the I<--user> information type, the following fields may be
-returned:
-
- "user.count" - the number of active users on this domain
- "user.<num>.name" - username of user <num>
- "user.<num>.domain" - domain of the user <num> (may only be present on certain
-                       guest types)
- "user.<num>.login-time" - the login time of user <num> in milliseconds since
-                           the epoch
-
-I<--os> returns:
-
- "os.id" - a string identifying the operating system
- "os.name" - the name of the operating system
- "os.pretty-name" - a pretty name for the operating system
- "os.version" - the version of the operating system
- "os.version-id" - the version id of the operating system
- "os.kernel-release" - the release of the operating system kernel
- "os.kernel-version" - the version of the operating system kernel
- "os.machine" - the machine hardware name
- "os.variant" - a specific variant or edition of the operating system
- "os.variant-id" - the id for a specific variant or edition of the operating
-                   system
-
-I<--timezone> returns:
-
- "timezone.name" - the name of the timezone
- "timezone.offset" - the offset to UTC in seconds
-
-I<--hostname> returns:
-
-  "hostname" - the hostname of the domain
-
-I<--filesystem> returns:
-
-  "fs.count" - the number of filesystems defined on this domain
-  "fs.<num>.mountpoint" - the path to the mount point for filesystem <num>
-  "fs.<num>.name" - device name in the guest (e.g. "sda1") for filesystem <num>
-  "fs.<num>.fstype" - the type of filesystem <num>
-  "fs.<num>.total-bytes" - the total size of filesystem <num>
-  "fs.<num>.used-bytes" - the number of bytes used in filesystem <num>
-  "fs.<num>.disk.count" - the number of disks targeted by filesystem <num>
-  "fs.<num>.disk.<num>.alias" - the device alias of disk <num> (e.g. sda)
-  "fs.<num>.disk.<num>.serial" - the serial number of disk <num>
-  "fs.<num>.disk.<num>.device" - the device node of disk <num>
-
-=item B<guestvcpus> I<domain> [[I<--enable>] | [I<--disable>]] [I<cpulist>]
-
-Query or change state of vCPUs from guest's point of view using the guest agent.
-When invoked without I<cpulist> the guest is queried for available guest vCPUs,
-their state and possibility to be offlined.
-
-If I<cpulist> is provided then one of I<--enable> or I<--disable> must be
-provided too. The desired operation is then executed on the domain.
-
-See B<vcpupin> for information on I<cpulist>.
-
-=item B<iothreadadd> I<domain> I<iothread_id>
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Add a new IOThread to the domain using the specified I<iothread_id>.
-If the I<iothread_id> already exists, the command will fail. The
-I<iothread_id> must be greater than zero.
-
-If I<--live> is specified, affect a running guest. If the guest is not
-running an error is returned.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified or I<--live> and I<--config> are not specified,
-affect the current guest state.
-
-=item B<iothreaddel> I<domain> I<iothread_id>
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Delete an IOThread from the domain using the specified I<iothread_id>.
-If an IOThread is currently assigned to a disk resource such as via the
-B<attach-disk> command, then the attempt to remove the IOThread will fail.
-If the I<iothread_id> does not exist an error will occur.
-
-If I<--live> is specified, affect a running guest. If the guest is not
-running an error is returned.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified or I<--live> and I<--config> are not specified,
-affect the current guest state.
-
-=item B<iothreadinfo> I<domain> [[I<--live>] [I<--config>] | [I<--current>]]
-
-Display basic domain IOThreads information including the IOThread ID and
-the CPU Affinity for each IOThread.
-
-If I<--live> is specified, get the IOThreads data from the running guest. If
-the guest is not running, an error is returned.
-If I<--config> is specified, get the IOThreads data from the next boot of
-a persistent guest.
-If I<--current> is specified or I<--live> and I<--config> are not specified,
-then get the IOThread data based on the current guest state.
-
-=item B<iothreadpin> I<domain> I<iothread> I<cpulist>
-[[I<--live>] [I<--config>] | [I<--current>]]
-
-Change the pinning of a domain IOThread to host physical CPUs. In order
-to retrieve a list of all IOThreads, use B<iothreadinfo>. To pin an
-I<iothread> specify the I<cpulist> desired for the IOThread ID as listed
-in the B<iothreadinfo> output.
-
-I<cpulist> is a list of physical CPU numbers. Its syntax is a comma
-separated list and a special markup using '-' and '^' (ex. '0-4', '0-3,^2') can
-also be allowed. The '-' denotes the range and the '^' denotes exclusive.
-If you want to reset iothreadpin setting, that is, to pin an I<iothread>
-to all physical cpus, simply specify 'r' as a I<cpulist>.
-
-If I<--live> is specified, affect a running guest. If the guest is not running,
-an error is returned.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified or I<--live> and I<--config> are not specified,
-affect the current guest state.
-Both I<--live> and I<--config> flags may be given if I<cpulist> is present,
-but I<--current> is exclusive.
-If no flag is specified, behavior is different depending on hypervisor.
-
-B<Note>: The expression is sequentially evaluated, so "0-15,^8" is
-identical to "9-14,0-7,15" but not identical to "^8,0-15".
-
-=item B<iothreadset> I<domain> I<iothread_id>
-[[I<--poll-max-ns> B<ns>] [I<--poll-grow> B<factor>]
-[I<--poll-shrink> B<divisor>]]
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Modifies an existing iothread of the domain using the specified
-I<iothread_id>. The I<--poll-max-ns> provides the maximum polling
-interval to be allowed for an IOThread in ns. If a 0 (zero) is provided,
-then polling for the IOThread is disabled.  The I<--poll-grow> is the
-factor by which the current polling time will be adjusted in order to
-reach the maximum polling time. If a 0 (zero) is provided, then the
-default factor will be used. The I<--poll-shrink> is the quotient
-by which the current polling time will be reduced in order to get
-below the maximum polling interval. If a 0 (zero) is provided, then
-the default quotient will be used. The polling values are purely dynamic
-for a running guest. Saving, destroying, stopping, etc. the guest will
-result in the polling values returning to hypervisor defaults at the
-next start, restore, etc.
-
-If I<--live> is specified, affect a running guest. If the guest is not
-running an error is returned.
-If I<--current> is specified or I<--live> is not specified, then handle
-as if I<--live> was specified.
-
-=item B<managedsave> I<domain> [I<--bypass-cache>]
-[{I<--running> | I<--paused>}] [I<--verbose>]
-
-Save and destroy (stop) a running domain, so it can be restarted from the same
-state at a later time.  When the virsh B<start> command is next run for
-the domain, it will automatically be started from this saved state.
-If I<--bypass-cache> is specified, the save will avoid the file system
-cache, although this may slow down the operation.
-
-The progress may be monitored using B<domjobinfo> virsh command and canceled
-with B<domjobabort> command (sent by another virsh instance). Another option
-is to send SIGINT (usually with C<Ctrl-C>) to the virsh process running
-B<managedsave> command. I<--verbose> displays the progress of save.
-
-Normally, starting a managed save will decide between running or paused
-based on the state the domain was in when the save was done; passing
-either the I<--running> or I<--paused> flag will allow overriding which
-state the B<start> should use.
-
-The B<dominfo> command can be used to query whether a domain currently
-has any managed save image.
-
-=item B<managedsave-define> I<domain> I<xml> [{I<--running> | I<--paused>}]
-
-Update the domain XML that will be used when I<domain> is later
-started. The I<xml> argument must be a file name containing
-the alternative XML, with changes only in the host-specific portions of
-the domain XML. For example, it can be used to change disk file paths.
-
-The managed save image records whether the domain should be started to a
-running or paused state.  Normally, this command does not alter the
-recorded state; passing either the I<--running> or I<--paused> flag
-will allow overriding which state the B<start> should use.
-
-=item B<managedsave-dumpxml> I<domain> [I<--security-info>]
-
-Extract the domain XML that was in effect at the time the saved state
-file I<file> was created with the B<managedsave> command.  Using
-I<--security-info> will also include security sensitive information.
-
-=item B<managedsave-edit> I<domain> [{I<--running> | I<--paused>}]
-
-Edit the XML configuration associated with a saved state file of a
-I<domain> was created by the B<managedsave> command.
-
-The managed save image records whether the domain should be started to a
-running or paused state.  Normally, this command does not alter the
-recorded state; passing either the I<--running> or I<--paused> flag
-will allow overriding which state the B<restore> should use.
-
-This is equivalent to:
-
- virsh managedsave-dumpxml domain-name > state-file.xml
- vi state-file.xml (or make changes with your other text editor)
- virsh managedsave-define domain-name state-file-xml
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<managedsave-remove> I<domain>
-
-Remove the B<managedsave> state file for a domain, if it exists.  This
-ensures the domain will do a full boot the next time it is started.
-
-=item B<maxvcpus> [I<type>]
-
-Provide the maximum number of virtual CPUs supported for a guest VM on
-this connection.  If provided, the I<type> parameter must be a valid
-type attribute for the <domain> element of XML.
-
-=item B<memtune> I<domain> [I<--hard-limit> B<size>]
-[I<--soft-limit> B<size>] [I<--swap-hard-limit> B<size>]
-[I<--min-guarantee> B<size>] [[I<--config>] [I<--live>] | [I<--current>]]
-
-Allows you to display or set the domain memory parameters. Without
-flags, the current settings are displayed; with a flag, the
-appropriate limit is adjusted if supported by the hypervisor.  LXC and
-QEMU/KVM support I<--hard-limit>, I<--soft-limit>, and I<--swap-hard-limit>.
-I<--min-guarantee> is supported only by ESX hypervisor.  Each of these
-limits are scaled integers (see B<NOTES> above), with a default of
-kibibytes (blocks of 1024 bytes) if no suffix is present. Libvirt rounds
-up to the nearest kibibyte.  Some hypervisors require a larger granularity
-than KiB, and requests that are not an even multiple will be rounded up.
-For example, vSphere/ESX rounds the parameter up to mebibytes (1024 kibibytes).
-
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-
-For QEMU/KVM, the parameters are applied to the QEMU process as a whole.
-Thus, when counting them, one needs to add up guest RAM, guest video RAM, and
-some memory overhead of QEMU itself.  The last piece is hard to determine so
-one needs guess and try.
-
-For LXC, the displayed hard_limit value is the current memory setting
-from the XML or the results from a B<virsh setmem> command.
-
-=over 4
-
-=item I<--hard-limit>
-
-The maximum memory the guest can use.
-
-=item I<--soft-limit>
-
-The memory limit to enforce during memory contention.
-
-=item I<--swap-hard-limit>
-
-The maximum memory plus swap the guest can use.  This has to be more
-than hard-limit value provided.
-
-=item I<--min-guarantee>
-
-The guaranteed minimum memory allocation for the guest.
-
-=back
-
-Specifying -1 as a value for these limits is interpreted as unlimited.
-
-=item B<metadata> I<domain> [[I<--live>] [I<--config>] | [I<--current>]]
-[I<--edit>] [I<uri>] [I<key>] [I<set>] [I<--remove>]
-
-Show or modify custom XML metadata of a domain. The metadata is a user
-defined XML that allows storing arbitrary XML data in the domain definition.
-Multiple separate custom metadata pieces can be stored in the domain XML.
-The pieces are identified by a private XML namespace provided via the
-I<uri> argument. (See also B<desc> that works with textual metadata of
-a domain.)
-
-Flags I<--live> or I<--config> select whether this command works on live
-or persistent definitions of the domain. If both I<--live> and I<--config>
-are specified, the I<--config> option takes precedence on getting the current
-description and both live configuration and config are updated while setting
-the description. I<--current> is exclusive and implied if none of these was
-specified.
-
-Flag I<--remove> specifies that the metadata element specified by the I<uri>
-argument should be removed rather than updated.
-
-Flag I<--edit> specifies that an editor with the metadata identified by the
-I<uri> argument should be opened and the contents saved back afterwards.
-Otherwise the new contents can be provided via the I<set> argument.
-
-When setting metadata via I<--edit> or I<set> the I<key> argument must be
-specified and is used to prefix the custom elements to bind them
-to the private namespace.
-
-If neither of I<--edit> and I<set> are specified the XML metadata corresponding
-to the I<uri> namespace is displayed instead of being modified.
-
-=item B<migrate> [I<--live>] [I<--offline>] [I<--direct>] [I<--p2p> [I<--tunnelled>]]
-[I<--persistent>] [I<--undefinesource>] [I<--suspend>] [I<--copy-storage-all>]
-[I<--copy-storage-inc>] [I<--change-protection>] [I<--unsafe>] [I<--verbose>]
-[I<--rdma-pin-all>] [I<--abort-on-error>] [I<--postcopy>] [I<--postcopy-after-precopy>]
-I<domain> I<desturi> [I<migrateuri>] [I<graphicsuri>] [I<listen-address>] [I<dname>]
-[I<--timeout> B<seconds> [I<--timeout-suspend> | I<--timeout-postcopy>]]
-[I<--xml> B<file>] [I<--migrate-disks> B<disk-list>] [I<--disks-port> B<port>]
-[I<--compressed>] [I<--comp-methods> B<method-list>]
-[I<--comp-mt-level>] [I<--comp-mt-threads>] [I<--comp-mt-dthreads>]
-[I<--comp-xbzrle-cache>] [I<--auto-converge>] [I<auto-converge-initial>]
-[I<auto-converge-increment>] [I<--persistent-xml> B<file>] [I<--tls>]
-[I<--postcopy-bandwidth> B<bandwidth>]
-[I<--parallel> [I<--parallel-connections> B<connections>]]
-[I<--bandwidth> B<bandwidth>]
-
-Migrate domain to another host.  Add I<--live> for live migration; <--p2p>
-for peer-2-peer migration; I<--direct> for direct migration; or I<--tunnelled>
-for tunnelled migration.  I<--offline> migrates domain definition without
-starting the domain on destination and without stopping it on source host.
-Offline migration may be used with inactive domains and it must be used with
-I<--persistent> option.  I<--persistent> leaves the domain persistent on
-destination host, I<--undefinesource> undefines the domain on the source host,
-and I<--suspend> leaves the domain paused on the destination host.
-I<--copy-storage-all> indicates migration with non-shared storage with full
-disk copy, I<--copy-storage-inc> indicates migration with non-shared storage
-with incremental copy (same base image shared between source and destination).
-In both cases the disk images have to exist on destination host, the
-I<--copy-storage-...> options only tell libvirt to transfer data from the
-images on source host to the images found at the same place on the destination
-host. By default only non-shared non-readonly images are transferred. Use
-I<--migrate-disks> to explicitly specify a list of disk targets to
-transfer via the comma separated B<disk-list> argument. I<--change-protection>
-enforces that no incompatible configuration changes will be made to the domain
-while the migration is underway; this flag is implicitly enabled when supported
-by the hypervisor, but can be explicitly used to reject the migration if the
-hypervisor lacks change protection support.  I<--verbose> displays the progress
-of migration.  I<--abort-on-error> cancels
-the migration if a soft error (for example I/O error) happens during the
-migration. I<--postcopy> enables post-copy logic in migration, but does not
-actually start post-copy, i.e., migration is started in pre-copy mode.
-Once migration is running, the user may switch to post-copy using the
-B<migrate-postcopy> command sent from another virsh instance or use
-I<--postcopy-after-precopy> along with I<--postcopy> to let libvirt
-automatically switch to post-copy after the first pass of pre-copy is finished.
-The maximum bandwidth consumed during the post-copy phase may be limited using
-I<--postcopy-bandwidth>. The maximum bandwidth consumed during the pre-copy phase
-may be limited using I<--bandwidth>.
-
-I<--auto-converge> forces convergence during live migration. The initial
-guest CPU throttling rate can be set with I<auto-converge-initial>. If the
-initial throttling rate is not enough to ensure convergence, the rate is
-periodically increased by I<auto-converge-increment>.
-
-I<--rdma-pin-all> can be used with RDMA migration (i.e., when I<migrateuri>
-starts with rdma://) to tell the hypervisor to pin all domain's memory at once
-before migration starts rather than letting it pin memory pages as needed. For
-QEMU/KVM this requires hard_limit memory tuning element (in the domain XML) to
-be used and set to the maximum memory configured for the domain plus any memory
-consumed by the QEMU process itself. Beware of setting the memory limit too
-high (and thus allowing the domain to lock most of the host's memory). Doing so
-may be dangerous to both the domain and the host itself since the host's kernel
-may run out of memory.
-
-B<Note>: Individual hypervisors usually do not support all possible types of
-migration. For example, QEMU does not support direct migration.
-
-In some cases libvirt may refuse to migrate the domain because doing so may
-lead to potential problems such as data corruption, and thus the migration is
-considered unsafe. For QEMU domain, this may happen if the domain uses disks
-without explicitly setting cache mode to "none". Migrating such domains is
-unsafe unless the disk images are stored on coherent clustered filesystem,
-such as GFS2 or GPFS. If you are sure the migration is safe or you just do not
-care, use I<--unsafe> to force the migration.
-
-I<dname> is used for renaming the domain to new name during migration, which
-also usually can be omitted.  Likewise, I<--xml> B<file> is usually
-omitted, but can be used to supply an alternative XML file for use on
-the destination to supply a larger set of changes to any host-specific
-portions of the domain XML, such as accounting for naming differences
-between source and destination in accessing underlying storage.
-If I<--persistent> is enabled, I<--persistent-xml> B<file> can be used to
-supply an alternative XML file which will be used as the persistent domain
-definition on the destination host.
-
-I<--timeout> B<seconds> tells virsh to run a specified action when live
-migration exceeds that many seconds.  It can only be used with I<--live>.
-If I<--timeout-suspend> is specified, the domain will be suspended after
-the timeout and the migration will complete offline; this is the default
-if no I<--timeout-*> option is specified on the command line.  When
-I<--timeout-postcopy> is used, virsh will switch migration from pre-copy
-to post-copy upon timeout; migration has to be started with I<--postcopy>
-option for this to work.
-
-I<--compressed> activates compression, the compression method is chosen
-with I<--comp-methods>. Supported methods are "mt" and "xbzrle" and
-can be used in any combination. When no methods are specified, a hypervisor
-default methods will be used. QEMU defaults to "xbzrle". Compression methods
-can be tuned further. I<--comp-mt-level> sets compression level.
-Values are in range from 0 to 9, where 1 is maximum speed and 9 is maximum
-compression. I<--comp-mt-threads> and I<--comp-mt-dthreads> set the number
-of compress threads on source and the number of decompress threads on target
-respectively. I<--comp-xbzrle-cache> sets size of page cache in bytes.
-
-Providing I<--tls> causes the migration to use the host configured TLS setup
-(see migrate_tls_x509_cert_dir in /etc/libvirt/qemu.conf) in order to perform
-the migration of the domain. Usage requires proper TLS setup for both source
-and target.
-
-I<--parallel> option will cause migration data to be sent over multiple
-parallel connections. The number of such connections can be set using
-I<--parallel-connections>. Parallel connections may help with saturating the
-network link between the source and the target and thus speeding up the
-migration.
-
-Running migration can be canceled by interrupting virsh (usually using
-C<Ctrl-C>) or by B<domjobabort> command sent from another virsh instance.
-
-The I<desturi> and I<migrateuri> parameters can be used to control which
-destination the migration uses.  I<desturi> is important for managed
-migration, but unused for direct migration; I<migrateuri> is required
-for direct migration, but can usually be automatically determined for
-managed migration.
-
-B<Note>: The I<desturi> parameter for normal migration and peer2peer migration
-has different semantics:
-
-=over 4
-
-=item * normal migration: the I<desturi> is an address of the target host as
-seen from the client machine.
-
-=item * peer2peer migration: the I<desturi> is an address of the target host as
-seen from the source machine.
-
-=back
-
-When I<migrateuri> is not specified, libvirt will automatically determine the
-hypervisor specific URI.  Some hypervisors, including QEMU, have an optional
-"migration_host" configuration parameter (useful when the host has multiple
-network interfaces).  If this is unspecified, libvirt determines a name
-by looking up the target host's configured hostname.
-
-There are a few scenarios where specifying I<migrateuri> may help:
-
-=over 4
-
-=item * The configured hostname is incorrect, or DNS is broken.  If a host has a
-hostname which will not resolve to match one of its public IP addresses, then
-libvirt will generate an incorrect URI.  In this case I<migrateuri> should be
-explicitly specified, using an IP address, or a correct hostname.
-
-=item * The host has multiple network interfaces.  If a host has multiple network
-interfaces, it might be desirable for the migration data stream to be sent over
-a specific interface for either security or performance reasons.  In this case
-I<migrateuri> should be explicitly specified, using an IP address associated
-with the network to be used.
-
-=item * The firewall restricts what ports are available.  When libvirt generates
-a migration URI, it will pick a port number using hypervisor specific rules.
-Some hypervisors only require a single port to be open in the firewalls, while
-others require a whole range of port numbers.  In the latter case I<migrateuri>
-might be specified to choose a specific port number outside the default range in
-order to comply with local firewall policies.
-
-=back
-
-See L<https://libvirt.org/migration.html#uris> for more details on
-migration URIs.
-
-Optional I<graphicsuri> overrides connection parameters used for automatically
-reconnecting a graphical clients at the end of migration. If omitted, libvirt
-will compute the parameters based on target host IP address. In case the
-client does not have a direct access to the network virtualization hosts are
-connected to and needs to connect through a proxy, I<graphicsuri> may be used
-to specify the address the client should connect to. The URI is formed as
-follows:
-
-    protocol://hostname[:port]/[?parameters]
-
-where protocol is either "spice" or "vnc" and parameters is a list of protocol
-specific parameters separated by '&'. Currently recognized parameters are
-"tlsPort" and "tlsSubject". For example,
-
-    spice://target.host.com:1234/?tlsPort=4567
-
-Optional I<listen-address> sets the listen address that hypervisor on the
-destination side should bind to for incoming migration. Both IPv4 and IPv6
-addresses are accepted as well as hostnames (the resolving is done on
-destination). Some hypervisors do not support this feature and will return an
-error if this parameter is used.
-
-Optional I<disks-port> sets the port that hypervisor on destination side should
-bind to for incoming disks traffic. Currently it is supported only by qemu.
-
-=item B<migrate-compcache> I<domain> [I<--size> B<bytes>]
-
-Sets and/or gets size of the cache (in bytes) used for compressing repeatedly
-transferred memory pages during live migration. When called without I<size>,
-the command just prints current size of the compression cache. When I<size>
-is specified, the hypervisor is asked to change compression cache to I<size>
-bytes and then the current size is printed (the result may differ from the
-requested size due to rounding done by the hypervisor). The I<size> option
-is supposed to be used while the domain is being live-migrated as a reaction
-to migration progress and increasing number of compression cache misses
-obtained from domjobinfo.
-
-=item B<migrate-getmaxdowntime> I<domain>
-
-Get the maximum tolerable downtime for a domain which is being live-migrated to
-another host.  This is the number of milliseconds the guest is allowed
-to be down at the end of live migration.
-
-=item B<migrate-getspeed> I<domain> [I<--postcopy>]
-
-Get the maximum migration bandwidth (in MiB/s) for a domain. If the
-I<--postcopy> option is specified, the command will get the maximum bandwidth
-allowed during a post-copy migration phase.
-
-=item B<migrate-postcopy> I<domain>
-
-Switch the current migration from pre-copy to post-copy. This is only
-supported for a migration started with I<--postcopy> option.
-
-=item B<migrate-setmaxdowntime> I<domain> I<downtime>
-
-Set maximum tolerable downtime for a domain which is being live-migrated to
-another host.  The I<downtime> is a number of milliseconds the guest is allowed
-to be down at the end of live migration.
-
-=item B<migrate-setspeed> I<domain> I<bandwidth> [I<--postcopy>]
-
-Set the maximum migration bandwidth (in MiB/s) for a domain which is being
-migrated to another host. I<bandwidth> is interpreted as an unsigned long
-long value. Specifying a negative value results in an essentially unlimited
-value being provided to the hypervisor. The hypervisor can choose whether to
-reject the value or convert it to the maximum value allowed. If the
-I<--postcopy> option is specified, the command will set the maximum bandwidth
-allowed during a post-copy migration phase.
-
-=item B<numatune> I<domain> [I<--mode> B<mode>] [I<--nodeset> B<nodeset>]
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Set or get a domain's numa parameters, corresponding to the <numatune>
-element of domain XML.  Without flags, the current settings are
-displayed.
-
-I<mode> can be one of `strict', `interleave' and `preferred' or any
-valid number from the virDomainNumatuneMemMode enum in case the daemon
-supports it.  For a running domain, the mode can't be changed, and the
-nodeset can be changed only if the domain was started with a mode of
-`strict'.
-
-I<nodeset> is a list of numa nodes used by the host for running the domain.
-Its syntax is a comma separated list, with '-' for ranges and '^' for
-excluding a node.
-
-If I<--live> is specified, set scheduler information of a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-
-=item B<perf> I<domain> [I<--enable> B<eventSpec>]
-[I<--disable> B<eventSpec>]
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Get the current perf events setting or enable/disable specific perf
-events for a guest domain.
-
-Perf is a performance analyzing tool in Linux, and it can instrument
-CPU performance counters, tracepoints, kprobes, and uprobes (dynamic
-tracing). Perf supports a list of measurable events, and can measure
-events coming from different sources. For instance, some event are
-pure kernel counters, in this case they are called software events,
-including context-switches, minor-faults, etc.. Now dozens of events
-from different sources can be supported by perf.
-
-Currently only QEMU/KVM supports this command. The I<--enable> and I<--disable>
-option combined with B<eventSpec> can be used to enable or disable specific
-performance event. B<eventSpec> is a string list of one or more events
-separated by commas. Valid event names are as follows:
-
-B<Valid perf event names>
-  cmt              - A PQos (Platform Qos) feature to monitor the
-                     usage of cache by applications running on the
-                     platform.
-  mbmt             - Provides a way to monitor the total system
-                     memory bandwidth between one level of cache
-                     and another.
-  mbml             - Provides a way to limit the amount of data
-                     (bytes/s) send through the memory controller
-                     on the socket.
-  cache_misses     - Provides the count of cache misses by
-                     applications running on the platform.
-  cache_references - Provides the count of cache hits by
-                     applications running on th e platform.
-  instructions     - Provides the count of instructions executed
-                     by applications running on the platform.
-  cpu_cycles       - Provides the count of cpu cycles
-                     (total/elapsed). May be used with
-                     instructions in order to get a cycles
-                     per instruction.
-  branch_instructions - Provides the count of branch instructions
-                        executed by applications running on the
-                        platform.
-  branch_misses    - Provides the count of branch misses executed
-                     by applications running on the platform.
-  bus_cycles       - Provides the count of bus cycles executed
-                     by applications running on the platform.
-  stalled_cycles_frontend - Provides the count of stalled cpu
-                            cycles in the frontend of the
-                            instruction processor pipeline by
-                            applications running on the platform.
-  stalled_cycles_backend - Provides the count of stalled cpu
-                           cycles in the backend of the
-                           instruction processor pipeline by
-                           applications running on the platform.
-  ref_cpu_cycles   -  Provides the count of total cpu cycles
-                      not affected by CPU frequency scaling by
-                      applications running on the platform.
-  cpu_clock - Provides the cpu clock time consumed by
-              applications running on the platform.
-  task_clock - Provides the task clock time consumed by
-               applications running on the platform.
-  page_faults - Provides the count of page faults by
-                applications running on the platform.
-  context_switches - Provides the count of context switches
-                     by applications running on the platform.
-  cpu_migrations - Provides the count cpu migrations by
-                   applications running on the platform.
-  page_faults_min - Provides the count minor page faults
-                    by applications running on the platform.
-  page_faults_maj - Provides the count major page faults
-                    by applications running on the platform.
-  alignment_faults - Provides the count alignment faults
-                     by applications running on the platform.
-  emulation_faults - Provides the count emulation faults
-                     by applications running on the platform.
-
-B<Note>: The statistics can be retrieved using the B<domstats> command using
-the I<--perf> flag.
-
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-
-=item B<reboot> I<domain> [I<--mode MODE-LIST>]
-
-Reboot a domain.  This acts just as if the domain had the B<reboot>
-command run from the console.  The command returns as soon as it has
-executed the reboot action, which may be significantly before the
-domain actually reboots.
-
-The exact behavior of a domain when it reboots is set by the
-I<on_reboot> parameter in the domain's XML definition.
-
-By default the hypervisor will try to pick a suitable shutdown
-method. To specify an alternative method, the I<--mode> parameter
-can specify a comma separated list which includes C<acpi>, C<agent>,
-C<initctl>, C<signal> and C<paravirt>. The order in which drivers will
-try each mode is undefined, and not related to the order specified to virsh.
-For strict control over ordering, use a single mode at a time and
-repeat the command.
-
-=item B<reset> I<domain>
-
-Reset a domain immediately without any guest shutdown. B<reset>
-emulates the power reset button on a machine, where all guest
-hardware sees the RST line set and reinitializes internal state.
-
-B<Note>: Reset without any guest OS shutdown risks data loss.
-
-=item B<restore> I<state-file> [I<--bypass-cache>] [I<--xml> B<file>]
-[{I<--running> | I<--paused>}]
-
-Restores a domain from a B<virsh save> state file. See I<save> for more info.
-
-If I<--bypass-cache> is specified, the restore will avoid the file system
-cache, although this may slow down the operation.
-
-I<--xml> B<file> is usually omitted, but can be used to supply an
-alternative XML file for use on the restored guest with changes only
-in the host-specific portions of the domain XML.  For example, it can
-be used to account for file naming differences in underlying storage
-due to disk snapshots taken after the guest was saved.
-
-Normally, restoring a saved image will use the state recorded in the
-save image to decide between running or paused; passing either the
-I<--running> or I<--paused> flag will allow overriding which state the
-domain should be started in.
-
-B<Note>: To avoid corrupting file system contents within the domain, you
-should not reuse the saved state file for a second B<restore> unless you
-have also reverted all storage volumes back to the same contents as when
-the state file was created.
-
-=item B<resume> I<domain>
-
-Moves a domain out of the suspended state.  This will allow a previously
-suspended domain to now be eligible for scheduling by the underlying
-hypervisor.
-
-=item B<save> I<domain> I<state-file> [I<--bypass-cache>] [I<--xml> B<file>]
-[{I<--running> | I<--paused>}] [I<--verbose>]
-
-Saves a running domain (RAM, but not disk state) to a state file so that
-it can be restored
-later.  Once saved, the domain will no longer be running on the
-system, thus the memory allocated for the domain will be free for
-other domains to use.  B<virsh restore> restores from this state file.
-If I<--bypass-cache> is specified, the save will avoid the file system
-cache, although this may slow down the operation.
-
-The progress may be monitored using B<domjobinfo> virsh command and canceled
-with B<domjobabort> command (sent by another virsh instance). Another option
-is to send SIGINT (usually with C<Ctrl-C>) to the virsh process running
-B<save> command. I<--verbose> displays the progress of save.
-
-This is roughly equivalent to doing a hibernate on a running computer,
-with all the same limitations.  Open network connections may be
-severed upon restore, as TCP timeouts may have expired.
-
-I<--xml> B<file> is usually omitted, but can be used to supply an
-alternative XML file for use on the restored guest with changes only
-in the host-specific portions of the domain XML.  For example, it can
-be used to account for file naming differences that are planned to
-be made via disk snapshots of underlying storage after the guest is saved.
-
-Normally, restoring a saved image will decide between running or paused
-based on the state the domain was in when the save was done; passing
-either the I<--running> or I<--paused> flag will allow overriding which
-state the B<restore> should use.
-
-Domain saved state files assume that disk images will be unchanged
-between the creation and restore point.  For a more complete system
-restore point, where the disk state is saved alongside the memory
-state, see the B<snapshot> family of commands.
-
-=item B<save-image-define> I<file> I<xml> [{I<--running> | I<--paused>}]
-
-Update the domain XML that will be used when I<file> is later
-used in the B<restore> command.  The I<xml> argument must be a file
-name containing the alternative XML, with changes only in the
-host-specific portions of the domain XML.  For example, it can
-be used to account for file naming differences resulting from creating
-disk snapshots of underlying storage after the guest was saved.
-
-The save image records whether the domain should be restored to a
-running or paused state.  Normally, this command does not alter the
-recorded state; passing either the I<--running> or I<--paused> flag
-will allow overriding which state the B<restore> should use.
-
-=item B<save-image-dumpxml> I<file> [I<--security-info>]
-
-Extract the domain XML that was in effect at the time the saved state
-file I<file> was created with the B<save> command.  Using
-I<--security-info> will also include security sensitive information.
-
-=item B<save-image-edit> I<file> [{I<--running> | I<--paused>}]
-
-Edit the XML configuration associated with a saved state file I<file>
-created by the B<save> command.
-
-The save image records whether the domain should be restored to a
-running or paused state.  Normally, this command does not alter the
-recorded state; passing either the I<--running> or I<--paused> flag
-will allow overriding which state the B<restore> should use.
-
-This is equivalent to:
-
- virsh save-image-dumpxml state-file > state-file.xml
- vi state-file.xml (or make changes with your other text editor)
- virsh save-image-define state-file state-file-xml
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<schedinfo> I<domain> [[I<--config>] [I<--live>] | [I<--current>]]
-[[I<--set>] B<parameter=value>]...
-
-=item B<schedinfo> [I<--weight> B<number>] [I<--cap> B<number>]
-I<domain>
-
-Allows you to show (and set) the domain scheduler parameters. The parameters
-available for each hypervisor are:
-
-LXC (posix scheduler) : cpu_shares, vcpu_period, vcpu_quota
-
-QEMU/KVM (posix scheduler): cpu_shares, vcpu_period, vcpu_quota,
-emulator_period, emulator_quota, iothread_quota, iothread_period
-
-Xen (credit scheduler): weight, cap
-
-ESX (allocation scheduler): reservation, limit, shares
-
-If I<--live> is specified, set scheduler information of a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-
-B<Note>: The cpu_shares parameter has a valid value range of 0-262144; Negative
-values are wrapped to positive, and larger values are capped at the maximum.
-Therefore, -1 is a useful shorthand for 262144. On the Linux kernel, the
-values 0 and 1 are automatically converted to a minimal value of 2.
-
-B<Note>: The weight and cap parameters are defined only for the
-XEN_CREDIT scheduler.
-
-B<Note>: The vcpu_period, emulator_period, and iothread_period parameters
-have a valid value range of 1000-1000000 or 0, and the vcpu_quota,
-emulator_quota, and iothread_quota parameters have a valid value range of
-1000-18446744073709551 or less than 0. The value 0 for
-either parameter is the same as not specifying that parameter.
-
-=item B<screenshot> I<domain> [I<imagefilepath>] [I<--screen> B<screenID>]
-
-Takes a screenshot of a current domain console and stores it into a file.
-Optionally, if the hypervisor supports more displays for a domain, I<screenID>
-allows specifying which screen will be captured. It is the sequential number
-of screen. In case of multiple graphics cards, heads are enumerated before
-devices, e.g. having two graphics cards, both with four heads, screen ID 5
-addresses the second head on the second card.
-
-=item B<send-key> I<domain> [I<--codeset> B<codeset>]
-[I<--holdtime> B<holdtime>] I<keycode>...
-
-Parse the I<keycode> sequence as keystrokes to send to I<domain>.
-Each I<keycode> can either be a numeric value or a symbolic name from
-the corresponding codeset.  If I<--holdtime> is given, each keystroke
-will be held for that many milliseconds.  The default codeset is
-B<linux>, but use of the I<--codeset> option allows other codesets to
-be chosen.
-
-If multiple keycodes are specified, they are all sent simultaneously
-to the guest, and they may be received in random order. If you need
-distinct keypresses, you must use multiple send-key invocations.
-
-=over 4
-
-=item B<linux>
-
-The numeric values are those defined by the Linux generic input
-event subsystem. The symbolic names match the corresponding
-Linux key constant macro names.
-
-See L<virkeycode-linux(7)> and L<virkeyname-linux(7)>
-
-=item B<xt>
-
-The numeric values are those defined by the original XT keyboard
-controller. No symbolic names are provided
-
-See L<virkeycode-xt(7)>
-
-=item B<atset1>
-
-The numeric values are those defined by the AT keyboard controller,
-set 1 (aka XT compatible set). Extended keycoes from B<atset1>
-may differ from extended keycodes in the B<xt> codeset. No symbolic
-names are provided
-
-See L<virkeycode-atset1(7)>
-
-=item B<atset2>
-
-The numeric values are those defined by the AT keyboard controller,
-set 2. No symbolic names are provided
-
-See L<virkeycode-atset2(7)>
-
-=item B<atset3>
-
-The numeric values are those defined by the AT keyboard controller,
-set 3 (aka PS/2 compatible set). No symbolic names are provided
-
-See L<virkeycode-atset3(7)>
-
-=item B<os_x>
-
-The numeric values are those defined by the macOS keyboard input
-subsystem. The symbolic names match the corresponding macOS key
-constant macro names
-
-See L<virkeycode-osx(7)> and L<virkeyname-osx(7)>
-
-=item B<xt_kbd>
-
-The numeric values are those defined by the Linux KBD device.
-These are a variant on the original XT codeset, but often with
-different encoding for extended keycodes. No symbolic names are
-provided.
-
-See L<virkeycode-xtkbd(7)>
-
-=item B<win32>
-
-The numeric values are those defined by the Win32 keyboard input
-subsystem. The symbolic names match the corresponding Win32 key
-constant macro names
-
-See L<virkeycode-win32(7)> and L<virkeyname-win32(7)>
-
-=item B<usb>
-
-The numeric values are those defined by the USB HID specification
-for keyboard input. No symbolic names are provided
-
-See L<virkeycode-usb(7)>
-
-=item B<qnum>
-
-The numeric values are those defined by the QNUM extension for sending
-raw keycodes. These are a variant on the XT codeset, but extended
-keycodes have the low bit of the second byte set, instead of the high
-bit of the first byte. No symbolic names are provided.
-
-See L<virkeycode-qnum(7)>
-
-=back
-
-B<Examples>
-  # send three strokes 'k', 'e', 'y', using xt codeset. these
-  # are all pressed simultaneously and may be received by the guest
-  # in random order
-  virsh send-key dom --codeset xt 37 18 21
-
-  # send one stroke 'right-ctrl+C'
-  virsh send-key dom KEY_RIGHTCTRL KEY_C
-
-  # send a tab, held for 1 second
-  virsh send-key --holdtime 1000 0xf
-
-=item B<send-process-signal> I<domain-id> I<pid> I<signame>
-
-Send a signal I<signame> to the process identified by I<pid> running in
-the virtual domain I<domain-id>. The I<pid> is a process ID in the virtual
-domain namespace.
-
-The I<signame> argument may be either an integer signal constant number,
-or one of the symbolic names:
-
-    "nop", "hup", "int", "quit", "ill",
-    "trap", "abrt", "bus", "fpe", "kill",
-    "usr1", "segv", "usr2", "pipe", "alrm",
-    "term", "stkflt", "chld", "cont", "stop",
-    "tstp", "ttin", "ttou", "urg", "xcpu",
-    "xfsz", "vtalrm", "prof", "winch", "poll",
-    "pwr", "sys", "rt0", "rt1", "rt2", "rt3",
-    "rt4", "rt5", "rt6", "rt7", "rt8", "rt9",
-    "rt10", "rt11", "rt12", "rt13", "rt14", "rt15",
-    "rt16", "rt17", "rt18", "rt19", "rt20", "rt21",
-    "rt22", "rt23", "rt24", "rt25", "rt26", "rt27",
-    "rt28", "rt29", "rt30", "rt31", "rt32"
-
-The symbol name may optionally be prefixed with 'sig' or 'sig_' and
-may be in uppercase or lowercase.
-
-B<Examples>
-  virsh send-process-signal myguest 1 15
-  virsh send-process-signal myguest 1 term
-  virsh send-process-signal myguest 1 sigterm
-  virsh send-process-signal myguest 1 SIG_HUP
-
-=item B<set-lifecycle-action> I<domain> I<type> I<action>
-[[I<--config>] [I<--live>] | [I<--current>]]
-
-Set the lifecycle I<action> for specified lifecycle I<type>.
-The valid types are "poweroff", "reboot" and "crash", and for each of
-them valid I<action> is one of "destroy", "restart", "rename-restart",
-"preserve".  For I<type> "crash", additional actions "coredump-destroy"
-and "coredump-restart" are supported.
-
-=item B<set-user-password> I<domain> I<user> I<password> [I<--encrypted>]
-
-Set the password for the I<user> account in the guest domain.
-
-If I<--encrypted> is specified, the password is assumed to be already
-encrypted by the method required by the guest OS.
-
-For QEMU/KVM, this requires the guest agent to be configured
-and running.
-
-=item B<setmaxmem> I<domain> B<size> [[I<--config>] [I<--live>] |
-[I<--current>]]
-
-Change the maximum memory allocation limit for a guest domain.
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-
-Some hypervisors such as QEMU/KVM don't support live changes (especially
-increasing) of the maximum memory limit.  Even persistent configuration changes
-might not be performed with some hypervisors/configuration (e.g. on NUMA enabled
-domains on QEMU).  For complex configuration changes use command B<edit>
-instead).
-
-I<size> is a scaled integer (see B<NOTES> above); it defaults to kibibytes
-(blocks of 1024 bytes) unless you provide a suffix (and the older option
-name I<--kilobytes> is available as a deprecated synonym) .  Libvirt rounds
-up to the nearest kibibyte.  Some hypervisors require a larger granularity
-than KiB, and requests that are not an even multiple will be rounded up.
-For example, vSphere/ESX rounds the parameter up to mebibytes (1024 kibibytes).
-
-=item B<setmem> I<domain> B<size> [[I<--config>] [I<--live>] |
-[I<--current>]]
-
-Change the memory allocation for a guest domain.
-If I<--live> is specified, perform a memory balloon of a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-
-I<size> is a scaled integer (see B<NOTES> above); it defaults to kibibytes
-(blocks of 1024 bytes) unless you provide a suffix (and the older option
-name I<--kilobytes> is available as a deprecated synonym) .  Libvirt rounds
-up to the nearest kibibyte.  Some hypervisors require a larger granularity
-than KiB, and requests that are not an even multiple will be rounded up.
-For example, vSphere/ESX rounds the parameter up to mebibytes (1024 kibibytes).
-
-For Xen, you can only adjust the memory of a running domain if the domain is
-paravirtualized or running the PV balloon driver.
-
-For LXC, the value being set is the cgroups value for limit_in_bytes or the
-maximum amount of user memory (including file cache). When viewing memory
-inside the container, this is the /proc/meminfo "MemTotal" value. When viewing
-the value from the host, use the B<virsh memtune> command. In order to view
-the current memory in use and the maximum value allowed to set memory, use
-the B<virsh dominfo> command.
-
-=item B<setvcpus> I<domain> I<count> [I<--maximum>] [[I<--config>]
-[I<--live>] | [I<--current>]] [I<--guest>] [I<--hotpluggable>]
-
-Change the number of virtual CPUs active in a guest domain.  By default,
-this command works on active guest domains.  To change the settings for an
-inactive guest domain, use the I<--config> flag.
-
-The I<count> value may be limited by host, hypervisor, or a limit coming
-from the original description of the guest domain. For Xen, you can only
-adjust the virtual CPUs of a running domain if the domain is paravirtualized.
-
-If the I<--config> flag is specified, the change is made to the stored XML
-configuration for the guest domain, and will only take effect when the guest
-domain is next started.
-
-If I<--live> is specified, the guest domain must be active, and the change
-takes place immediately.  Both the I<--config> and I<--live> flags may be
-specified together if supported by the hypervisor.  If this command is run
-before the guest has finished booting, the guest may fail to process
-the change.
-
-If I<--current> is specified, affect the current guest state.
-
-When no flags are given, the I<--live>
-flag is assumed and the guest domain must be active.  In this situation it
-is up to the hypervisor whether the I<--config> flag is also assumed, and
-therefore whether the XML configuration is adjusted to make the change
-persistent.
-
-If I<--guest> is specified, then the count of cpus is modified in the guest
-instead of the hypervisor. This flag is usable only for live domains
-and may require guest agent to be configured in the guest.
-
-To allow adding vcpus to persistent definitions that can be later hotunplugged
-after the domain is booted it is necessary to specify the I<--hotpluggable>
-flag. Vcpus added to live domains supporting vcpu unplug are automatically
-marked as hotpluggable.
-
-The I<--maximum> flag controls the maximum number of virtual cpus that can
-be hot-plugged the next time the domain is booted.  As such, it must only be
-used with the I<--config> flag, and not with the I<--live> or the I<--current>
-flag. Note that it may not be possible to change the maximum vcpu count if
-the processor topology is specified for the guest.
-
-=item B<setvcpu> I<domain> I<vcpulist> [I<--enable>] | [I<--disable>]
-[[I<--live>] [I<--config>] | [I<--current>]]
-
-Change state of individual vCPUs using hot(un)plug mechanism.
-
-See B<vcpupin> for information on format of I<vcpulist>. Hypervisor drivers may
-require that I<vcpulist> contains exactly vCPUs belonging to one hotpluggable
-entity. This is usually just a single vCPU but certain architectures such as
-ppc64 require a full core to be specified at once.
-
-Note that hypervisors may refuse to disable certain vcpus such as vcpu 0 or
-others.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state. This is the
-default. Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive.
-
-=item B<shutdown> I<domain> [I<--mode MODE-LIST>]
-
-Gracefully shuts down a domain.  This coordinates with the domain OS
-to perform graceful shutdown, so there is no guarantee that it will
-succeed, and may take a variable length of time depending on what
-services must be shutdown in the domain.
-
-The exact behavior of a domain when it shuts down is set by the
-I<on_poweroff> parameter in the domain's XML definition.
-
-If I<domain> is transient, then the metadata of any snapshots and
-checkpoints will be lost once the guest stops running, but the underlying
-contents still exist, and a new domain with the same name and UUID can
-restore the snapshot metadata with B<snapshot-create>, and the checkpoint
-metadata with B<checkpoint-create>.
-
-By default the hypervisor will try to pick a suitable shutdown
-method. To specify an alternative method, the I<--mode> parameter
-can specify a comma separated list which includes C<acpi>, C<agent>,
-C<initctl>, C<signal> and C<paravirt>. The order in which drivers will
-try each mode is undefined, and not related to the order specified to virsh.
-For strict control over ordering, use a single mode at a time and
-repeat the command.
-
-=item B<start> I<domain-name-or-uuid> [I<--console>] [I<--paused>]
-[I<--autodestroy>] [I<--bypass-cache>] [I<--force-boot>] [I<--pass-fds N,M,...>]
-
-Start a (previously defined) inactive domain, either from the last
-B<managedsave> state, or via a fresh boot if no managedsave state is
-present.  The domain will be paused if the I<--paused> option is
-used and supported by the driver; otherwise it will be running.
-If I<--console> is requested, attach to the console after creation.
-If I<--autodestroy> is requested, then the guest will be automatically
-destroyed when virsh closes its connection to libvirt, or otherwise
-exits.  If I<--bypass-cache> is specified, and managedsave state exists,
-the restore will avoid the file system cache, although this may slow
-down the operation.  If I<--force-boot> is specified, then any
-managedsave state is discarded and a fresh boot occurs.
-
-If I<--pass-fds> is specified, the argument is a comma separated list
-of open file descriptors which should be pass on into the guest. The
-file descriptors will be re-numbered in the guest, starting from 3. This
-is only supported with container based virtualization.
-
-=item B<suspend> I<domain>
-
-Suspend a running domain. It is kept in memory but won't be scheduled
-anymore.
-
-=item B<ttyconsole> I<domain>
-
-Output the device used for the TTY console of the domain. If the information
-is not available the processes will provide an exit code of 1.
-
-=item B<undefine> I<domain> [I<--managed-save>] [I<--snapshots-metadata>]
-[I<--checkpoints-metadata>] [I<--nvram>] [I<--keep-nvram>]
-[ {I<--storage> B<volumes> | I<--remove-all-storage>
-[I<--delete-storage-volume-snapshots>]} I<--wipe-storage>]
-
-Undefine a domain. If the domain is running, this converts it to a
-transient domain, without stopping it. If the domain is inactive,
-the domain configuration is removed.
-
-The I<--managed-save> flag guarantees that any managed save image (see
-the B<managedsave> command) is also cleaned up.  Without the flag, attempts
-to undefine a domain with a managed save image will fail.
-
-The I<--snapshots-metadata> flag guarantees that any snapshots (see the
-B<snapshot-list> command) are also cleaned up when undefining an inactive
-domain.  Without the flag, attempts to undefine an inactive domain with
-snapshot metadata will fail.  If the domain is active, this flag is
-ignored.
-
-The I<--checkpoints-metadata> flag guarantees that any checkpoints (see the
-B<checkpoint-list> command) are also cleaned up when undefining an inactive
-domain.  Without the flag, attempts to undefine an inactive domain with
-checkpoint metadata will fail.  If the domain is active, this flag is
-ignored.
-
-I<--nvram> and I<--keep-nvram> specify accordingly to delete or keep nvram
-(/domain/os/nvram/) file. If the domain has an nvram file and the flags are
-omitted, the undefine will fail.
-
-The I<--storage> flag takes a parameter B<volumes>, which is a comma separated
-list of volume target names or source paths of storage volumes to be removed
-along with the undefined domain. Volumes can be undefined and thus removed only
-on inactive domains. Volume deletion is only attempted after the domain is
-undefined; if not all of the requested volumes could be deleted, the
-error message indicates what still remains behind. If a volume path is not
-found in the domain definition, it's treated as if the volume was successfully
-deleted. Only volumes managed by libvirt in storage pools can be removed this
-way.
-(See B<domblklist> for list of target names associated to a domain).
-Example: --storage vda,/path/to/storage.img
-
-The I<--remove-all-storage> flag specifies that all of the domain's storage
-volumes should be deleted.
-
-The I<--delete-storage-volume-snapshots> (previously I<--delete-snapshots>)
-flag specifies that any snapshots associated with
-the storage volume should be deleted as well. Requires the
-I<--remove-all-storage> flag to be provided. Not all storage drivers
-support this option, presently only rbd. Using this when also removing volumes
-handled by a storage driver which does not support the flag will result in
-failure.
-
-The flag I<--wipe-storage> specifies that the storage volumes should be
-wiped before removal.
-
-NOTE: For an inactive domain, the domain name or UUID must be used as the
-I<domain>.
-
-=item B<vcpucount> I<domain>  [{I<--maximum> | I<--active>}
-{I<--config> | I<--live> | I<--current>}] [I<--guest>]
-
-Print information about the virtual cpu counts of the given
-I<domain>.  If no flags are specified, all possible counts are
-listed in a table; otherwise, the output is limited to just the
-numeric value requested.  For historical reasons, the table
-lists the label "current" on the rows that can be queried in isolation
-via the I<--active> flag, rather than relating to the I<--current> flag.
-
-I<--maximum> requests information on the maximum cap of vcpus that a
-domain can add via B<setvcpus>, while I<--active> shows the current
-usage; these two flags cannot both be specified.  I<--config>
-requires a persistent domain and requests information regarding the next
-time the domain will be booted, I<--live> requires a running domain and
-lists current values, and I<--current> queries according to the current
-state of the domain (corresponding to I<--live> if running, or
-I<--config> if inactive); these three flags are mutually exclusive.
-
-If I<--guest> is specified, then the count of cpus is reported from
-the perspective of the guest. This flag is usable only for live domains
-and may require guest agent to be configured in the guest.
-
-=item B<vcpuinfo> I<domain> [I<--pretty>]
-
-Returns basic information about the domain virtual CPUs, like the number of
-vCPUs, the running time, the affinity to physical processors.
-
-With I<--pretty>, cpu affinities are shown as ranges.
-
-An example output is
-
- $ virsh vcpuinfo fedora
- VCPU:           0
- CPU:            0
- State:          running
- CPU time:       7,0s
- CPU Affinity:   yyyy
-
- VCPU:           1
- CPU:            1
- State:          running
- CPU time:       0,7s
- CPU Affinity:   yyyy
-
-B<STATES>
-
-The State field displays the current operating state of a virtual CPU
-
-=over 4
-
-=item B<offline>
-
-The virtual CPU is offline and not usable by the domain.
-This state is not supported by all hypervisors.
-
-=item B<running>
-
-The virtual CPU is available to the domain and is operating.
-
-=item B<blocked>
-
-The virtual CPU is available to the domain but is waiting for a resource.
-This state is not supported by all hypervisors, in which case I<running>
-may be reported instead.
-
-=item B<no state>
-
-The virtual CPU state could not be determined. This could happen if
-the hypervisor is newer than virsh.
-
-=item B<N/A>
-
-There's no information about the virtual CPU state available. This can
-be the case if the domain is not running or the hypervisor does
-not report the virtual CPU state.
-
-=back
-
-=item B<vcpupin> I<domain> [I<vcpu>] [I<cpulist>] [[I<--live>]
-[I<--config>] | [I<--current>]]
-
-Query or change the pinning of domain VCPUs to host physical CPUs.  To
-pin a single I<vcpu>, specify I<cpulist>; otherwise, you can query one
-I<vcpu> or omit I<vcpu> to list all at once.
-
-I<cpulist> is a list of physical CPU numbers. Its syntax is a comma
-separated list and a special markup using '-' and '^' (ex. '0-4', '0-3,^2') can
-also be allowed. The '-' denotes the range and the '^' denotes exclusive.
-For pinning the I<vcpu> to all physical cpus specify 'r' as a I<cpulist>.
-If I<--live> is specified, affect a running guest.
-If I<--config> is specified, affect the next boot of a persistent guest.
-If I<--current> is specified, affect the current guest state.
-Both I<--live> and I<--config> flags may be given if I<cpulist> is present,
-but I<--current> is exclusive.
-If no flag is specified, behavior is different depending on hypervisor.
-
-B<Note>: The expression is sequentially evaluated, so "0-15,^8" is
-identical to "9-14,0-7,15" but not identical to "^8,0-15".
-
-=item B<vncdisplay> I<domain>
-
-Output the IP address and port number for the VNC display. If the information
-is not available the processes will provide an exit code of 1.
-
-=back
-
-=head1 DEVICE COMMANDS
-
-The following commands manipulate devices associated to domains.
-The I<domain> can be specified as a short integer, a name or a full UUID.
-To better understand the values allowed as options for the command
-reading the documentation at L<https://libvirt.org/formatdomain.html> on the
-format of the device sections to get the most accurate set of accepted values.
-
-=over 4
-
-=item B<attach-device> I<domain> I<FILE>
-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
-
-Attach a device to the domain, using a device definition in an XML
-file using a device definition element such as <disk> or <interface>
-as the top-level element.  See the documentation at
-L<https://libvirt.org/formatdomain.html#elementsDevices> to learn about
-libvirt XML format for a device.  If I<--config> is specified the
-command alters the persistent domain configuration with the device
-attach taking effect the next time libvirt starts the domain.
-For cdrom and floppy devices, this command only replaces the media
-within an existing device; consider using B<update-device> for this
-usage.  For passthrough host devices, see also B<nodedev-detach>,
-needed if the PCI device does not use managed mode.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. When no flag is specified legacy API is used whose behavior depends
-on the hypervisor driver.
-
-For compatibility purposes, I<--persistent> behaves like I<--config> for
-an offline domain, and like I<--live> I<--config> for a running domain.
-
-B<Note>: using of partial device definition XML files may lead to unexpected
-results as some fields may be autogenerated and thus match devices other than
-expected.
-
-=item B<attach-disk> I<domain> I<source> I<target> [[[I<--live>] [I<--config>]
-| [I<--current>]] | [I<--persistent>]] [I<--targetbus bus>] [I<--driver
-driver>] [I<--subdriver subdriver>] [I<--iothread iothread>]
-[I<--cache cache>] [I<--io io>] [I<--type type>] [I<--alias alias>]
-[I<--mode mode>] [I<--sourcetype sourcetype>] [I<--serial serial>] [I<--wwn
-wwn>] [I<--rawio>] [I<--address address>] [I<--multifunction>] [I<--print-xml>]
-
-Attach a new disk device to the domain.
-I<source> is path for the files and devices. I<target> controls the bus or
-device under which the disk is exposed to the guest OS. It indicates the
-"logical" device name; the optional I<targetbus> attribute specifies the type
-of disk device to emulate; possible values are driver specific, with typical
-values being I<ide>, I<scsi>, I<virtio>, I<xen>, I<usb>, I<sata>, or I<sd>, if
-omitted, the bus type is inferred from the style of the device name (e.g.  a
-device named 'sda' will typically be exported using a SCSI bus).  I<driver> can
-be I<file>, I<tap> or I<phy> for the Xen
-hypervisor depending on the kind of access; or I<qemu> for the QEMU emulator.
-Further details to the driver can be passed using I<subdriver>. For Xen
-I<subdriver> can be I<aio>, while for QEMU subdriver should match the format
-of the disk source, such as I<raw> or I<qcow2>.  Hypervisor default will be
-used if I<subdriver> is not specified.  However, the default may not be
-correct, esp. for QEMU as for security reasons it is configured not to detect
-disk formats.  I<type> can indicate I<lun>, I<cdrom> or I<floppy> as
-alternative to the disk default, although this use only replaces the media
-within the existing virtual cdrom or floppy device; consider using
-B<update-device> for this usage instead.
-I<alias> can set user supplied alias.
-I<mode> can specify the two specific mode I<readonly> or I<shareable>.
-I<sourcetype> can indicate the type of source (block|file)
-I<cache> can be one of "default", "none", "writethrough", "writeback",
-"directsync" or "unsafe".
-I<io> controls specific policies on I/O; QEMU guests support "threads" and "native".
-I<iothread> is the number within the range of domain IOThreads to which
-this disk may be attached (QEMU only).
-I<serial> is the serial of disk device. I<wwn> is the wwn of disk device.
-I<rawio> indicates the disk needs rawio capability.
-I<address> is the address of disk device in the form of
-pci:domain.bus.slot.function, scsi:controller.bus.unit,
-ide:controller.bus.unit, usb:bus.port, sata:controller.bus.unit or
-ccw:cssid.ssid.devno. Virtio-ccw devices must have their cssid set to 0xfe.
-I<multifunction> indicates specified pci address is a multifunction pci device
-address.
-
-If I<--print-xml> is specified, then the XML of the disk that would be attached
-is printed instead.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. When no flag is specified legacy API is used whose behavior depends
-on the hypervisor driver.
-
-For compatibility purposes, I<--persistent> behaves like I<--config> for
-an offline domain, and like I<--live> I<--config> for a running domain.
-Likewise, I<--shareable> is an alias for I<--mode shareable>.
-
-=item B<attach-interface> I<domain> I<type> I<source>
-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
-[I<--target target>] [I<--mac mac>] [I<--script script>] [I<--model model>]
-[I<--inbound average,peak,burst,floor>] [I<--outbound average,peak,burst>]
-[I<--alias alias>] [I<--managed>] [I<--print-xml>]
-
-Attach a new network interface to the domain.
-
-B<type> can be one of the:
-
-=over 4
-
-I<network> to indicate connection via a libvirt virtual network,
-
-I<bridge> to indicate connection via a bridge device on the host,
-
-I<direct> to indicate connection directly to one of the host's network
-interfaces or bridges,
-
-I<hostdev> to indicate connection using a passthrough of PCI device
-on the host.
-
-=back
-
-B<source> indicates the source of the connection.  The source depends
-on the type of the interface:
-
-=over 4
-
-I<network> name of the virtual network,
-
-I<bridge> the name of the bridge device,
-
-I<direct> the name of the host's interface or bridge,
-
-I<hostdev> the PCI address of the host's interface formatted
-as domain:bus:slot.function.
-
-=back
-
-B<--target> is used to specify the tap/macvtap device to be used to
-connect the domain to the source.  Names starting with 'vnet' are
-considered as auto-generated and are blanked out/regenerated each
-time the interface is attached.
-
-B<--mac> specifies the MAC address of the network interface; if a MAC
-address is not given, a new address will be automatically generated
-(and stored in the persistent configuration if "--config" is given on
-the command line).
-
-B<--script> is used to specify a path to a custom script to be called
-while attaching to a bridge - this will be called instead of the default
-script not in addition to it.  This is valid only for interfaces of
-I<bridge> type and only for Xen domains.
-
-B<--model> specifies the network device model to be presented to the
-domain.
-
-B<alias> can set user supplied alias.
-
-B<--inbound> and B<--outbound> control the bandwidth of the
-interface.  At least one from the I<average>, I<floor> pair must be
-specified.  The other two I<peak> and I<burst> are optional, so
-"average,peak", "average,,burst", "average,,,floor", "average" and
-",,,floor" are also legal.  Values for I<average>, I<floor> and I<peak>
-are expressed in kilobytes per second, while I<burst> is expressed in
-kilobytes in a single burst at I<peak> speed as described in the
-Network XML documentation at
-L<https://libvirt.org/formatnetwork.html#elementQoS>.
-
-B<--managed> is usable only for I<hostdev> type and tells libvirt
-that the interface should be managed, which means detached and reattached
-from/to the host by libvirt.
-
-If B<--print-xml> is specified, then the XML of the interface that would be
-attached is printed instead.
-
-If B<--live> is specified, affect a running domain.
-If B<--config> is specified, affect the next startup of a persistent domain.
-If B<--current> is specified, affect the current domain state.
-Both B<--live> and B<--config> flags may be given, but B<--current> is
-exclusive.  When no flag is specified legacy API is used whose behavior
-depends on the hypervisor driver.
-
-For compatibility purposes, B<--persistent> behaves like B<--config> for
-an offline domain, and like B<--live> B<--config> for a running domain.
-
-B<Note>: the optional target value is the name of a device to be created
-as the back-end on the node.  If not provided a device named "vnetN" or "vifN"
-will be created automatically.
-
-=item B<detach-device> I<domain> I<FILE>
-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
-
-Detach a device from the domain, takes the same kind of XML descriptions
-as command B<attach-device>.
-For passthrough host devices, see also B<nodedev-reattach>, needed if
-the device does not use managed mode.
-
-B<Note>: The supplied XML description of the device should be as specific
-as its definition in the domain XML. The set of attributes used
-to match the device are internal to the drivers. Using a partial definition,
-or attempting to detach a device that is not present in the domain XML,
-but shares some specific attributes with one that is present,
-may lead to unexpected results.
-
-B<Quirk>: Device unplug is asynchronous in most cases and requires guest
-cooperation. This means that it's up to the discretion of the guest to disallow
-or delay the unplug arbitrarily. As the libvirt API used in this command was
-designed as synchronous it returns success after some timeout even if the device
-was not unplugged yet to allow further interactions with the domain e.g. if the
-guest is unresponsive. Callers which need to make sure that the
-device was unplugged can use libvirt events (see virsh event) to be notified
-when the device is removed. Note that the event may arrive before the command
-returns.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. When no flag is specified legacy API is used whose behavior depends
-on the hypervisor driver.
-
-For compatibility purposes, I<--persistent> behaves like I<--config> for
-an offline domain, and like I<--live> I<--config> for a running domain.
-
-Note that older versions of virsh used I<--config> as an alias for
-I<--persistent>.
-
-=item B<detach-device-alias> I<domain> I<alias>
-[[[I<--live>] [I<--config>] | [I<--current>]]]]
-
-Detach a device with given I<alias> from the I<domain>. This command returns
-successfully after the unplug request was sent to the hypervisor. The actual
-removal of the device is notified asynchronously via libvirt events
-(see virsh event).
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive.
-
-=item B<detach-disk> I<domain> I<target>
-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
-[I<--print-xml>]
-
-Detach a disk device from a domain. The I<target> is the device as seen
-from the domain.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. When no flag is specified legacy API is used whose behavior depends
-on the hypervisor driver.
-
-For compatibility purposes, I<--persistent> behaves like I<--config> for
-an offline domain, and like I<--live> I<--config> for a running domain.
-
-Note that older versions of virsh used I<--config> as an alias for
-I<--persistent>.
-
-If B<--print-xml> is specified, then the XML which would be used to detach the
-disk is printed instead.
-
-Please see documentation for B<detach-device> for known quirks.
-
-=item B<detach-interface> I<domain> I<type> [I<--mac mac>]
-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
-
-Detach a network interface from a domain.
-I<type> can be either I<network> to indicate a physical network device or
-I<bridge> to indicate a bridge to a device. It is recommended to use the
-I<mac> option to distinguish between the interfaces if more than one are
-present on the domain.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. When no flag is specified legacy API is used whose behavior depends
-on the hypervisor driver.
-
-For compatibility purposes, I<--persistent> behaves like I<--config> for
-an offline domain, and like I<--live> I<--config> for a running domain.
-
-Note that older versions of virsh used I<--config> as an alias for
-I<--persistent>.
-
-Please see documentation for B<detach-device> for known quirks.
-
-=item B<update-device> I<domain> I<file> [I<--force>]
-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
-
-Update the characteristics of a device associated with I<domain>,
-based on the device definition in an XML I<file>.  The I<--force> option
-can be used to force device update, e.g., to eject a CD-ROM even if it is
-locked/mounted in the domain. See the documentation at
-L<https://libvirt.org/formatdomain.html#elementsDevices> to learn about
-libvirt XML format for a device.
-
-If I<--live> is specified, affect a running domain.
-If I<--config> is specified, affect the next startup of a persistent domain.
-If I<--current> is specified, affect the current domain state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. Not specifying any flag is the same as specifying I<--current>.
-
-For compatibility purposes, I<--persistent> behaves like I<--config> for
-an offline domain, and like I<--live> I<--config> for a running domain.
-
-Note that older versions of virsh used I<--config> as an alias for
-I<--persistent>.
-
-B<Note>: using of partial device definition XML files may lead to unexpected
-results as some fields may be autogenerated and thus match devices other than
-expected.
-
-=item B<change-media> I<domain> I<path> [I<--eject>] [I<--insert>]
-[I<--update>] [I<source>] [I<--force>] [[I<--live>] [I<--config>] | [I<--current>]]
-[I<--print-xml>] [I<--block>]
-
-Change media of CDROM or floppy drive. I<path> can be the fully-qualified path
-or the unique target name (<target dev='hdc'>) of the disk device. I<source>
-specifies the path of the media to be inserted or updated. The I<--block> flag
-allows setting the backing type in case a block device is used as media for the
-CDROM or floppy drive instead of a file.
-
-I<--eject> indicates the media will be ejected.
-I<--insert> indicates the media will be inserted. I<source> must be specified.
-If the device has source (e.g. <source file='media'>), and I<source> is not
-specified, I<--update> is equal to I<--eject>. If the device has no source,
-and I<source> is specified, I<--update> is equal to I<--insert>. If the device
-has source, and I<source> is specified, I<--update> behaves like combination
-of I<--eject> and I<--insert>.
-If none of I<--eject>, I<--insert>, and I<--update> is specified, I<--update>
-is used by default.
-The I<--force> option can be used to force media changing.
-If I<--live> is specified, alter live configuration of running guest.
-If I<--config> is specified, alter persistent configuration, effect observed
-on next boot.
-I<--current> can be either or both of I<live> and I<config>, depends on
-the hypervisor's implementation.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. If no flag is specified, behavior is different depending
-on hypervisor.
-If I<--print-xml> is specified, the XML that would be used to change media is
-printed instead of changing the media.
-
-=back
-
-=head1 NODEDEV COMMANDS
-
-The following commands manipulate host devices that are intended to be
-passed through to guest domains via <hostdev> elements in a domain's
-<devices> section.  A node device key is generally specified by the bus
-name followed by its address, using underscores between all components,
-such as pci_0000_00_02_1, usb_1_5_3, or net_eth1_00_27_13_6a_fe_00.
-The B<nodedev-list> gives the full list of host devices that are known
-to libvirt, although this includes devices that cannot be assigned to
-a guest (for example, attempting to detach the PCI device that controls
-the host's hard disk controller where the guest's disk images live could
-cause the host system to lock up or reboot).
-
-For more information on node device definition see:
-L<https://libvirt.org/formatnode.html>.
-
-Passthrough devices cannot be simultaneously used by the host and its
-guest domains, nor by multiple active guests at once.  If the
-<hostdev> description of a PCI device includes the attribute B<managed='yes'>,
-and the hypervisor driver supports it, then the device is in managed mode, and
-attempts to use that passthrough device in an active guest will
-automatically behave as if B<nodedev-detach> (guest start, device
-hot-plug) and B<nodedev-reattach> (guest stop, device hot-unplug) were
-called at the right points.  If a PCI device is not marked as managed,
-then it must manually be detached before guests can use it, and manually
-reattached to be returned to the host.  Also, if a device is manually detached,
-then the host does not regain control of the device without a matching
-reattach, even if the guests use the device in managed mode.
-
-=over 4
-
-=item B<nodedev-create> I<FILE>
-
-Create a device on the host node that can then be assigned to virtual
-machines. Normally, libvirt is able to automatically determine which
-host nodes are available for use, but this allows registration of
-host hardware that libvirt did not automatically detect.  I<file>
-contains xml for a top-level <device> description of a node device.
-
-=item B<nodedev-destroy> I<device>
-
-Destroy (stop) a device on the host. I<device> can be either device
-name or wwn pair in "wwnn,wwpn" format (only works for vHBA currently).
-Note that this makes libvirt quit managing a host device, and may even
-make that device unusable by the rest of the physical host until a reboot.
-
-=item B<nodedev-detach> I<nodedev> [I<--driver backend_driver>]
-
-Detach I<nodedev> from the host, so that it can safely be used by
-guests via <hostdev> passthrough.  This is reversed with
-B<nodedev-reattach>, and is done automatically for managed devices.
-
-Different backend drivers expect the device to be bound to different
-dummy devices. For example, QEMU's "kvm" backend driver (the default)
-expects the device to be bound to pci-stub, but its "vfio" backend
-driver expects the device to be bound to vfio-pci. The I<--driver>
-parameter can be used to specify the desired backend driver.
-
-=item B<nodedev-dumpxml> I<device>
-
-Dump a <device> XML representation for the given node device, including
-such information as the device name, which bus owns the device, the
-vendor and product id, and any capabilities of the device usable by
-libvirt (such as whether device reset is supported). I<device> can
-be either device name or wwn pair in "wwnn,wwpn" format (only works
-for HBA).
-
-=item B<nodedev-list> I<cap> I<--tree>
-
-List all of the devices available on the node that are known by libvirt.
-I<cap> is used to filter the list by capability types, the types must be
-separated by comma, e.g. --cap pci,scsi. Valid capability types include
-'system', 'pci', 'usb_device', 'usb', 'net', 'scsi_host', 'scsi_target',
-'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic', 'drm', 'mdev',
-'mdev_types', 'ccw'.
-If I<--tree> is used, the output is formatted in a tree representing parents of each
-node.  I<cap> and I<--tree> are mutually exclusive.
-
-=item B<nodedev-reattach> I<nodedev>
-
-Declare that I<nodedev> is no longer in use by any guests, and that
-the host can resume normal use of the device.  This is done
-automatically for PCI devices in managed mode and USB devices, but
-must be done explicitly to match any explicit B<nodedev-detach>.
-
-=item B<nodedev-reset> I<nodedev>
-
-Trigger a device reset for I<nodedev>, useful prior to transferring
-a node device between guest passthrough or the host.  Libvirt will
-often do this action implicitly when required, but this command
-allows an explicit reset when needed.
-
-=item B<nodedev-event> {[I<nodedev>] I<event> [I<--loop>] [I<--timeout>
-I<seconds>] [I<--timestamp>] | I<--list>}
-
-Wait for a class of node device events to occur, and print appropriate
-details of events as they happen.  The events can optionally be filtered
-by I<nodedev>.  Using I<--list> as the only argument will provide a list
-of possible I<event> values known by this client, although the connection
-might not allow registering for all these events.
-
-By default, this command is one-shot, and returns success once an event
-occurs; you can send SIGINT (usually via C<Ctrl-C>) to quit immediately.
-If I<--timeout> is specified, the command gives up waiting for events
-after I<seconds> have elapsed.   With I<--loop>, the command prints all
-events until a timeout or interrupt key.
-
-When I<--timestamp> is used, a human-readable timestamp will be printed
-before the event.
-
-=back
-
-=head1 VIRTUAL NETWORK COMMANDS
-
-The following commands manipulate networks. Libvirt has the capability to
-define virtual networks which can then be used by domains and linked to
-actual network devices. For more detailed information about this feature
-see the documentation at L<https://libvirt.org/formatnetwork.html> . Many
-of the commands for virtual networks are similar to the ones used for domains,
-but the way to name a virtual network is either by its name or UUID.
-
-=over 4
-
-=item B<net-autostart> I<network> [I<--disable>]
-
-Configure a virtual network to be automatically started at boot.
-The I<--disable> option disable autostarting.
-
-=item B<net-create> I<file>
-
-Create a transient (temporary) virtual network from an
-XML I<file> and instantiate (start) the network.
-See the documentation at L<https://libvirt.org/formatnetwork.html>
-to get a description of the XML network format used by libvirt.
-
-=item B<net-define> I<file>
-
-Define an inactive persistent virtual network or modify an existing persistent
-one from the XML I<file>.
-
-=item B<net-destroy> I<network>
-
-Destroy (stop) a given transient or persistent virtual network
-specified by its name or UUID. This takes effect immediately.
-
-=item B<net-dumpxml> I<network> [I<--inactive>]
-
-Output the virtual network information as an XML dump to stdout.
-If I<--inactive> is specified, then physical functions are not
-expanded into their associated virtual functions.
-
-=item B<net-edit> I<network>
-
-Edit the XML configuration file for a network.
-
-This is equivalent to:
-
- virsh net-dumpxml --inactive network > network.xml
- vi network.xml (or make changes with your other text editor)
- virsh net-define network.xml
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<net-event> {[I<network>] I<event> [I<--loop>] [I<--timeout>
-I<seconds>] [I<--timestamp>] | I<--list>}
-
-Wait for a class of network events to occur, and print appropriate details
-of events as they happen.  The events can optionally be filtered by
-I<network>.  Using I<--list> as the only argument will provide a list
-of possible I<event> values known by this client, although the connection
-might not allow registering for all these events.
-
-By default, this command is one-shot, and returns success once an event
-occurs; you can send SIGINT (usually via C<Ctrl-C>) to quit immediately.
-If I<--timeout> is specified, the command gives up waiting for events
-after I<seconds> have elapsed.   With I<--loop>, the command prints all
-events until a timeout or interrupt key.
-
-When I<--timestamp> is used, a human-readable timestamp will be printed
-before the event.
-
-=item B<net-info> I<network>
-
-Returns basic information about the I<network> object.
-
-=item B<net-list> [I<--inactive> | I<--all>]
-                  { [I<--table>] | I<--name> | I<--uuid> }
-                  [I<--persistent>] [<--transient>]
-                  [I<--autostart>] [<--no-autostart>]
-
-Returns the list of active networks, if I<--all> is specified this will also
-include defined but inactive networks, if I<--inactive> is specified only the
-inactive ones will be listed. You may also want to filter the returned networks
-by I<--persistent> to list the persistent ones, I<--transient> to list the
-transient ones, I<--autostart> to list the ones with autostart enabled, and
-I<--no-autostart> to list the ones with autostart disabled.
-
-If I<--name> is specified, network names are printed instead of the table
-formatted one per line. If I<--uuid> is specified network's UUID's are printed
-instead of names. Flag I<--table> specifies that the legacy table-formatted
-output should be used. This is the default. All of these are mutually
-exclusive.
-
-NOTE: When talking to older servers, this command is forced to use a series of
-API calls with an inherent race, where a pool might not be listed or might appear
-more than once if it changed state between calls while the list was being
-collected.  Newer servers do not have this problem.
-
-=item B<net-name> I<network-UUID>
-
-Convert a network UUID to network name.
-
-=item B<net-start> I<network>
-
-Start a (previously defined) inactive network.
-
-=item B<net-undefine> I<network>
-
-Undefine the configuration for a persistent network. If the network is active,
-make it transient.
-
-=item B<net-uuid> I<network-name>
-
-Convert a network name to network UUID.
-
-=item B<net-update> I<network> I<command> I<section> I<xml>
- [I<--parent-index> I<index>] [[I<--live>] [I<--config>] | [I<--current>]]
-
-Update the given section of an existing network definition, with the
-changes optionally taking effect immediately, without needing to
-destroy and re-start the network.
-
-I<command> is one of "add-first", "add-last", "add" (a synonym for
-add-last), "delete", or "modify".
-
-I<section> is one of "bridge", "domain", "ip", "ip-dhcp-host",
-"ip-dhcp-range", "forward", "forward-interface", "forward-pf",
-"portgroup", "dns-host", "dns-txt", or "dns-srv", each section being
-named by a concatenation of the xml element hierarchy leading to the
-element being changed. For example, "ip-dhcp-host" will change a
-<host> element that is contained inside a <dhcp> element inside an
-<ip> element of the network.
-
-I<xml> is either the text of a complete xml element of the type being
-changed (e.g. "<host mac="00:11:22:33:44:55' ip='1.2.3.4'/>", or the
-name of a file that contains a complete xml element. Disambiguation is
-done by looking at the first character of the provided text - if the
-first character is "<", it is xml text, if the first character is not
-"<", it is the name of a file that contains the xml text to be used.
-
-The I<--parent-index> option is used to specify which of several
-parent elements the requested element is in (0-based). For example, a
-dhcp <host> element could be in any one of multiple <ip> elements in
-the network; if a parent-index isn't provided, the "most appropriate"
-<ip> element will be selected (usually the only one that already has a
-<dhcp> element), but if I<--parent-index> is given, that particular
-instance of <ip> will get the modification.
-
-If I<--live> is specified, affect a running network.
-If I<--config> is specified, affect the next startup of a persistent network.
-If I<--current> is specified, affect the current network state.
-Both I<--live> and I<--config> flags may be given, but I<--current> is
-exclusive. Not specifying any flag is the same as specifying I<--current>.
-
-=item B<net-dhcp-leases> I<network> [I<mac>]
-
-Get a list of dhcp leases for all network interfaces connected to the given
-virtual I<network> or limited output just for one interface if I<mac> is
-specified.
-
-=back
-
-=head1 NETWORK PORT COMMANDS
-
-The following commands manipulate network ports. Libvirt virtual networks
-have ports created when a virtual machine has a virtual network interface
-added. In general there should be no need to use any of the commands
-here, since the hypervisor drivers run these commands are the right
-point in a virtual machine's lifecycle. They can be useful for debugging
-problems and / or recovering from bugs / stale state.
-
-=over 4
-
-=item B<net-port-list> { [I<--table>] | I<--uuid> }
-                       I<network>
-
-List all network ports recorded against the network.
-
-If I<--uuid> is specified network ports' UUID's are printed
-instead of a table. Flag I<--table> specifies that the legacy
-table-formatted output should be used. This is the default.
-All of these are mutually exclusive.
-
-=item B<net-port-create> I<network> I<file>
-
-Allocate a new network port reserving resources based on the
-port description.
-
-=item B<net-port-dumpxml> I<network> I<port>
-
-Output the network port information as an XML dump to stdout.
-
-=item B<net-port-delete> I<network> I<port>
-
-Delete record of the network port and release its resources
-
-=back
-
-=head1 INTERFACE COMMANDS
-
-The following commands manipulate host interfaces.  Often, these host
-interfaces can then be used by name within domain <interface> elements
-(such as a system-created bridge interface), but there is no
-requirement that host interfaces be tied to any particular guest
-configuration XML at all.
-
-Many of the commands for host interfaces are similar to the ones used
-for domains, and the way to name an interface is either by its name or
-its MAC address.  However, using a MAC address for an I<iface>
-argument only works when that address is unique (if an interface and a
-bridge share the same MAC address, which is often the case, then using
-that MAC address results in an error due to ambiguity, and you must
-resort to a name instead).
-
-=over 4
-
-=item B<iface-bridge> I<interface> I<bridge> [I<--no-stp>] [I<delay>]
-[I<--no-start>]
-
-Create a bridge device named I<bridge>, and attach the existing
-network device I<interface> to the new bridge.  The new bridge
-defaults to starting immediately, with STP enabled and a delay of 0;
-these settings can be altered with I<--no-stp>, I<--no-start>, and an
-integer number of seconds for I<delay>. All IP address configuration
-of I<interface> will be moved to the new bridge device.
-
-See also B<iface-unbridge> for undoing this operation.
-
-=item B<iface-define> I<file>
-
-Define an inactive persistent physical host interface or modify an existing
-persistent one from the XML I<file>.
-
-=item B<iface-destroy> I<interface>
-
-Destroy (stop) a given host interface, such as by running "if-down" to
-disable that interface from active use. This takes effect immediately.
-
-=item B<iface-dumpxml> I<interface> [I<--inactive>]
-
-Output the host interface information as an XML dump to stdout.  If
-I<--inactive> is specified, then the output reflects the persistent
-state of the interface that will be used the next time it is started.
-
-=item B<iface-edit> I<interface>
-
-Edit the XML configuration file for a host interface.
-
-This is equivalent to:
-
- virsh iface-dumpxml iface > iface.xml
- vi iface.xml (or make changes with your other text editor)
- virsh iface-define iface.xml
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<iface-list> [I<--inactive> | I<--all>]
-
-Returns the list of active host interfaces.  If I<--all> is specified
-this will also include defined but inactive interfaces.  If
-I<--inactive> is specified only the inactive ones will be listed.
-
-=item B<iface-name> I<interface>
-
-Convert a host interface MAC to interface name, if the MAC address is unique
-among the host's interfaces.
-
-I<interface> specifies the interface MAC address.
-
-=item B<iface-mac> I<interface>
-
-Convert a host interface name to MAC address.
-
-I<interface> specifies the interface name.
-
-=item B<iface-start> I<interface>
-
-Start a (previously defined) host interface, such as by running "if-up".
-
-=item B<iface-unbridge> I<bridge> [I<--no-start>]
-
-Tear down a bridge device named I<bridge>, releasing its underlying
-interface back to normal usage, and moving all IP address
-configuration from the bridge device to the underlying device.  The
-underlying interface is restarted unless I<--no-start> is present;
-this flag is present for symmetry, but generally not recommended.
-
-See also B<iface-bridge> for creating a bridge.
-
-=item B<iface-undefine> I<interface>
-
-Undefine the configuration for an inactive host interface.
-
-=item B<iface-begin>
-
-Create a snapshot of current host interface settings, which can later
-be committed (I<iface-commit>) or restored (I<iface-rollback>).  If a
-snapshot already exists, then this command will fail until the
-previous snapshot has been committed or restored.  Undefined behavior
-results if any external changes are made to host interfaces outside of
-the libvirt API between the beginning of a snapshot and its eventual
-commit or rollback.
-
-=item B<iface-commit>
-
-Declare all changes since the last I<iface-begin> as working, and
-delete the rollback point.  If no interface snapshot has already been
-started, then this command will fail.
-
-=item B<iface-rollback>
-
-Revert all host interface settings back to the state recorded in the
-last I<iface-begin>.  If no interface snapshot has already been
-started, then this command will fail.  Rebooting the host also serves
-as an implicit rollback point.
-
-=back
-
-=head1 STORAGE POOL COMMANDS
-
-The following commands manipulate storage pools. Libvirt has the
-capability to manage various storage solutions, including files, raw
-partitions, and domain-specific formats, used to provide the storage
-volumes visible as devices within virtual machines. For more detailed
-information about this feature, see the documentation at
-L<https://libvirt.org/formatstorage.html> . Many of the commands for
-pools are similar to the ones used for domains.
-
-=over 4
-
-=item B<find-storage-pool-sources> I<type> [I<srcSpec>]
-
-Returns XML describing all possible available storage pool sources that
-could be used to create or define a storage pool of a given I<type>. If
-I<srcSpec> is provided, it is a file that contains XML to further restrict
-the query for pools.
-
-Not all storage pools support discovery in this manner. Furthermore, for
-those that do support discovery, only specific XML elements are required
-in order to return valid data, while other elements and even attributes
-of some elements are ignored since they are not necessary to find the pool
-based on the search criteria. The following lists the supported I<type>
-options and the expected minimal XML elements used to perform the search.
-
-For a "netfs" or "gluster" pool, the minimal expected XML required is the
-<host> element with a "name" attribute describing the IP address or hostname
-to be used to find the pool. The "port" attribute will be ignored as will
-any other provided XML elements in I<srcSpec>.
-
-For a "logical" pool, the contents of the I<srcSpec> file are ignored,
-although if provided the file must at least exist.
-
-For an "iscsi" pool, the minimal expect XML required is the <host> element
-with a "name" attribute describing the IP address or hostname to be used to
-find the pool (the iSCSI server address). Optionally, the "port" attribute
-may be provided, although it will default to 3260. Optionally, an <initiator>
-XML element with a "name" attribute may be provided to further restrict the
-iSCSI target search to a specific initiator for multi-iqn iSCSI storage pools.
-
-=item B<find-storage-pool-sources-as> I<type> [I<host>] [I<port>]
-[I<initiator>]
-
-Rather than providing I<srcSpec> XML file for B<find-storage-pool-sources>
-use this command option in order to have virsh generate the query XML file
-using the optional arguments. The command will return the same output
-XML as B<find-storage-pool-sources>.
-
-Use I<host> to describe a specific host to use for networked storage, such
-as netfs, gluster, and iscsi I<type> pools.
-
-Use I<port> to further restrict which networked port to utilize for the
-connection if required by the specific storage backend, such as iscsi.
-
-Use I<initiator> to further restrict the iscsi I<type> pool searches to
-specific target initiators.
-
-=item B<pool-autostart> I<pool-or-uuid> [I<--disable>]
-
-Configure whether I<pool> should automatically start at boot.
-
-=item B<pool-build> I<pool-or-uuid> [I<--overwrite>] [I<--no-overwrite>]
-
-Build a given pool.
-
-Options I<--overwrite> and I<--no-overwrite> can only be used for
-B<pool-build> a filesystem, disk, or logical pool.
-
-For a file system pool if neither flag is specified, then B<pool-build>
-just makes the target path directory and no attempt to run mkfs on the
-target volume device. If I<--no-overwrite> is specified, it probes to
-determine if a filesystem already exists on the target device, returning
-an error if one exists or using mkfs to format the target device if not.
-If I<--overwrite> is specified, mkfs is always executed and any existing
-data on the target device is overwritten unconditionally.
-
-For a disk pool, if neither of them is specified or I<--no-overwrite>
-is specified, B<pool-build> will check the target volume device for
-existing filesystems or partitions before attempting to write a new
-label on the target volume device. If the target volume device already
-has a label, the command will fail. If I<--overwrite> is specified,
-then no check will be made on the target volume device prior to writing
-a new label. Writing of the label uses the pool source format type
-or "dos" if not specified.
-
-For a logical pool, if neither of them is specified or I<--no-overwrite>
-is specified, B<pool-build> will check the target volume devices for
-existing filesystems or partitions before attempting to initialize
-and format each device for usage by the logical pool. If any target
-volume device already has a label, the command will fail. If
-I<--overwrite> is specified, then no check will be made on the target
-volume devices prior to initializing and formatting each device. Once
-all the target volume devices are properly formatted via pvcreate,
-the volume group will be created using all the devices.
-
-=item B<pool-create> I<file>
-[I<--build>] [[I<--overwrite>] | [I<--no-overwrite>]]
-
-Create and start a pool object from the XML I<file>.
-
-[I<--build>] [[I<--overwrite>] | [I<--no-overwrite>]] perform a
-B<pool-build> after creation in order to remove the need for a
-follow-up command to build the pool. The I<--overwrite> and
-I<--no-overwrite> flags follow the same rules as B<pool-build>. If
-just I<--build> is provided, then B<pool-build> is called with no flags.
-
-=item B<pool-create-as> I<name> I<type>
-[I<--source-host hostname>] [I<--source-path path>] [I<--source-dev path>]
-[I<--source-name name>] [I<--target path>] [I<--source-format format>]
-[I<--auth-type authtype> I<--auth-username username>
-[I<--secret-usage usage> | I<--secret-uuid uuid>]]
-[I<--source-protocol-ver ver>]
-[[I<--adapter-name name>] | [I<--adapter-wwnn> wwnn I<--adapter-wwpn> wwpn]
-[I<--adapter-parent parent> |
- I<--adapter-parent-wwnn parent_wwnn> I<adapter-parent-wwpn parent_wwpn> |
- I<--adapter-parent-fabric-wwn parent_fabric_wwn>]]
-[I<--build>] [[I<--overwrite>] | [I<--no-overwrite>]] [I<--print-xml>]
-
-
-Create and start a pool object I<name> from the raw parameters.  If
-I<--print-xml> is specified, then print the XML of the pool object
-without creating the pool.  Otherwise, the pool has the specified
-I<type>. When using B<pool-create-as> for a pool of I<type> "disk",
-the existing partitions found on the I<--source-dev path> will be used
-to populate the disk pool. Therefore, it is suggested to use
-B<pool-define-as> and B<pool-build> with the I<--overwrite> in order
-to properly initialize the disk pool.
-
-[I<--source-host hostname>] provides the source hostname for pools backed
-by storage from a remote server (pool types netfs, iscsi, rbd, sheepdog,
-gluster).
-
-[I<--source-path path>] provides the source directory path for pools backed
-by directories (pool type dir).
-
-[I<--source-dev path>] provides the source path for pools backed by physical
-devices (pool types fs, logical, disk, iscsi, zfs).
-
-[I<--source-name name>] provides the source name for pools backed by storage
-from a named element (pool types logical, rbd, sheepdog, gluster).
-
-[I<--target path>] is the path for the mapping of the storage pool into
-the host file system.
-
-[I<--source-format format>] provides information about the format of the
-pool (pool types fs, netfs, disk, logical).
-
-[I<--auth-type authtype> I<--auth-username username>
-[I<--secret-usage usage> | I<--secret-uuid uuid>]]
-provides the elements required to generate authentication credentials for
-the storage pool. The I<authtype> is either chap for iscsi I<type> pools or
-ceph for rbd I<type> pools. Either the secret I<usage> or I<uuid> value may
-be provided, but not both.
-
-[I<--source-protocol-ver ver>] provides the NFS protocol version number used
-to contact the server's NFS service via nfs mount option 'nfsvers=n'. It is
-expect the I<ver> value is an unsigned integer.
-
-[I<--adapter-name name>] defines the scsi_hostN adapter name to be used for
-the scsi_host adapter type pool.
-
-[I<--adapter-wwnn wwnn> I<--adapter-wwpn wwpn> [I<--adapter-parent parent> |
-I<--adapter-parent-wwnn parent_wwnn> I<adapter-parent-wwpn parent_wwpn> |
-I<--adapter-parent-fabric-wwn parent_fabric_wwn>]]
-defines the wwnn and wwpn to be used for the fc_host adapter type pool.
-Optionally provide the parent scsi_hostN node device to be used for the
-vHBA either by parent name, parent_wwnn and parent_wwpn, or parent_fabric_wwn.
-The parent name could change between reboots if the hardware environment
-changes, so providing the parent_wwnn and parent_wwpn ensure usage of the
-same physical HBA even if the scsi_hostN node device changes. Usage of the
-parent_fabric_wwn allows a bit more flexibility to choose an HBA on the
-same storage fabric in order to define the pool.
-
-[I<--build>] [[I<--overwrite>] | [I<--no-overwrite>]] perform a
-B<pool-build> after creation in order to remove the need for a
-follow-up command to build the pool. The I<--overwrite> and
-I<--no-overwrite> flags follow the same rules as B<pool-build>. If
-just I<--build> is provided, then B<pool-build> is called with no flags.
-
-For a "logical" pool only [I<--name>] needs to be provided. The
-[I<--source-name>] if provided must match the Volume Group name.
-If not provided, one will be generated using the [I<--name>]. If
-provided the [I<--target>] is ignored and a target source is generated
-using the [I<--source-name>] (or as generated from the [I<--name>]).
-
-=item B<pool-define> I<file>
-
-Define an inactive persistent storage pool or modify an existing persistent one
-from the XML I<file>.
-
-=item B<pool-define-as> I<name> I<type>
-[I<--source-host hostname>] [I<--source-path path>] [I<--source-dev path>]
-[I<--source-name name>] [I<--target path>] [I<--source-format format>]
-[I<--auth-type authtype> I<--auth-username username>
-[I<--secret-usage usage> | I<--secret-uuid uuid>]]
-[I<--source-protocol-ver ver>]
-[[I<--adapter-name name>] | [I<--adapter-wwnn> I<--adapter-wwpn>]
-[I<--adapter-parent parent>]] [I<--print-xml>]
-
-Create, but do not start, a pool object I<name> from the raw parameters.  If
-I<--print-xml> is specified, then print the XML of the pool object
-without defining the pool.  Otherwise, the pool has the specified
-I<type>.
-
-Use the same arguments as B<pool-create-as>, except for the I<--build>,
-I<--overwrite>, and I<--no-overwrite> options.
-
-=item B<pool-destroy> I<pool-or-uuid>
-
-Destroy (stop) a given I<pool> object. Libvirt will no longer manage the
-storage described by the pool object, but the raw data contained in
-the pool is not changed, and can be later recovered with
-B<pool-create>.
-
-=item B<pool-delete> I<pool-or-uuid>
-
-Destroy the resources used by a given I<pool> object. This operation
-is non-recoverable.  The I<pool> object will still exist after this
-command, ready for the creation of new storage volumes.
-
-=item B<pool-dumpxml> [I<--inactive>] I<pool-or-uuid>
-
-Returns the XML information about the I<pool> object.
-I<--inactive> tells virsh to dump pool configuration that will be used
-on next start of the pool as opposed to the current pool configuration.
-
-=item B<pool-edit> I<pool-or-uuid>
-
-Edit the XML configuration file for a storage pool.
-
-This is equivalent to:
-
- virsh pool-dumpxml pool > pool.xml
- vi pool.xml (or make changes with your other text editor)
- virsh pool-define pool.xml
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<pool-info> [I<--bytes>] I<pool-or-uuid>
-
-Returns basic information about the I<pool> object. If I<--bytes> is specified the sizes
-of basic info are not converted to human friendly units.
-
-=item B<pool-list> [I<--inactive>] [I<--all>]
-                   [I<--persistent>] [I<--transient>]
-                   [I<--autostart>] [I<--no-autostart>]
-                   [[I<--details>] [I<--uuid>]
-                   [I<--name>] [<type>]
-
-List pool objects known to libvirt.  By default, only active pools
-are listed; I<--inactive> lists just the inactive pools, and I<--all>
-lists all pools.
-
-In addition, there are several sets of filtering flags. I<--persistent> is to
-list the persistent pools, I<--transient> is to list the transient pools.
-I<--autostart> lists the autostarting pools, I<--no-autostart> lists the pools
-with autostarting disabled. If I<--uuid> is specified only pool's UUIDs are printed.
-If I<--name> is specified only pool's names are printed. If both I<--name>
-and I<--uuid> are specified, pool's UUID and names are printed side by side
-without any header. Option I<--details> is mutually exclusive with options
-I<--uuid> and I<--name>.
-
-You may also want to list pools with specified types using I<type>, the
-pool types must be separated by comma, e.g. --type dir,disk. The valid pool
-types include 'dir', 'fs', 'netfs', 'logical', 'disk', 'iscsi', 'scsi',
-'mpath', 'rbd', 'sheepdog', 'gluster', 'zfs', 'vstorage' and 'iscsi-direct'.
-
-The I<--details> option instructs virsh to additionally
-display pool persistence and capacity related information where available.
-
-NOTE: When talking to older servers, this command is forced to use a series of
-API calls with an inherent race, where a pool might not be listed or might appear
-more than once if it changed state between calls while the list was being
-collected.  Newer servers do not have this problem.
-
-=item B<pool-name> I<uuid>
-
-Convert the I<uuid> to a pool name.
-
-=item B<pool-refresh> I<pool-or-uuid>
-
-Refresh the list of volumes contained in I<pool>.
-
-=item B<pool-start> I<pool-or-uuid>
-[I<--build>] [[I<--overwrite>] | [I<--no-overwrite>]]
-
-Start the storage I<pool>, which is previously defined but inactive.
-
-[I<--build>] [[I<--overwrite>] | [I<--no-overwrite>]] perform a
-B<pool-build> prior to B<pool-start> to ensure the pool environment is
-in an expected state rather than needing to run the build command prior
-to startup. The I<--overwrite> and I<--no-overwrite> flags follow the
-same rules as B<pool-build>. If just I<--build> is provided, then
-B<pool-build> is called with no flags.
-
-B<Note>: A storage pool that relies on remote resources such as an
-"iscsi" or a (v)HBA backed "scsi" pool may need to be refreshed multiple
-times in order to have all the volumes detected (see B<pool-refresh>).
-This is because the corresponding volume devices may not be present in
-the host's filesystem during the initial pool startup or the current
-refresh attempt. The number of refresh retries is dependent upon the
-network connection and the time the host takes to export the
-corresponding devices.
-
-=item B<pool-undefine> I<pool-or-uuid>
-
-Undefine the configuration for an inactive I<pool>.
-
-=item B<pool-uuid> I<pool>
-
-Returns the UUID of the named I<pool>.
-
-=item B<pool-event> {[I<pool>] I<event> [I<--loop>] [I<--timeout>
-I<seconds>] [I<--timestamp>] | I<--list>}
-
-Wait for a class of storage pool events to occur, and print appropriate
-details of events as they happen.  The events can optionally be filtered
-by I<pool>.  Using I<--list> as the only argument will provide a list
-of possible I<event> values known by this client, although the connection
-might not allow registering for all these events.
-
-By default, this command is one-shot, and returns success once an event
-occurs; you can send SIGINT (usually via C<Ctrl-C>) to quit immediately.
-If I<--timeout> is specified, the command gives up waiting for events
-after I<seconds> have elapsed.   With I<--loop>, the command prints all
-events until a timeout or interrupt key.
-
-When I<--timestamp> is used, a human-readable timestamp will be printed
-before the event.
-
-=back
-
-=head1 VOLUME COMMANDS
-
-=over 4
-
-=item B<vol-create> I<pool-or-uuid> I<FILE> [I<--prealloc-metadata>]
-
-Create a volume from an XML <file>.
-
-I<pool-or-uuid> is the name or UUID of the storage pool to create the volume in.
-
-I<FILE> is the XML <file> with the volume definition. An easy way to create the
-XML <file> is to use the B<vol-dumpxml> command to obtain the definition of a
-pre-existing volume.
-
-[I<--prealloc-metadata>] preallocate metadata (for qcow2 images which don't
-support full allocation). This option creates a sparse image file with metadata,
-resulting in higher performance compared to images with no preallocation and
-only slightly higher initial disk space usage.
-
-B<Example>
-
- virsh vol-dumpxml --pool storagepool1 appvolume1 > newvolume.xml
- vi newvolume.xml (or make changes with your other text editor)
- virsh vol-create differentstoragepool newvolume.xml
-
-=item B<vol-create-from> I<pool-or-uuid> I<FILE> I<vol-name-or-key-or-path>
-[I<--inputpool> I<pool-or-uuid>]  [I<--prealloc-metadata>] [I<--reflink>]
-
-Create a volume, using another volume as input.
-
-I<pool-or-uuid> is the name or UUID of the storage pool to create the volume in.
-
-I<FILE> is the XML <file> with the volume definition.
-
-I<vol-name-or-key-or-path> is the name or key or path of the source volume.
-
-I<--inputpool> I<pool-or-uuid> is the name or uuid of the storage pool the
-source volume is in.
-
-[I<--prealloc-metadata>] preallocate metadata (for qcow2 images which don't
-support full allocation). This option creates a sparse image file with metadata,
-resulting in higher performance compared to images with no preallocation and
-only slightly higher initial disk space usage.
-
-When I<--reflink> is specified, perform a COW lightweight copy,
-where the data blocks are copied only when modified.
-If this is not possible, the copy fails.
-
-=item B<vol-create-as> I<pool-or-uuid> I<name> I<capacity>
-[I<--allocation> I<size>] [I<--format> I<string>]
-[I<--backing-vol> I<vol-name-or-key-or-path>]
-[I<--backing-vol-format> I<string>] [I<--prealloc-metadata>] [I<--print-xml>]
-
-Create a volume from a set of arguments unless I<--print-xml> is specified, in
-which case just the XML of the volume object is printed out without any actual
-object creation.
-
-I<pool-or-uuid> is the name or UUID of the storage pool to create the volume
-in.
-
-I<name> is the name of the new volume. For a disk pool, this must match the
-partition name as determined from the pool's source device path and the next
-available partition. For example, a source device path of /dev/sdb and there
-are no partitions on the disk, then the name must be sdb1 with the next
-name being sdb2 and so on.
-
-I<capacity> is the size of the volume to be created, as a scaled integer
-(see B<NOTES> above), defaulting to bytes if there is no suffix.
-
-I<--allocation> I<size> is the initial size to be allocated in the volume,
-also as a scaled integer defaulting to bytes.
-
-I<--format> I<string> is used in file based storage pools to specify the volume
-file format to use; raw, bochs, qcow, qcow2, vmdk, qed. Use extended for disk
-storage pools in order to create an extended partition (other values are
-validity checked but not preserved when libvirtd is restarted or the pool
-is refreshed).
-
-I<--backing-vol> I<vol-name-or-key-or-path> is the source backing
-volume to be used if taking a snapshot of an existing volume.
-
-I<--backing-vol-format> I<string> is the format of the snapshot backing volume;
-raw, bochs, qcow, qcow2, qed, vmdk, host_device. These are, however, meant for
-file based storage pools.
-
-[I<--prealloc-metadata>] preallocate metadata (for qcow2 images which don't
-support full allocation). This option creates a sparse image file with metadata,
-resulting in higher performance compared to images with no preallocation and
-only slightly higher initial disk space usage.
-
-=item B<vol-clone> I<vol-name-or-key-or-path> I<name>
-[I<--pool> I<pool-or-uuid>] [I<--prealloc-metadata>] [I<--reflink>]
-
-Clone an existing volume within the parent pool.  Less powerful,
-but easier to type, version of B<vol-create-from>.
-
-I<vol-name-or-key-or-path> is the name or key or path of the source volume.
-
-I<name> is the name of the new volume.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool
-that contains the source volume and will contain the new volume.
-If the source volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be cloned; otherwise,
-the first volume found by the key or path will be used.
-
-[I<--prealloc-metadata>] preallocate metadata (for qcow2 images which don't
-support full allocation). This option creates a sparse image file with metadata,
-resulting in higher performance compared to images with no preallocation and
-only slightly higher initial disk space usage.
-
-When I<--reflink> is specified, perform a COW lightweight copy,
-where the data blocks are copied only when modified.
-If this is not possible, the copy fails.
-
-=item B<vol-delete> I<vol-name-or-key-or-path> [I<--pool> I<pool-or-uuid>]
-[I<--delete-snapshots>]
-
-Delete a given volume.
-
-I<vol-name-or-key-or-path> is the volume name or key or path of the volume
-to delete.
-
-[I<--pool> I<pool-or-uuid>] is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be deleted; otherwise,
-the first volume found by the key or path will be used.
-
-The I<--delete-snapshots> flag specifies that any snapshots associated with
-the storage volume should be deleted as well. Not all storage drivers
-support this option, presently only rbd.
-
-=item B<vol-upload> I<vol-name-or-key-or-path> I<local-file>
-[I<--pool> I<pool-or-uuid>] [I<--offset> I<bytes>]
-[I<--length> I<bytes>] [I<--sparse>]
-
-Upload the contents of I<local-file> to a storage volume.
-
-I<vol-name-or-key-or-path> is the name or key or path of the volume where the
-I<local-file> will be uploaded.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be uploaded into;
-otherwise, the first volume found by the key or path will be used.
-
-I<--offset> is the position in the storage volume at which to start writing
-the data. The value must be 0 or larger.
-
-I<--length> is an upper bound of the amount of data to be uploaded.
-A negative value is interpreted as an unsigned long long value to
-essentially include everything from the offset to the end of the volume.
-
-If I<--sparse> is specified, this command will preserve volume sparseness.
-
-An error will occur if the I<local-file> is greater than the specified
-I<length>.
-
-See the description for the libvirt virStorageVolUpload API for details
-regarding possible target volume and pool changes as a result of the
-pool refresh when the upload is attempted.
-
-=item B<vol-download> I<vol-name-or-key-or-path> I<local-file>
-[I<--pool> I<pool-or-uuid>] [I<--offset> I<bytes>] [I<--length> I<bytes>]
-[I<--sparse>]
-
-Download the contents of a storage volume to I<local-file>.
-
-I<vol-name-or-key-or-path> is the name or key or path of the volume to
-download into I<local-file>.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be uploaded into;
-otherwise, the first volume found by the key or path will be used.
-
-I<--offset> is the position in the storage volume at which to start reading
-the data. The value must be 0 or larger.
-
-I<--length> is an upper bound of the amount of data to be downloaded.
-A negative value is interpreted as an unsigned long long value to
-essentially include everything from the offset to the end of the volume.
-
-If I<--sparse> is specified, this command will preserve volume sparseness.
-
-=item B<vol-wipe> I<vol-name-or-key-or-path> [I<--pool> I<pool-or-uuid>]
-[I<--algorithm> I<algorithm>]
-
-Wipe a volume, ensure data previously on the volume is not accessible to
-future reads.
-
-I<vol-name-or-key-or-path> is the name or key or path of the volume to wipe.
-It is possible to choose different wiping algorithms instead of re-writing
-volume with zeroes.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the
-volume is in. If the volume name is provided instead of the key or path,
-then providing the pool is necessary to find the volume to be wiped;
-otherwise, the first volume found by the key or path will be used.
-
-Use the I<--algorithm> switch choosing from the list of the following
-algorithms in order to define which algorithm to use for the wipe.
-
-B<Supported algorithms>
-  zero       - 1-pass all zeroes
-  nnsa       - 4-pass NNSA Policy Letter NAP-14.1-C (XVI-8) for
-               sanitizing removable and non-removable hard disks:
-               random x2, 0x00, verify.
-  dod        - 4-pass DoD 5220.22-M section 8-306 procedure for
-               sanitizing removable and non-removable rigid
-               disks: random, 0x00, 0xff, verify.
-  bsi        - 9-pass method recommended by the German Center of
-               Security in Information Technologies
-               (http://www.bsi.bund.de): 0xff, 0xfe, 0xfd, 0xfb,
-               0xf7, 0xef, 0xdf, 0xbf, 0x7f.
-  gutmann    - The canonical 35-pass sequence described in
-               Gutmann's paper.
-  schneier   - 7-pass method described by Bruce Schneier in
-               "Applied Cryptography" (1996): 0x00, 0xff,
-               random x5.
-  pfitzner7  - Roy Pfitzner's 7-random-pass method: random x7.
-  pfitzner33 - Roy Pfitzner's 33-random-pass method: random x33.
-  random     - 1-pass pattern: random.
-  trim       - 1-pass trimming the volume using TRIM or DISCARD
-
-B<Note>: The C<scrub> binary will be used to handle the 'nnsa', 'dod',
-'bsi', 'gutmann', 'schneier', 'pfitzner7' and 'pfitzner33' algorithms.
-The availability of the algorithms may be limited by the version of
-the C<scrub> binary installed on the host. The 'zero' algorithm will
-write zeroes to the entire volume. For some volumes, such as sparse
-or rbd volumes, this may result in completely filling the volume with
-zeroes making it appear to be completely full. As an alternative, the
-'trim' algorithm does not overwrite all the data in a volume, rather
-it expects the storage driver to be able to discard all bytes in a
-volume. It is up to the storage driver to handle how the discarding
-occurs. Not all storage drivers or volume types can support 'trim'.
-
-=item B<vol-dumpxml> I<vol-name-or-key-or-path> [I<--pool> I<pool-or-uuid>]
-
-Output the volume information as an XML dump to stdout.
-
-I<vol-name-or-key-or-path> is the name or key or path of the volume
-to output the XML.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be uploaded into;
-otherwise, the first volume found by the key or path will be used.
-
-=item B<vol-info> I<vol-name-or-key-or-path> [I<--pool> I<pool-or-uuid>]
-[I<--bytes>] [I<--physical>]
-
-Returns basic information about the given storage volume.
-
-I<vol-name-or-key-or-path> is the name or key or path of the volume
-to return information for.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be uploaded into;
-otherwise, the first volume found by the key or path will be used.
-
-If I<--bytes> is specified the sizes are not converted to human friendly
-units.
-
-If I<--physical> is specified, then the host physical size is returned
-and displayed instead of the allocation value. The physical value for
-some file types, such as qcow2 may have a different (larger) physical
-value than is shown for allocation. Additionally sparse files will
-have different physical and allocation values.
-
-=item B<vol-list> [I<--pool> I<pool-or-uuid>] [I<--details>]
-
-Return the list of volumes in the given storage pool.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool.
-
-The I<--details> option instructs virsh to additionally display volume
-type and capacity related information where available.
-
-=item B<vol-pool> I<vol-key-or-path> [I<--uuid>]
-
-Return the pool name or UUID for a given volume. By default, the pool name is
-returned.
-
-I<vol-key-or-path> is the key or path of the volume to return the pool
-information.
-
-If the I<--uuid> option is given, the pool UUID is returned instead.
-
-=item B<vol-path> I<vol-name-or-key> [I<--pool> I<pool-or-uuid>]
-
-Return the path for a given volume.
-
-I<vol-name-or-key> is the name or key of the volume to return the path.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key, then providing
-the pool is necessary to find the volume to be uploaded into; otherwise,
-the first volume found by the key will be used.
-
-=item B<vol-name> I<vol-key-or-path>
-
-Return the name for a given volume.
-
-I<vol-key-or-path> is the key or path of the volume to return the name.
-
-=item B<vol-key> I<vol-name-or-path> [I<--pool> I<pool-or-uuid>]
-
-Return the volume key for a given volume.
-
-I<vol-name-or-path> is the name or path of the volume to return the
-volume key.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the path, then providing
-the pool is necessary to find the volume to be uploaded into; otherwise,
-the first volume found by the path will be used.
-
-=item B<vol-resize> I<vol-name-or-path> I<capacity> [I<--pool> I<pool-or-uuid>]
-[I<--allocate>] [I<--delta>] [I<--shrink>]
-
-Resize the capacity of the given volume, in bytes.
-
-I<vol-name-or-key-or-path> is the name or key or path of the volume
-to resize.
-
-I<capacity> is a scaled integer (see B<NOTES> above) for the volume,
-which defaults to bytes if there is no suffix.
-
-I<--pool> I<pool-or-uuid> is the name or UUID of the storage pool the volume
-is in. If the volume name is provided instead of the key or path, then
-providing the pool is necessary to find the volume to be uploaded into;
-otherwise, the first volume found by the key or path will be used.
-
-The new I<capacity> might be sparse unless I<--allocate> is specified.
-
-Normally, I<capacity> is the new size, but if I<--delta>
-is present, then it is added to the existing size.
-
-Attempts to shrink the volume will fail unless I<--shrink> is present.
-The I<capacity> cannot be negative unless I<--shrink> is provided, but
-a negative sign is not necessary.
-
-This command is only safe for storage volumes not in use by an active
-guest; see also B<blockresize> for live resizing.
-
-=back
-
-=head1 SECRET COMMANDS
-
-The following commands manipulate "secrets" (e.g. passwords, passphrases and
-encryption keys).  Libvirt can store secrets independently from their use, and
-other objects (e.g. volumes or domains) can refer to the secrets for encryption
-or possibly other uses.  Secrets are identified using a UUID.  See
-L<https://libvirt.org/formatsecret.html> for documentation of the XML format
-used to represent properties of secrets.
-
-=over 4
-
-=item B<secret-define> I<file>
-
-Create a secret with the properties specified in I<file>, with no associated
-secret value.  If I<file> does not specify a UUID, choose one automatically.
-If I<file> specifies a UUID of an existing secret, replace its properties by
-properties defined in I<file>, without affecting the secret value.
-
-=item B<secret-dumpxml> I<secret>
-
-Output properties of I<secret> (specified by its UUID) as an XML dump to stdout.
-
-=item B<secret-event> {[I<secret>] I<event> [I<--loop>] [I<--timeout>
-I<seconds>] [I<--timestamp>] | I<--list>}
-
-Wait for a class of secret events to occur, and print appropriate details
-of events as they happen.  The events can optionally be filtered by
-I<secret>.  Using I<--list> as the only argument will provide a list
-of possible I<event> values known by this client, although the connection
-might not allow registering for all these events.
-
-By default, this command is one-shot, and returns success once an event
-occurs; you can send SIGINT (usually via C<Ctrl-C>) to quit immediately.
-If I<--timeout> is specified, the command gives up waiting for events
-after I<seconds> have elapsed.   With I<--loop>, the command prints all
-events until a timeout or interrupt key.
-
-When I<--timestamp> is used, a human-readable timestamp will be printed
-before the event.
-
-=item B<secret-set-value> I<secret> I<base64>
-
-Set the value associated with I<secret> (specified by its UUID) to the value
-Base64-encoded value I<base64>.
-
-=item B<secret-get-value> I<secret>
-
-Output the value associated with I<secret> (specified by its UUID) to stdout,
-encoded using Base64.
-
-=item B<secret-undefine> I<secret>
-
-Delete a I<secret> (specified by its UUID), including the associated value, if
-any.
-
-=item B<secret-list> [I<--ephemeral>] [I<--no-ephemeral>]
-                     [I<--private>] [I<--no-private>]
-
-Returns the list of secrets. You may also want to filter the returned secrets
-by I<--ephemeral> to list the ephemeral ones, I<--no-ephemeral> to list the
-non-ephemeral ones, I<--private> to list the private ones, and
-I<--no-private> to list the non-private ones.
-
-=back
-
-=head1 SNAPSHOT COMMANDS
-
-The following commands manipulate domain snapshots.  Snapshots take the
-disk, memory, and device state of a domain at a point-of-time, and save it
-for future use.  They have many uses, from saving a "clean" copy of an OS
-image to saving a domain's state before a potentially destructive operation.
-Snapshots are identified with a unique name.  See
-L<https://libvirt.org/formatsnapshot.html> for documentation of the XML format
-used to represent properties of snapshots.
-
-=over 4
-
-=item B<snapshot-create> I<domain> [I<xmlfile>] {[I<--redefine> [I<--current>]]
-| [I<--no-metadata>] [I<--halt>] [I<--disk-only>] [I<--reuse-external>]
-[I<--quiesce>] [I<--atomic>] [I<--live>]} [I<--validate>]
-
-Create a snapshot for domain I<domain> with the properties specified in
-I<xmlfile>.   Optionally, the I<--validate> option can be passed to
-validate the format of the input XML file against an internal RNG
-schema (identical to using the L<virt-xml-validate(1)> tool). Normally,
-the only properties settable for a domain snapshot
-are the <name> and <description> elements, as well as <disks> if
-I<--disk-only> is given; the rest of the fields are
-ignored, and automatically filled in by libvirt.  If I<xmlfile> is
-completely omitted, then libvirt will choose a value for all fields.
-The new snapshot will become current, as listed by B<snapshot-current>.
-
-If I<--halt> is specified, the domain will be left in an inactive state
-after the snapshot is created.
-
-If I<--disk-only> is specified, the snapshot will only include disk
-content rather than the usual full system snapshot with vm state.  Disk
-snapshots are captured faster than full system snapshots, but reverting to a
-disk snapshot may require fsck or journal replays, since it is like
-the disk state at the point when the power cord is abruptly pulled;
-and mixing I<--halt> and I<--disk-only> loses any data that was not
-flushed to disk at the time.
-
-If I<--redefine> is specified, then all XML elements produced by
-B<snapshot-dumpxml> are valid; this can be used to migrate snapshot
-hierarchy from one machine to another, to recreate hierarchy for the
-case of a transient domain that goes away and is later recreated with
-the same name and UUID, or to make slight alterations in the snapshot
-metadata (such as host-specific aspects of the domain XML embedded in
-the snapshot).  When this flag is supplied, the I<xmlfile> argument
-is mandatory, and the domain's current snapshot will not be altered
-unless the I<--current> flag is also given.
-
-If I<--no-metadata> is specified, then the snapshot data is created,
-but any metadata is immediately discarded (that is, libvirt does not
-treat the snapshot as current, and cannot revert to the snapshot
-unless I<--redefine> is later used to teach libvirt about the
-metadata again).
-
-If I<--reuse-external> is specified, and the snapshot XML requests an
-external snapshot with a destination of an existing file, then the
-destination must exist and be pre-created with correct format and
-metadata. The file is then reused; otherwise, a snapshot is refused
-to avoid losing contents of the existing files.
-
-If I<--quiesce> is specified, libvirt will try to use guest agent
-to freeze and unfreeze domain's mounted file systems. However,
-if domain has no guest agent, snapshot creation will fail.
-Currently, this requires I<--disk-only> to be passed as well.
-
-If I<--atomic> is specified, libvirt will guarantee that the snapshot
-either succeeds, or fails with no changes; not all hypervisors support
-this.  If this flag is not specified, then some hypervisors may fail
-after partially performing the action, and B<dumpxml> must be used to
-see whether any partial changes occurred.
-
-If I<--live> is specified, libvirt takes the snapshot while
-the guest is running. Both disk snapshot and domain memory snapshot are
-taken. This increases the size of the memory image of the external
-snapshot. This is currently supported only for full system external snapshots.
-
-Existence of snapshot metadata will prevent attempts to B<undefine>
-a persistent domain.  However, for transient domains, snapshot
-metadata is silently lost when the domain quits running (whether
-by command such as B<destroy> or by internal guest action).
-
-For now, it is not possible to create snapshots in a domain that has
-checkpoints, although this restriction will be lifted in a future
-release.
-
-=item B<snapshot-create-as> I<domain> {[I<--print-xml>]
-[I<--no-metadata>] [I<--halt>] [I<--reuse-external>]} [I<name>]
-[I<description>] [I<--disk-only> [I<--quiesce>]] [I<--atomic>]
-[[I<--live>] [I<--memspec> B<memspec>]] [I<--diskspec>] B<diskspec>]...
-
-Create a snapshot for domain I<domain> with the given <name> and
-<description>; if either value is omitted, libvirt will choose a
-value.  If I<--print-xml> is specified, then XML appropriate for
-I<snapshot-create> is output, rather than actually creating a snapshot.
-Otherwise, if I<--halt> is specified, the domain will be left in an
-inactive state after the snapshot is created, and if I<--disk-only>
-is specified, the snapshot will not include vm state.
-
-The I<--memspec> option can be used to control whether a full system snapshot
-is internal or external.  The I<--memspec> flag is mandatory, followed
-by a B<memspec> of the form B<[file=]name[,snapshot=type]>, where
-type can be B<no>, B<internal>, or B<external>.  To include a literal
-comma in B<file=name>, escape it with a second comma. I<--memspec> cannot
-be used together with I<--disk-only>.
-
-The I<--diskspec> option can be used to control how I<--disk-only> and
-external full system snapshots create external files.  This option can occur
-multiple times, according to the number of <disk> elements in the domain
-xml.  Each <diskspec> is in the
-form B<disk[,snapshot=type][,driver=type][,stype=type][,file=name]>.
-A I<diskspec> must be provided for disks backed by block devices as libvirt
-doesn't auto-generate file names for those.  The optional B<stype> parameter
-allows to control the type of the source file. Supported values are 'file'
-(default) and 'block'.
-
-To include a literal comma in B<disk> or in B<file=name>, escape it with a
-second comma.  A literal I<--diskspec> must precede each B<diskspec> unless
-all three of I<domain>, I<name>, and I<description> are also present.
-For example, a diskspec of "vda,snapshot=external,file=/path/to,,new"
-results in the following XML:
-  <disk name='vda' snapshot='external'>
-    <source file='/path/to,new'/>
-  </disk>
-
-If I<--reuse-external> is specified, and the domain XML or I<diskspec>
-option requests an external snapshot with a destination of an existing
-file, then the destination must exist and be pre-created with correct
-format and metadata. The file is then reused; otherwise, a snapshot
-is refused to avoid losing contents of the existing files.
-
-If I<--quiesce> is specified, libvirt will try to use guest agent
-to freeze and unfreeze domain's mounted file systems. However,
-if domain has no guest agent, snapshot creation will fail.
-Currently, this requires I<--disk-only> to be passed as well.
-
-If I<--no-metadata> is specified, then the snapshot data is created,
-but any metadata is immediately discarded (that is, libvirt does not
-treat the snapshot as current, and cannot revert to the snapshot
-unless B<snapshot-create> is later used to teach libvirt about the
-metadata again).
-
-If I<--atomic> is specified, libvirt will guarantee that the snapshot
-either succeeds, or fails with no changes; not all hypervisors support
-this.  If this flag is not specified, then some hypervisors may fail
-after partially performing the action, and B<dumpxml> must be used to
-see whether any partial changes occurred.
-
-If I<--live> is specified, libvirt takes the snapshot while the guest is
-running. This increases the size of the memory image of the external
-snapshot. This is currently supported only for external full system snapshots.
-
-For now, it is not possible to create snapshots in a domain that has
-checkpoints, although this restriction will be lifted in a future
-release.
-
-=item B<snapshot-current> I<domain> {[I<--name>] | [I<--security-info>]
-| [I<snapshotname>]}
-
-Without I<snapshotname>, this will output the snapshot XML for the domain's
-current snapshot (if any).  If I<--name> is specified, just the
-current snapshot name instead of the full xml.  Otherwise, using
-I<--security-info> will also include security sensitive information in
-the XML.
-
-With I<snapshotname>, this is a request to make the existing named
-snapshot become the current snapshot, without reverting the domain.
-
-=item B<snapshot-edit> I<domain> [I<snapshotname>] [I<--current>]
-{[I<--rename>] | [I<--clone>]}
-
-Edit the XML configuration file for I<snapshotname> of a domain.  If
-both I<snapshotname> and I<--current> are specified, also force the
-edited snapshot to become the current snapshot.  If I<snapshotname>
-is omitted, then I<--current> must be supplied, to edit the current
-snapshot.
-
-This is equivalent to:
-
- virsh snapshot-dumpxml dom name > snapshot.xml
- vi snapshot.xml (or make changes with your other text editor)
- virsh snapshot-create dom snapshot.xml --redefine [--current]
-
-except that it does some error checking.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-If I<--rename> is specified, then the edits can change the snapshot
-name.  If I<--clone> is specified, then changing the snapshot name
-will create a clone of the snapshot metadata.  If neither is specified,
-then the edits must not change the snapshot name.  Note that changing
-a snapshot name must be done with care, since the contents of some
-snapshots, such as internal snapshots within a single qcow2 file, are
-accessible only from the original name.
-
-=item B<snapshot-info> I<domain> {I<snapshot> | I<--current>}
-
-Output basic information about a named <snapshot>, or the current snapshot
-with I<--current>.
-
-=item B<snapshot-list> I<domain> [I<--metadata>] [I<--no-metadata>]
-[{I<--parent> | I<--roots> | [{I<--tree> | I<--name>}]}] [I<--topological>]
-[{[I<--from>] B<snapshot> | I<--current>} [I<--descendants>]]
-[I<--leaves>] [I<--no-leaves>] [I<--inactive>] [I<--active>]
-[I<--disk-only>] [I<--internal>] [I<--external>]
-
-List all of the available snapshots for the given domain, defaulting
-to show columns for the snapshot name, creation time, and domain state.
-
-Normally, table form output is sorted by snapshot name; using
-I<--topological> instead sorts so that no child is listed before its
-ancestors (although there may be more than one possible ordering with
-this property).
-
-If I<--parent> is specified, add a column to the output table giving
-the name of the parent of each snapshot.  If I<--roots> is specified,
-the list will be filtered to just snapshots that have no parents.
-If I<--tree> is specified, the output will be in a tree format, listing
-just snapshot names.  These three options are mutually exclusive. If
-I<--name> is specified only the snapshot name is printed. This option is
-mutually exclusive with I<--tree>.
-
-If I<--from> is provided, filter the list to snapshots which are
-children of the given B<snapshot>; or if I<--current> is provided,
-start at the current snapshot.  When used in isolation or with
-I<--parent>, the list is limited to direct children unless
-I<--descendants> is also present.  When used with I<--tree>, the
-use of I<--descendants> is implied.  This option is not compatible
-with I<--roots>.  Note that the starting point of I<--from> or
-I<--current> is not included in the list unless the I<--tree>
-option is also present.
-
-If I<--leaves> is specified, the list will be filtered to just
-snapshots that have no children.  Likewise, if I<--no-leaves> is
-specified, the list will be filtered to just snapshots with
-children.  (Note that omitting both options does no filtering,
-while providing both options will either produce the same list
-or error out depending on whether the server recognizes the flags).
-Filtering options are not compatible with I<--tree>.
-
-If I<--metadata> is specified, the list will be filtered to just
-snapshots that involve libvirt metadata, and thus would prevent
-B<undefine> of a persistent domain, or be lost on B<destroy> of
-a transient domain.  Likewise, if I<--no-metadata> is specified,
-the list will be filtered to just snapshots that exist without
-the need for libvirt metadata.
-
-If I<--inactive> is specified, the list will be filtered to snapshots
-that were taken when the domain was shut off.  If I<--active> is
-specified, the list will be filtered to snapshots that were taken
-when the domain was running, and where the snapshot includes the
-memory state to revert to that running state.  If I<--disk-only> is
-specified, the list will be filtered to snapshots that were taken
-when the domain was running, but where the snapshot includes only
-disk state.
-
-If I<--internal> is specified, the list will be filtered to snapshots
-that use internal storage of existing disk images.  If I<--external>
-is specified, the list will be filtered to snapshots that use external
-files for disk images or memory state.
-
-=item B<snapshot-dumpxml> I<domain> I<snapshot> [I<--security-info>]
-
-Output the snapshot XML for the domain's snapshot named I<snapshot>.
-Using I<--security-info> will also include security sensitive information.
-Use B<snapshot-current> to easily access the XML of the current snapshot.
-
-=item B<snapshot-parent> I<domain> {I<snapshot> | I<--current>}
-
-Output the name of the parent snapshot, if any, for the given
-I<snapshot>, or for the current snapshot with I<--current>.
-
-=item B<snapshot-revert> I<domain> {I<snapshot> | I<--current>}
-[{I<--running> | I<--paused>}] [I<--force>]
-
-Revert the given domain to the snapshot specified by I<snapshot>, or to
-the current snapshot with I<--current>.  Be aware
-that this is a destructive action; any changes in the domain since the last
-snapshot was taken will be lost.  Also note that the state of the domain after
-snapshot-revert is complete will be the state of the domain at the time
-the original snapshot was taken.
-
-Normally, reverting to a snapshot leaves the domain in the state it was
-at the time the snapshot was created, except that a disk snapshot with
-no vm state leaves the domain in an inactive state.  Passing either the
-I<--running> or I<--paused> flag will perform additional state changes
-(such as booting an inactive domain, or pausing a running domain).  Since
-transient domains cannot be inactive, it is required to use one of these
-flags when reverting to a disk snapshot of a transient domain.
-
-There are two cases where a snapshot revert involves extra risk, which
-requires the use of I<--force> to proceed.  One is the case of a
-snapshot that lacks full domain information for reverting
-configuration (such as snapshots created prior to libvirt 0.9.5);
-since libvirt cannot prove that the current configuration matches what
-was in use at the time of the snapshot, supplying I<--force> assures
-libvirt that the snapshot is compatible with the current configuration
-(and if it is not, the domain will likely fail to run).  The other is
-the case of reverting from a running domain to an active state where a
-new hypervisor has to be created rather than reusing the existing
-hypervisor, because it implies drawbacks such as breaking any existing
-VNC or Spice connections; this condition happens with an active
-snapshot that uses a provably incompatible configuration, as well as
-with an inactive snapshot that is combined with the I<--start> or
-I<--pause> flag.
-
-=item B<snapshot-delete> I<domain> {I<snapshot> | I<--current>} [I<--metadata>]
-[{I<--children> | I<--children-only>}]
-
-Delete the snapshot for the domain named I<snapshot>, or the current
-snapshot with I<--current>.  If this snapshot
-has child snapshots, changes from this snapshot will be merged into the
-children.  If I<--children> is passed, then delete this snapshot and any
-children of this snapshot.  If I<--children-only> is passed, then delete
-any children of this snapshot, but leave this snapshot intact.  These
-two flags are mutually exclusive.
-
-If I<--metadata> is specified, then only delete the snapshot metadata
-maintained by libvirt, while leaving the snapshot contents intact for
-access by external tools; otherwise deleting a snapshot also removes
-the data contents from that point in time.
-
-=back
-
-=head1 CHECKPOINT COMMANDS
-
-The following commands manipulate domain checkpoints.  Checkpoints serve as
-a point in time to identify which portions of a guest's disks have changed
-after that time, making it possible to perform incremental and differential
-backups.  Checkpoints are identified with a unique name.  See
-L<https://libvirt.org/formatcheckpoint.html> for documentation of the XML
-format used to represent properties of checkpoints.
-
-=over 4
-
-=item B<checkpoint-create> I<domain> [I<xmlfile>] { I<--redefine>
-| [I<--quiesce>]}
-
-Create a checkpoint for domain I<domain> with the properties specified
-in I<xmlfile> describing a <domaincheckpoint> top-level element. The
-format of the input XML file will be validated against an internal RNG
-schema (idential to using the L<virt-xml-validate(1)> tool). If
-I<xmlfile> is completely omitted, then libvirt will create a
-checkpoint with a name based on the current time.
-
-If I<--redefine> is specified, then all XML elements produced by
-B<checkpoint-dumpxml> are valid; this can be used to migrate
-checkpoint hierarchy from one machine to another, to recreate
-hierarchy for the case of a transient domain that goes away and is
-later recreated with the same name and UUID, or to make slight
-alterations in the checkpoint metadata (such as host-specific aspects
-of the domain XML embedded in the checkpoint).  When this flag is
-supplied, the I<xmlfile> argument is mandatory.
-
-If I<--quiesce> is specified, libvirt will try to use guest agent
-to freeze and unfreeze domain's mounted file systems. However,
-if domain has no guest agent, checkpoint creation will fail.
-
-Existence of checkpoint metadata will prevent attempts to B<undefine>
-a persistent domain.  However, for transient domains, checkpoint
-metadata is silently lost when the domain quits running (whether
-by command such as B<destroy> or by internal guest action).
-
-For now, it is not possible to create checkpoints in a domain that has
-snapshots, although this restriction will be lifted in a future
-release.
-
-=item B<checkpoint-create-as> I<domain> [I<--print-xml>]
-[I<name>] [I<description>] [I<--quiesce>] [I<--diskspec>] B<diskspec>]...
-
-Create a checkpoint for domain I<domain> with the given <name> and
-<description>; if either value is omitted, libvirt will choose a
-value.  If I<--print-xml> is specified, then XML appropriate for
-I<checkpoint-create> is output, rather than actually creating a
-checkpoint.
-
-The I<--diskspec> option can be used to control which guest disks
-participate in the checkpoint. This option can occur multiple times,
-according to the number of <disk> elements in the domain xml.  Each
-<diskspec> is in the form B<disk[,checkpoint=type][,bitmap=name]>. A
-literal I<--diskspec> must precede each B<diskspec> unless
-all three of I<domain>, I<name>, and I<description> are also present.
-For example, a diskspec of "vda,checkpoint=bitmap,bitmap=map1"
-results in the following XML:
-  <disk name='vda' checkpoint='bitmap' bitmap='map1'/>
-
-If I<--quiesce> is specified, libvirt will try to use guest agent
-to freeze and unfreeze domain's mounted file systems. However,
-if domain has no guest agent, checkpoint creation will fail.
-
-For now, it is not possible to create checkpoints in a domain that has
-snapshots, although this restriction will be lifted in a future
-release.
-
-=item B<checkpoint-edit> I<domain> I<checkpointname>
-
-Edit the XML configuration file for I<checkpointname> of a domain.
-
-This is equivalent to:
-
- virsh checkpoint-dumpxml dom name > checkpoint.xml
- vi checkpoint.xml (or make changes with your other text editor)
- virsh checkpoint-create dom checkpoint.xml --redefine
-
-except that it does some error checking, including that the edits
-should not attempt to change the checkpoint name.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=item B<checkpoint-info> I<domain> I<checkpoint>
-
-Output basic information about a named <checkpoint>.
-
-=item B<checkpoint-list> I<domain> [{I<--parent> | I<--roots> |
-[{I<--tree> | I<--name>}]}] [I<--topological>]
-[[I<--from>] B<checkpoint> | [I<--descendants>]]
-[I<--leaves>] [I<--no-leaves>]
-
-List all of the available checkpoints for the given domain, defaulting
-to show columns for the checkpoint name and creation time.
-
-Normally, table form output is sorted by checkpoint name; using
-I<--topological> instead sorts so that no child is listed before its
-ancestors (although there may be more than one possible ordering with
-this property).
-
-If I<--parent> is specified, add a column to the output table giving
-the name of the parent of each checkpoint.  If I<--roots> is
-specified, the list will be filtered to just checkpoints that have no
-parents.  If I<--tree> is specified, the output will be in a tree
-format, listing just checkpoint names.  These three options are
-mutually exclusive. If I<--name> is specified only the checkpoint name
-is printed. This option is mutually exclusive with I<--tree>.
-
-If I<--from> is provided, filter the list to checkpoints which are
-children of the given B<checkpoint>.  When used in isolation or with
-I<--parent>, the list is limited to direct children unless
-I<--descendants> is also present.  When used with I<--tree>, the use
-of I<--descendants> is implied.  This option is not compatible with
-I<--roots>.  Note that the starting point of I<--from>
-is not included in the list unless the I<--tree> option is also
-present.
-
-If I<--leaves> is specified, the list will be filtered to just
-checkpoints that have no children.  Likewise, if I<--no-leaves> is
-specified, the list will be filtered to just checkpoints with
-children.  (Note that omitting both options does no filtering, while
-providing both options will either produce the same list or error out
-depending on whether the server recognizes the flags).  Filtering
-options are not compatible with I<--tree>.
-
-=item B<checkpoint-dumpxml> I<domain> I<checkpoint>
-[I<--security-info>] [I<--no-domain>] [I<--size>]
-
-Output the checkpoint XML for the domain's checkpoint named
-I<checkpoint>.  Using
-I<--security-info> will also include security sensitive information.
-Using I<--size> will add XML indicating the current size in bytes of
-guest data that has changed since the checkpoint was created (although
-remember that guest activity between a size check and actually
-creating a backup can result in the backup needing slightly more
-space).  Using I<--no-domain> will omit the <domain> element from the
-output for a more compact view.
-
-=item B<checkpoint-parent> I<domain> I<checkpoint>
-
-Output the name of the parent checkpoint, if any, for the given
-I<checkpoint>.
-
-=item B<checkpoint-delete> I<domain> I<checkpoint>
-[I<--metadata>] [{I<--children> | I<--children-only>}]
-
-Delete the checkpoint for the domain named I<checkpoint>.  The
-record of which portions of
-the disk changed since the checkpoint are merged into the parent
-checkpoint (if any). If I<--children> is passed, then delete this
-checkpoint and any children of this checkpoint.  If I<--children-only>
-is passed, then delete any children of this checkpoint, but leave this
-checkpoint intact. These two flags are mutually exclusive.
-
-If I<--metadata> is specified, then only delete the checkpoint
-metadata maintained by libvirt, while leaving the checkpoint contents
-intact for access by external tools; otherwise deleting a checkpoint
-also removes the ability to perform an incremental backup from that
-point in time.
-
-=back
-
-=head1 NWFILTER COMMANDS
-
-The following commands manipulate network filters. Network filters allow
-filtering of the network traffic coming from and going to virtual machines.
-Individual network traffic filters are written in XML and may contain
-references to other network filters, describe traffic filtering rules,
-or contain both. Network filters are referenced by virtual machines
-from within their interface description. A network filter may be referenced
-by multiple virtual machines' interfaces.
-
-=over 4
-
-=item B<nwfilter-define> I<xmlfile>
-
-Make a new network filter known to libvirt. If a network filter with
-the same name already exists, it will be replaced with the new XML.
-Any running virtual machine referencing this network filter will have
-its network traffic rules adapted. If for any reason the network traffic
-filtering rules cannot be instantiated by any of the running virtual
-machines, then the new XML will be rejected.
-
-=item B<nwfilter-undefine> I<nwfilter-name>
-
-Delete a network filter. The deletion will fail if any running virtual
-machine is currently using this network filter.
-
-=item B<nwfilter-list>
-
-List all of the available network filters.
-
-=item B<nwfilter-dumpxml> I<nwfilter-name>
-
-Output the network filter XML.
-
-=item B<nwfilter-edit> I<nwfilter-name>
-
-Edit the XML of a network filter.
-
-This is equivalent to:
-
- virsh nwfilter-dumpxml myfilter > myfilter.xml
- vi myfilter.xml (or make changes with your other text editor)
- virsh nwfilter-define myfilter.xml
-
-except that it does some error checking.
-The new network filter may be rejected due to the same reason as
-mentioned in I<nwfilter-define>.
-
-The editor used can be supplied by the C<$VISUAL> or C<$EDITOR> environment
-variables, and defaults to C<vi>.
-
-=back
-
-=head1 NWFILTER BINDING COMMANDS
-
-The following commands manipulate network filter bindings. Network filter
-bindings track the association between a network port and a network
-filter. Generally the bindings are managed automatically by the hypervisor
-drivers when adding/removing NICs on a guest.
-
-If an admin is creating/deleting TAP devices for non-guest usage,
-however, the network filter binding commands provide a way to make use
-of the network filters directly.
-
-=over 4
-
-=item B<nwfilter-binding-create> I<xmlfile>
-
-Associate a network port with a network filter. The network filter backend
-will immediately attempt to instantiate the filter rules on the port. This
-command may be used to associate a filter with a currently running guest
-that does not have a filter defined for a specific network port. Since the
-bindings are generally automatically managed by the hypervisor, using this
-command to define a filter for a network port and then starting the guest
-afterwards may prevent the guest from starting if it attempts to use the
-network port and finds a filter already defined.
-
-=item B<nwfilter-binding-delete> I<port-name>
-
-Disassociate a network port from a network filter. The network filter
-backend will immediately tear down the filter rules that exist on the
-port. This command may be used to remove the network port binding for
-a filter currently in use for the guest while the guest is running
-without needing to restart the guest. Restoring the network port binding
-filter for the running guest would be accomplished by using
-I<nwfilter-binding-create>.
-
-=item B<nwfilter-binding-list>
-
-List all of the network ports which have filters associated with them.
-
-=item B<nwfilter-binding-dumpxml> I<port-name>
-
-Output the network filter binding XML for the network device called
-C<port-name>.
-
-=back
-
-=head1 HYPERVISOR-SPECIFIC COMMANDS
-
-NOTE: Use of the following commands is B<strongly> discouraged.  They
-can cause libvirt to become confused and do the wrong thing on subsequent
-operations.  Once you have used these commands, please do not report
-problems to the libvirt developers; the reports will be ignored.  If
-you find that these commands are the only way to accomplish something,
-then it is better to request that the feature be added as a first-class
-citizen in the regular libvirt library.
-
-=over 4
-
-=item B<qemu-attach> I<pid>
-
-Attach an externally launched QEMU process to the libvirt QEMU driver.
-The QEMU process must have been created with a monitor connection
-using the UNIX driver. Ideally the process will also have had the
-'-name' argument specified.
-
-=over 4
-
-     $ qemu-kvm -cdrom ~/demo.iso \
-         -monitor unix:/tmp/demo,server,nowait \
-         -name foo \
-         -uuid cece4f9f-dff0-575d-0e8e-01fe380f12ea  &
-     $ QEMUPID=$!
-     $ virsh qemu-attach $QEMUPID
-
-=back
-
-Not all functions of libvirt are expected to work reliably after
-attaching to an externally launched QEMU process. There may be
-issues with the guest ABI changing upon migration and device hotplug
-or hotunplug may not work. The attached environment should be considered
-primarily read-only.
-
-=item B<qemu-monitor-command> I<domain> { [I<--hmp>] | [I<--pretty>] }
-I<command>...
-
-Send an arbitrary monitor command I<command> to domain I<domain> through the
-qemu monitor.  The results of the command will be printed on stdout.  If
-I<--hmp> is passed, the command is considered to be a human monitor command
-and libvirt will automatically convert it into QMP if needed.  In that case
-the result will also be converted back from QMP.  If I<--pretty> is given,
-and the monitor uses QMP, then the output will be pretty-printed.  If more
-than one argument is provided for I<command>, they are concatenated with a
-space in between before passing the single command to the monitor.
-
-=item B<qemu-agent-command> I<domain> [I<--timeout> I<seconds> | I<--async> |
-I<--block>] I<command>...
-
-Send an arbitrary guest agent command I<command> to domain I<domain> through
-qemu agent.
-I<--timeout>, I<--async> and I<--block> options are exclusive.
-I<--timeout> requires timeout seconds I<seconds> and it must be positive.
-When I<--aysnc> is given, the command waits for timeout whether success or
-failed. And when I<--block> is given, the command waits forever with blocking
-timeout.
-
-=item B<qemu-monitor-event> [I<domain>] [I<--event> I<event-name>] [I<--loop>]
-[I<--timeout> I<seconds>] [I<--pretty>] [I<--regex>] [I<--no-case>]
-[I<--timestamp>]
-
-Wait for arbitrary QEMU monitor events to occur, and print out the
-details of events as they happen.  The events can optionally be filtered
-by I<domain> or I<event-name>.  The 'query-events' QMP command can be
-used via I<qemu-monitor-command> to learn what events are supported.
-If I<--regex> is used, I<event-name> is a basic regular expression
-instead of a literal string.  If I<--no-case> is used, I<event-name>
-will match case-insensitively.
-
-By default, this command is one-shot, and returns success once an event
-occurs; you can send SIGINT (usually via C<Ctrl-C>) to quit immediately.
-If I<--timeout> is specified, the command gives up waiting for events
-after I<seconds> have elapsed.  With I<--loop>, the command prints all
-events until a timeout or interrupt key.  If I<--pretty> is specified,
-any JSON event details are pretty-printed for better legibility.
-
-When I<--timestamp> is used, a human-readable timestamp will be printed
-before the event, and the timing information provided by QEMU will be
-omitted.
-
-=item B<lxc-enter-namespace> I<domain> [I<--noseclabel>] -- /path/to/binary [arg1, [arg2, ...]]
-
-Enter the namespace of I<domain> and execute the command C</path/to/binary>
-passing the requested args. The binary path is relative to the container
-root filesystem, not the host root filesystem. The binary will inherit the
-environment variables / console visible to virsh. The command will be run
-with the same sVirt context and cgroups placement as processes within the
-container. This command only works when connected to the LXC hypervisor
-driver.  This command succeeds only if C</path/to/binary> has 0 exit status.
-
-By default the new process will run with the security label of the new
-parent container. Use the I<--noseclabel> option to instead have the
-process keep the same security label as C<virsh>.
-
-=back
-
-=head1 ENVIRONMENT
-
-The following environment variables can be set to alter the behaviour
-of C<virsh>
-
-=over 4
-
-=item VIRSH_DEBUG=<0 to 4>
-
-Turn on verbose debugging of virsh commands. Valid levels are
-
-=over 4
-
-=item * VIRSH_DEBUG=0
-
-DEBUG - Messages at ALL levels get logged
-
-=item * VIRSH_DEBUG=1
-
-INFO - Logs messages at levels INFO, NOTICE, WARNING and ERROR
-
-=item * VIRSH_DEBUG=2
-
-NOTICE - Logs messages at levels NOTICE, WARNING and ERROR
-
-=item * VIRSH_DEBUG=3
-
-WARNING - Logs messages at levels WARNING and ERROR
-
-=item * VIRSH_DEBUG=4
-
-ERROR - Messages at only ERROR level gets logged.
-
-=back
-
-=item VIRSH_LOG_FILE=C<LOGFILE>
-
-The file to log virsh debug messages.
-
-=item VIRSH_DEFAULT_CONNECT_URI
-
-The hypervisor to connect to by default. Set this to a URI, in the same
-format as accepted by the B<connect> option. This environment variable
-is deprecated in favour of the global B<LIBVIRT_DEFAULT_URI> variable
-which serves the same purpose.
-
-=item LIBVIRT_DEFAULT_URI
-
-The hypervisor to connect to by default. Set this to a URI, in the
-same format as accepted by the B<connect> option. This overrides
-the default URI set in any client config file and prevents libvirt
-from probing for drivers.
-
-=item VISUAL
-
-The editor to use by the B<edit> and related options.
-
-=item EDITOR
-
-The editor to use by the B<edit> and related options, if C<VISUAL>
-is not set.
-
-=item VIRSH_HISTSIZE
-
-The number of commands to remember in the command  history.  The
-default value is 500.
-
-=item LIBVIRT_DEBUG=LEVEL
-
-Turn on verbose debugging of all libvirt API calls. Valid levels are
-
-=over 4
-
-=item * LIBVIRT_DEBUG=1
-
-Messages at level DEBUG or above
-
-=item * LIBVIRT_DEBUG=2
-
-Messages at level INFO or above
-
-=item * LIBVIRT_DEBUG=3
-
-Messages at level WARNING or above
-
-=item * LIBVIRT_DEBUG=4
-
-Messages at level ERROR
-
-=back
-
-For further information about debugging options consult
-L<https://libvirt.org/logging.html>
-
-=back
-
-=head1 BUGS
-
-Report any bugs discovered to the libvirt community via the mailing
-list L<https://libvirt.org/contact.html> or bug tracker
-L<https://libvirt.org/bugs.html>.
-Alternatively report bugs to your software distributor / vendor.
-
-=head1 AUTHORS
-
-  Please refer to the AUTHORS file distributed with libvirt.
-
-  Based on the xm man page by:
-  Sean Dague <sean at dague dot net>
-  Daniel Stekloff <dsteklof at us dot ibm dot com>
-
-=head1 COPYRIGHT
-
-Copyright (C) 2005, 2007-2015 Red Hat, Inc., and the authors listed in the
-libvirt AUTHORS file.
-
-=head1 LICENSE
-
-virsh is distributed under the terms of the GNU LGPL v2+.
-This is free software; see the source for copying conditions. There
-is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE
-
-=head1 SEE ALSO
-
-L<virt-install(1)>, L<virt-xml-validate(1)>, L<virt-top(1)>, L<virt-df(1)>,
-L<https://libvirt.org/>
-
-=cut
-- 
2.23.0




More information about the libvir-list mailing list