KVM Kernel Virtualization Machine on Rocky Linux 9: Difference between revisions
mNo edit summary  | 
				mNo edit summary  | 
				||
| Line 47: | Line 47: | ||
KEEP THIS IN MIND: In the QEMU / KVM world, here's how the networking thing functions:  | KEEP THIS IN MIND: In the QEMU / KVM world, here's how the networking thing functions:  | ||
* After installing QEMU / KVM, it creates a Virtual Bridge Adapter intended to be used with NAT.  Leave this one as is if you want to use it.  But if you just want a simple bridge to connect to the rest of your network, keep reading.  This Virtual Bridge  | *After installing QEMU / KVM, it creates a Virtual Bridge Adapter intended to be used with NAT.  Leave this one as is if you want to use it.  But if you just want a simple bridge to connect to the rest of your network, keep reading.  This Virtual Bridge  | ||
Here's the assumption (unlike all the other tutorials there);  | Here's the assumption (unlike all the other tutorials there);  | ||
* There is an existing Ethernet Adapter on the Host Machine for QEMU / KVM that has been configured with an IP Address, Subnet Mask, IE, everything needed to communicate via a Network.  | *There is an existing Ethernet Adapter on the Host Machine for QEMU / KVM that has been configured with an IP Address, Subnet Mask, IE, everything needed to communicate via a Network.  | ||
* During the installation for QEMU / KVM, a Virtual Bridge Adapter was automatically configured  | *During the installation for QEMU / KVM, a Virtual Bridge Adapter was automatically configured  | ||
OK, here's what to do for creating your own Virtual Bridge Adapter to be used for 'bridging' between your existing network and the Virtual Machine;  | OK, here's what to do for creating your own Virtual Bridge Adapter to be used for 'bridging' between your existing network and the Virtual Machine;  | ||
* Identify Ethernet Adapter and Virtual Bridge to be used, IE, get their names (eth0, enp1s0of0, virbr0, etc.) using these commands: brctl show AND / OR ip link show  | *Identify Ethernet Adapter and Virtual Bridge to be used, IE, get their names (eth0, enp1s0of0, virbr0, etc.) using these commands: brctl show AND / OR ip link show  | ||
* Disable the ''existing'' Ethernet Adapter (through GUI or command line).  Don't delete it as most tutorials would have you do (if needed you can always enable it later instead of re-creating it from scratch)  | *Disable the ''existing'' Ethernet Adapter (through GUI or command line).  Don't delete it as most tutorials would have you do (if needed you can always enable it later instead of re-creating it from scratch)  | ||
** nmcli connection modify WhatEverConnectionName connection.autoconnect "no"  | **nmcli connection modify WhatEverConnectionName connection.autoconnect "no"  | ||
** ifconfig WhatEverConnectionName down OR ip link set dev WhatEverConnectionName down  | **ifconfig WhatEverConnectionName down OR ip link set dev WhatEverConnectionName down  | ||
* nmcli connection add type bridge autoconnect yes con-name virbr1 ifname virbr1  | *nmcli connection add type bridge autoconnect yes con-name virbr1 ifname virbr1  | ||
* Other example NMCLI commands;  | *Other example NMCLI commands;  | ||
** nmcli connection show  | **nmcli connection show  | ||
** Modify the /etc/NetworkManager/system-connections File?  Nope!  | **Modify the /etc/NetworkManager/system-connections File?  Nope!  | ||
*** nmcli connection modify WhatEverConnectionName ipv4.address "WhatEverIPAddress/SubnetMaskNumber" (192.168.1.1/24)  | ***nmcli connection modify WhatEverConnectionName ipv4.address "WhatEverIPAddress/SubnetMaskNumber" (192.168.1.1/24)  | ||
*** nmcli connection up WhatEverConnectionName (essentially restarts the adapter and adopts new configuration information)  | ***nmcli connection up WhatEverConnectionName (essentially restarts the adapter and adopts new configuration information)  | ||
*** Does NOT work as one might think to 'reload' or restart a Network Adapter after configuration changes are made: nmcli connection reload  | ***Does NOT work as one might think to 'reload' or restart a Network Adapter after configuration changes are made: nmcli connection reload  | ||
*** nmcli connection show WhatEverConnectionName (ipv4.address = configured value AND IPV4.ADDRESS = "live / actual value")  | ***nmcli connection show WhatEverConnectionName (ipv4.address = configured value AND IPV4.ADDRESS = "live / actual value")  | ||
** systemctl restart NetworkManager  | **systemctl restart NetworkManager  | ||
*    | *  | ||
'''Tricks, Tips, and Other Useful Information (all of which applies to Rocky Linux 9, and others based on Red Hat)'''  | '''Tricks, Tips, and Other Useful Information (all of which applies to Rocky Linux 9, and others based on Red Hat)'''  | ||
*Rocky Linux 9 Network Configuration Files Directory: /etc/Network/Manager/system-connections (NOT /etc/sysconfig/network-scripts)  | *Rocky Linux 9 Network Configuration Files Directory: /etc/Network/Manager/system-connections (NOT /etc/sysconfig/network-scripts)  | ||
*Network Configuration: nm-connection-editor  | *Network Configuration for Rocky Linux: nm-connection-editor  | ||
*If a Bridged Network Adapter is configured for a Virtual Machine, it will show up in the Host Machine as: vnet1, etc.  | *If a Bridged Network Adapter is configured for a Virtual Machine, it will show up in the Host Machine as: vnet1, etc.  | ||
*QEMU / KVM Bridges can be configure "within" QEMU / KVM and "externally" using commands like brctl, etc.  | |||
*QEMU / KVM Configuration Files: /etc/libvirt/qemu/  | *QEMU / KVM Configuration Files: /etc/libvirt/qemu/  | ||
**Heed the warning notes on some of these files as they should not be edited directly.  Although a workaround is to edit the files directly, then restart the libvirtd.service (systemctl restart libvirtd.service)  | **Heed the warning notes on some of these files as they should not be edited directly.  Although a workaround is to edit the files directly, then restart the libvirtd.service (systemctl restart libvirtd.service)  | ||
| Line 103: | Line 104: | ||
Why is the UUID for the virbr0 Virtual Bridge Adapter displayed in the QEMU / KVM Host using the IP LINK SHOW command different than the UUID setting configured in the /etc/libvirt/qemu/networks/default.xml File, even though the MAC Address is the same in the Host (using IP LINK SHOW) and the default.xml File?  | Why is the UUID for the virbr0 Virtual Bridge Adapter displayed in the QEMU / KVM Host using the IP LINK SHOW command different than the UUID setting configured in the /etc/libvirt/qemu/networks/default.xml File, even though the MAC Address is the same in the Host (using IP LINK SHOW) and the default.xml File?  | ||
ChatGPT's explanation is below  | ChatGPT's explanation is below (which is very good considering that Googling an equivalent answer produces nothing but hundreds of stupid forum results that ramble about how something isn't working).  There is also some additional information from https://wiki.libvirt.org/Networking.html.<syntaxhighlight lang="text">  | ||
The discrepancy between the UUID in the default.xml file and the one displayed by the ip link show command might be due to the fact that the UUID in the XML configuration file refers to the libvirt network object's UUID, not the actual bridge interface's UUID.  | The discrepancy between the UUID in the default.xml file and the one displayed by the ip link show command might be due to the fact that the UUID in the XML configuration file refers to the libvirt network object's UUID, not the actual bridge interface's UUID.  | ||
| Line 133: | Line 134: | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
The above can be confirmed using the following commands  | |||
* virsh net-destroy default (maybe there should be an 'in-between' option like net-stop, but oh well) : "Stops and Destroys" the virbr0 (defined by default.xml, which is not deleted)  | |||
* virsh net-start default : Starts the virb0 (defined by the default.xml file)  | |||
*   | |||
'''Rough Notes'''  | |||
<network>  | |||
  <name>my-bridge-network</name>  | |||
  <forward mode='bridge'/>  | |||
  <bridge name='virbr_bridge'/>  | |||
</network>  | |||
sudo virsh net-define bridge-network.xml  | |||
sudo virsh net-start my-bridge-network  | |||
sudo virsh net-autostart my-bridge-network  | |||
<syntaxhighlight lang="text">  | |||
virsh [options]... [<command_string>]  | |||
virsh [options]... <command> [args...]  | |||
  options:  | |||
    -c | --connect=URI      hypervisor connection URI  | |||
    -d | --debug=NUM        debug level [0-4]  | |||
    -e | --escape <char>    set escape sequence for console  | |||
    -h | --help             this help  | |||
    -k | --keepalive-interval=NUM  | |||
                            keepalive interval in seconds, 0 for disable  | |||
    -K | --keepalive-count=NUM  | |||
                            number of possible missed keepalive messages  | |||
    -l | --log=FILE         output logging to file  | |||
    -q | --quiet            quiet mode  | |||
    -r | --readonly         connect readonly  | |||
    -t | --timing           print timing information  | |||
    -v                      short version  | |||
    -V                      long version  | |||
         --version[=TYPE]   version, TYPE is short or long (default short)  | |||
  commands (non interactive mode):  | |||
 Domain Management (help keyword 'domain')  | |||
    attach-device                  attach device from an XML file  | |||
    attach-disk                    attach disk device  | |||
    attach-interface               attach network interface  | |||
    autostart                      autostart a domain  | |||
    blkdeviotune                   Set or query a block device I/O tuning parameters.  | |||
    blkiotune                      Get or set blkio parameters  | |||
    blockcommit                    Start a block commit operation.  | |||
    blockcopy                      Start a block copy operation.  | |||
    blockjob                       Manage active block operations  | |||
    blockpull                      Populate a disk from its backing image.  | |||
    blockresize                    Resize block device of domain.  | |||
    change-media                   Change media of CD or floppy drive  | |||
    console                        connect to the guest console  | |||
    cpu-stats                      show domain cpu statistics  | |||
    create                         create a domain from an XML file  | |||
    define                         define (but don't start) a domain from an XML file  | |||
    desc                           show or set domain's description or title  | |||
    destroy                        destroy (stop) a domain  | |||
    detach-device                  detach device from an XML file  | |||
    detach-device-alias            detach device from an alias  | |||
    detach-disk                    detach disk device  | |||
    detach-interface               detach network interface  | |||
    domdisplay                     domain display connection URI  | |||
    domfsfreeze                    Freeze domain's mounted filesystems.  | |||
    domfsthaw                      Thaw domain's mounted filesystems.  | |||
    domfsinfo                      Get information of domain's mounted filesystems.  | |||
    domfstrim                      Invoke fstrim on domain's mounted filesystems.  | |||
    domhostname                    print the domain's hostname  | |||
    domid                          convert a domain name or UUID to domain id  | |||
    domif-setlink                  set link state of a virtual interface  | |||
    domiftune                      get/set parameters of a virtual interface  | |||
    domjobabort                    abort active domain job  | |||
    domjobinfo                     domain job information  | |||
    domlaunchsecinfo               Get domain launch security info  | |||
    domsetlaunchsecstate           Set domain launch security state  | |||
    domname                        convert a domain id or UUID to domain name  | |||
    domrename                      rename a domain  | |||
    dompmsuspend                   suspend a domain gracefully using power management functions  | |||
    dompmwakeup                    wakeup a domain from pmsuspended state  | |||
    domuuid                        convert a domain name or id to domain UUID  | |||
    domxml-from-native             Convert native config to domain XML  | |||
    domxml-to-native               Convert domain XML to native config  | |||
    dump                           dump the core of a domain to a file for analysis  | |||
    dumpxml                        domain information in XML  | |||
    edit                           edit XML configuration for a domain  | |||
    get-user-sshkeys               list authorized SSH keys for given user (via agent)  | |||
    inject-nmi                     Inject NMI to the guest  | |||
    iothreadinfo                   view domain IOThreads  | |||
    iothreadpin                    control domain IOThread affinity  | |||
    iothreadadd                    add an IOThread to the guest domain  | |||
    iothreadset                    modifies an existing IOThread of the guest domain  | |||
    iothreaddel                    delete an IOThread from the guest domain  | |||
    send-key                       Send keycodes to the guest  | |||
    send-process-signal            Send signals to processes  | |||
    lxc-enter-namespace            LXC Guest Enter Namespace  | |||
    managedsave                    managed save of a domain state  | |||
    managedsave-remove             Remove managed save of a domain  | |||
    managedsave-edit               edit XML for a domain's managed save state file  | |||
    managedsave-dumpxml            Domain information of managed save state file in XML  | |||
    managedsave-define             redefine the XML for a domain's managed save state file  | |||
    memtune                        Get or set memory parameters  | |||
    perf                           Get or set perf event  | |||
    metadata                       show or set domain's custom XML metadata  | |||
    migrate                        migrate domain to another host  | |||
    migrate-setmaxdowntime         set maximum tolerable downtime  | |||
    migrate-getmaxdowntime         get maximum tolerable downtime  | |||
    migrate-compcache              get/set compression cache size  | |||
    migrate-setspeed               Set the maximum migration bandwidth  | |||
    migrate-getspeed               Get the maximum migration bandwidth  | |||
    migrate-postcopy               Switch running migration from pre-copy to post-copy  | |||
    numatune                       Get or set numa parameters  | |||
    qemu-attach                    QEMU Attach  | |||
    qemu-monitor-command           QEMU Monitor Command  | |||
    qemu-monitor-event             QEMU Monitor Events  | |||
    qemu-agent-command             QEMU Guest Agent Command  | |||
    guest-agent-timeout            Set the guest agent timeout  | |||
    reboot                         reboot a domain  | |||
    reset                          reset a domain  | |||
    restore                        restore a domain from a saved state in a file  | |||
    resume                         resume a domain  | |||
    save                           save a domain state to a file  | |||
    save-image-define              redefine the XML for a domain's saved state file  | |||
    save-image-dumpxml             saved state domain information in XML  | |||
    save-image-edit                edit XML for a domain's saved state file  | |||
    schedinfo                      show/set scheduler parameters  | |||
    screenshot                     take a screenshot of a current domain console and store it into a file  | |||
    set-lifecycle-action           change lifecycle actions  | |||
    set-user-sshkeys               manipulate authorized SSH keys file for given user (via agent)  | |||
    set-user-password              set the user password inside the domain  | |||
    setmaxmem                      change maximum memory limit  | |||
    setmem                         change memory allocation  | |||
    setvcpus                       change number of virtual CPUs  | |||
    shutdown                       gracefully shutdown a domain  | |||
    start                          start a (previously defined) inactive domain  | |||
    suspend                        suspend a domain  | |||
    ttyconsole                     tty console  | |||
    undefine                       undefine a domain  | |||
    update-device                  update device from an XML file  | |||
    update-memory-device           update memory device of a domain  | |||
    vcpucount                      domain vcpu counts  | |||
    vcpuinfo                       detailed domain vcpu information  | |||
    vcpupin                        control or query domain vcpu affinity  | |||
    emulatorpin                    control or query domain emulator affinity  | |||
    vncdisplay                     vnc display  | |||
    guestvcpus                     query or modify state of vcpu in the guest (via agent)  | |||
    setvcpu                        attach/detach vcpu or groups of threads  | |||
    domblkthreshold                set the threshold for block-threshold event for a given block device or it's backing chain element  | |||
    guestinfo                      query information about the guest (via agent)  | |||
    domdirtyrate-calc              Calculate a vm's memory dirty rate  | |||
    dom-fd-associate               associate a FD with a domain  | |||
 Domain Monitoring (help keyword 'monitor')  | |||
    domblkerror                    Show errors on block devices  | |||
    domblkinfo                     domain block device size information  | |||
    domblklist                     list all domain blocks  | |||
    domblkstat                     get device block stats for a domain  | |||
    domcontrol                     domain control interface state  | |||
    domif-getlink                  get link state of a virtual interface  | |||
    domifaddr                      Get network interfaces' addresses for a running domain  | |||
    domiflist                      list all domain virtual interfaces  | |||
    domifstat                      get network interface stats for a domain  | |||
    dominfo                        domain information  | |||
    dommemstat                     get memory statistics for a domain  | |||
    domstate                       domain state  | |||
    domstats                       get statistics about one or multiple domains  | |||
    domtime                        domain time  | |||
    list                           list domains  | |||
 Domain Events (help keyword 'events')  | |||
    event                          Domain Events  | |||
 Host and Hypervisor (help keyword 'host')  | |||
    allocpages                     Manipulate pages pool size  | |||
    capabilities                   capabilities  | |||
    cpu-baseline                   compute baseline CPU  | |||
    cpu-compare                    compare host CPU with a CPU described by an XML file  | |||
    cpu-models                     CPU models  | |||
    domcapabilities                domain capabilities  | |||
    freecell                       NUMA free memory  | |||
    freepages                      NUMA free pages  | |||
    hostname                       print the hypervisor hostname  | |||
    hypervisor-cpu-baseline        compute baseline CPU usable by a specific hypervisor  | |||
    hypervisor-cpu-compare         compare a CPU with the CPU created by a hypervisor on the host  | |||
    maxvcpus                       connection vcpu maximum  | |||
    node-memory-tune               Get or set node memory parameters  | |||
    nodecpumap                     node cpu map  | |||
    nodecpustats                   Prints cpu stats of the node.  | |||
    nodeinfo                       node information  | |||
    nodememstats                   Prints memory stats of the node.  | |||
    nodesevinfo                    node SEV information  | |||
    nodesuspend                    suspend the host node for a given time duration  | |||
    sysinfo                        print the hypervisor sysinfo  | |||
    uri                            print the hypervisor canonical URI  | |||
    version                        show version  | |||
 Checkpoint (help keyword 'checkpoint')  | |||
    checkpoint-create              Create a checkpoint from XML  | |||
    checkpoint-create-as           Create a checkpoint from a set of args  | |||
    checkpoint-delete              Delete a domain checkpoint  | |||
    checkpoint-dumpxml             Dump XML for a domain checkpoint  | |||
    checkpoint-edit                edit XML for a checkpoint  | |||
    checkpoint-info                checkpoint information  | |||
    checkpoint-list                List checkpoints for a domain  | |||
    checkpoint-parent              Get the name of the parent of a checkpoint  | |||
 Interface (help keyword 'interface')  | |||
    iface-begin                    create a snapshot of current interfaces settings, which can be later committed (iface-commit) or restored (iface-rollback)  | |||
    iface-bridge                   create a bridge device and attach an existing network device to it  | |||
    iface-commit                   commit changes made since iface-begin and free restore point  | |||
    iface-define                   define an inactive persistent physical host interface or modify an existing persistent one from an XML file  | |||
    iface-destroy                  destroy a physical host interface (disable it / "if-down")  | |||
    iface-dumpxml                  interface information in XML  | |||
    iface-edit                     edit XML configuration for a physical host interface  | |||
    iface-list                     list physical host interfaces  | |||
    iface-mac                      convert an interface name to interface MAC address  | |||
    iface-name                     convert an interface MAC address to interface name  | |||
    iface-rollback                 rollback to previous saved configuration created via iface-begin  | |||
    iface-start                    start a physical host interface (enable it / "if-up")  | |||
    iface-unbridge                 undefine a bridge device after detaching its device(s)  | |||
    iface-undefine                 undefine a physical host interface (remove it from configuration)  | |||
 Network Filter (help keyword 'filter')  | |||
    nwfilter-define                define or update a network filter from an XML file  | |||
    nwfilter-dumpxml               network filter information in XML  | |||
    nwfilter-edit                  edit XML configuration for a network filter  | |||
    nwfilter-list                  list network filters  | |||
    nwfilter-undefine              undefine a network filter  | |||
    nwfilter-binding-create        create a network filter binding from an XML file  | |||
    nwfilter-binding-delete        delete a network filter binding  | |||
    nwfilter-binding-dumpxml       network filter information in XML  | |||
    nwfilter-binding-list          list network filter bindings  | |||
 Networking (help keyword 'network')  | |||
    net-autostart                  autostart a network  | |||
    net-create                     create a network from an XML file  | |||
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file  | |||
    net-destroy                    destroy (stop) a network  | |||
    net-dhcp-leases                print lease info for a given network  | |||
    net-dumpxml                    network information in XML  | |||
    net-edit                       edit XML configuration for a network  | |||
    net-event                      Network Events  | |||
    net-info                       network information  | |||
    net-list                       list networks  | |||
    net-name                       convert a network UUID to network name  | |||
    net-start                      start a (previously defined) inactive network  | |||
    net-undefine                   undefine a persistent network  | |||
    net-update                     update parts of an existing network's configuration  | |||
    net-uuid                       convert a network name to network UUID  | |||
    net-port-list                  list network ports  | |||
    net-port-create                create a network port from an XML file  | |||
    net-port-dumpxml               network port information in XML  | |||
    net-port-delete                delete the specified network port  | |||
 Node Device (help keyword 'nodedev')  | |||
    nodedev-create                 create a device defined by an XML file on the node  | |||
    nodedev-destroy                destroy (stop) a device on the node  | |||
    nodedev-detach                 detach node device from its device driver  | |||
    nodedev-dumpxml                node device details in XML  | |||
    nodedev-list                   enumerate devices on this host  | |||
    nodedev-reattach               reattach node device to its device driver  | |||
    nodedev-reset                  reset node device  | |||
    nodedev-event                  Node Device Events  | |||
    nodedev-define                 Define a device by an xml file on a node  | |||
    nodedev-undefine               Undefine an inactive node device  | |||
    nodedev-start                  Start an inactive node device  | |||
    nodedev-autostart              autostart a defined node device  | |||
    nodedev-info                   node device information  | |||
 Secret (help keyword 'secret')  | |||
    secret-define                  define or modify a secret from an XML file  | |||
    secret-dumpxml                 secret attributes in XML  | |||
    secret-event                   Secret Events  | |||
    secret-get-value               Output a secret value  | |||
    secret-list                    list secrets  | |||
    secret-set-value               set a secret value  | |||
    secret-undefine                undefine a secret  | |||
 Snapshot (help keyword 'snapshot')  | |||
    snapshot-create                Create a snapshot from XML  | |||
    snapshot-create-as             Create a snapshot from a set of args  | |||
    snapshot-current               Get or set the current snapshot  | |||
    snapshot-delete                Delete a domain snapshot  | |||
    snapshot-dumpxml               Dump XML for a domain snapshot  | |||
    snapshot-edit                  edit XML for a snapshot  | |||
    snapshot-info                  snapshot information  | |||
    snapshot-list                  List snapshots for a domain  | |||
    snapshot-parent                Get the name of the parent of a snapshot  | |||
    snapshot-revert                Revert a domain to a snapshot  | |||
 Backup (help keyword 'backup')  | |||
    backup-begin                   Start a disk backup of a live domain  | |||
    backup-dumpxml                 Dump XML for an ongoing domain block backup job  | |||
 Storage Pool (help keyword 'pool')  | |||
    find-storage-pool-sources-as   find potential storage pool sources  | |||
    find-storage-pool-sources      discover potential storage pool sources  | |||
    pool-autostart                 autostart a pool  | |||
    pool-build                     build a pool  | |||
    pool-create-as                 create a pool from a set of args  | |||
    pool-create                    create a pool from an XML file  | |||
    pool-define-as                 define a pool from a set of args  | |||
    pool-define                    define an inactive persistent storage pool or modify an existing persistent one from an XML file  | |||
    pool-delete                    delete a pool  | |||
    pool-destroy                   destroy (stop) a pool  | |||
    pool-dumpxml                   pool information in XML  | |||
    pool-edit                      edit XML configuration for a storage pool  | |||
    pool-info                      storage pool information  | |||
    pool-list                      list pools  | |||
    pool-name                      convert a pool UUID to pool name  | |||
    pool-refresh                   refresh a pool  | |||
    pool-start                     start a (previously defined) inactive pool  | |||
    pool-undefine                  undefine an inactive pool  | |||
    pool-uuid                      convert a pool name to pool UUID  | |||
    pool-event                     Storage Pool Events  | |||
    pool-capabilities              storage pool capabilities  | |||
 Storage Volume (help keyword 'volume')  | |||
    vol-clone                      clone a volume.  | |||
    vol-create-as                  create a volume from a set of args  | |||
    vol-create                     create a vol from an XML file  | |||
    vol-create-from                create a vol, using another volume as input  | |||
    vol-delete                     delete a vol  | |||
    vol-download                   download volume contents to a file  | |||
    vol-dumpxml                    vol information in XML  | |||
    vol-info                       storage vol information  | |||
    vol-key                        returns the volume key for a given volume name or path  | |||
    vol-list                       list vols  | |||
    vol-name                       returns the volume name for a given volume key or path  | |||
    vol-path                       returns the volume path for a given volume name or key  | |||
    vol-pool                       returns the storage pool for a given volume key or path  | |||
    vol-resize                     resize a vol  | |||
    vol-upload                     upload file contents to a volume  | |||
    vol-wipe                       wipe a vol  | |||
 Virsh itself (help keyword 'virsh')  | |||
    cd                             change the current directory  | |||
    echo                           echo arguments. Used for internal testing.  | |||
    exit                           quit this interactive terminal  | |||
    help                           print help  | |||
    pwd                            print the current directory  | |||
    quit                           quit this interactive terminal  | |||
    connect                        (re)connect to hypervisor  | |||
  (specify help <group> for details about the commands in the group)  | |||
  (specify help <command> for details about the command)  | |||
</syntaxhighlight>  | |||