Chapter 26. Managing guests with virsh
virsh
is a command line interface tool for managing guests and the hypervisor.
virsh
tool is built on the libvirt
management API and operates as an alternative to the xm
command and the graphical guest Manager (virt-manager
). virsh
can be used in read-only mode by unprivileged users. You can use virsh
to execute scripts for the guest machines.
The following tables provide a quick reference for all virsh command line options.
Command | Description |
---|---|
help | Prints basic help information. |
list | Lists all guests. |
dumpxml | Outputs the XML configuration file for the guest. |
create | Creates a guest from an XML configuration file and starts the new guest. |
start | Starts an inactive guest. |
destroy | Forces a guest to stop. |
define | Outputs an XML configuration file for a guest. |
domid | Displays the guest's ID. |
domuuid | Displays the guest's UUID. |
dominfo | Displays guest information. |
domname | Displays the guest's name. |
domstate | Displays the state of a guest. |
quit | Quits the interactive terminal. |
reboot | Reboots a guest. |
restore | Restores a previously saved guest stored in a file. |
resume | Resumes a paused guest. |
save | Save the present state of a guest to a file. |
shutdown | Gracefully shuts down a guest. |
suspend | Pauses a guest. |
undefine | Deletes all files associated with a guest. |
migrate | Migrates a guest to another host. |
virsh
command options manage guest and hypervisor resources:
Command | Description |
---|---|
setmem | Sets the allocated memory for a guest. |
setmaxmem | Sets maximum memory limit for the hypervisor. |
setvcpus | Changes number of virtual CPUs assigned to a guest. Note that this feature is unsupported in Red Hat Enterprise Linux 5. |
vcpuinfo | Displays virtual CPU information about a guest. |
vcpupin | Controls the virtual CPU affinity of a guest. |
domblkstat | Displays block device statistics for a running guest. |
domifstat | Displays network interface statistics for a running guest. |
attach-device | Attach a device to a guest, using a device definition in an XML file. |
attach-disk | Attaches a new disk device to a guest. |
attach-interface | Attaches a new network interface to a guest. |
detach-device | Detach a device from a guest, takes the same kind of XML descriptions as command attach-device . |
detach-disk | Detach a disk device from a guest. |
detach-interface | Detach a network interface from a guest. |
domxml-from-native | Convert from native guest configuration format to domain XML format. See the virsh man page for more details. |
domxml-to-native | Convert from domain XML format to native guest configuration format. See the virsh man page for more details. |
virsh
options:
Command | Description |
---|---|
version | Displays the version of virsh |
nodeinfo | Outputs information about the hypervisor |
Connect to a hypervisor session with virsh
:
# virsh connect {hostname OR URL}
<name>
is the machine name of the hypervisor. To initiate a read-only connection, append the above command with -readonly
.
Output a guest's XML configuration file with virsh
:
# virsh dumpxml {domain-id, domain-name or domain-uuid}
stdout
). You can save the data by piping the output to a file. An example of piping the output to a file called guest.xml:
# virsh dumpxml GuestID > guest.xmlThis file
guest.xml
can recreate the guest (see Editing a guest's configuration file. You can edit this XML configuration file to configure additional devices or to deploy additional guests. See Section 34.1, “Using XML configuration files with virsh” for more information on modifying files created with virsh dumpxml
.
virsh dumpxml
output:
# virsh dumpxml r5b2-mySQL01 <domain type='xen' id='13'> <name>r5b2-mySQL01</name> <uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid> <bootloader>/usr/bin/pygrub</bootloader> <os> <type>linux</type> <kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel> <initrd>/var/lib/libvirt/initrd.UQafMw</initrd> <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline> </os> <memory>512000</memory> <vcpu>1</vcpu> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <interface type='bridge'> <source bridge='xenbr0'/> <mac address='00:16:3e:49:1d:11'/> <script path='vif-bridge'/> </interface> <graphics type='vnc' port='5900'/> <console tty='/dev/pts/4'/> </devices> </domain>
Guests can be created from XML configuration files. You can copy existing XML from previously created guests or use the dumpxml
option (see Creating a virtual machine XML dump (configuration file)). To create a guest with virsh
from an XML file:
# virsh create configuration_file.xml
Instead of using the dumpxml
option (see Creating a virtual machine XML dump (configuration file)), guests can be edited either while they run or while they are offline. The virsh edit
command provides this functionality. For example, to edit the guest named softwaretesting
:
# virsh edit softwaretesting
$EDITOR
shell parameter (set to vi
by default).
Suspend a guest with virsh
:
# virsh suspend {domain-id, domain-name or domain-uuid}
resume
(Resuming a guest) option.
Restore a suspended guest with virsh
using the resume
option:
# virsh resume {domain-id, domain-name or domain-uuid}
suspend
and resume
operations.
Save the current state of a guest to a file using the virsh
command:
# virsh save {domain-name, domain-id or domain-uuid} filename
restore
(Restore a guest) option. Save is similar to pause, instead of just pausing a guest the present state of the guest is saved.
Restore a guest previously saved with the virsh save
command (Save a guest) using virsh
:
# virsh restore filename
Shut down a guest using the virsh
command:
# virsh shutdown {domain-id, domain-name or domain-uuid}
on_shutdown
parameter in the guest's configuration file.
Reboot a guest using virsh
command:
#virsh reboot {domain-id, domain-name or domain-uuid}
on_reboot
element in the guest's configuration file.
Force a guest to stop with the virsh
command:
# virsh destroy {domain-id, domain-name or domain-uuid}
virsh destroy
can corrupt guest file systems . Use the destroy
option only when the guest is unresponsive. For para-virtualized guests, use the shutdown
option(Shut down a guest) instead.
To get the domain ID of a guest:
# virsh domid {domain-name or domain-uuid}
To get the domain name of a guest:
# virsh domname {domain-id or domain-uuid}
To get the Universally Unique Identifier (UUID) for a guest:
# virsh domuuid {domain-id or domain-name}
virsh domuuid
output:
# virsh domuuid r5b2-mySQL01 4a4c59a7-ee3f-c781-96e4-288f2862f011
Using virsh
with the guest's domain ID, domain name or UUID you can display information on the specified guest:
# virsh dominfo {domain-id, domain-name or domain-uuid}
virsh dominfo
output:
# virsh dominfo r5b2-mySQL01 id: 13 name: r5b2-mysql01 uuid: 4a4c59a7-ee3f-c781-96e4-288f2862f011 os type: linux state: blocked cpu(s): 1 cpu time: 11.0s max memory: 512000 kb used memory: 512000 kb
To display information about the host:
# virsh nodeinfo
virsh nodeinfo
output:
# virsh nodeinfo CPU model x86_64 CPU (s) 8 CPU frequency 2895 Mhz CPU socket(s) 2 Core(s) per socket 2 Threads per core: 2 Numa cell(s) 1 Memory size: 1046528 kb
To display the guest list and their current states with virsh
:
# virsh list
--inactive
option to list inactive guests (that is, guests that have been defined but are not currently active), and
--all
option lists all guests. For example:
# virsh list --all Id Name State ---------------------------------- 0 Domain-0 running 1 Domain202 paused 2 Domain010 inactive 3 Domain9600 crashed
virsh list
is categorized as one of the six states (listed below).
- The
running
state refers to guests which are currently active on a CPU. - Guests listed as
blocked
are blocked, and are not running or runnable. This is caused by a guest waiting on I/O (a traditional wait state) or guests in a sleep mode. - The
paused
state lists domains that are paused. This occurs if an administrator uses the pause button invirt-manager
,xm pause
orvirsh suspend
. When a guest is paused it consumes memory and other resources but it is ineligible for scheduling and CPU resources from the hypervisor. - The
shutdown
state is for guests in the process of shutting down. The guest is sent a shutdown signal and should be in the process of stopping its operations gracefully. This may not work with all guest operating systems; some operating systems do not respond to these signals. - Domains in the
dying
state are in is in process of dying, which is a state where the domain has not completely shut-down or crashed. crashed
guests have failed while running and are no longer running. This state can only occur if the guest has been configured not to restart on crash.
To display virtual CPU information from a guest with virsh
:
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
virsh vcpuinfo
output:
# virsh vcpuinfo r5b2-mySQL01 VCPU: 0 CPU: 0 State: blocked CPU time: 0.0s CPU Affinity: yy
To configure the affinity of virtual CPUs with physical CPUs:
# virsh vcpupin domain-id vcpu cpulist
domain-id
parameter is the guest's ID number or name.
vcpu
parameter denotes the number of virtualized CPUs allocated to the guest.The vcpu
parameter must be provided.
cpulist
parameter is a list of physical CPU identifier numbers separated by commas. The cpulist
parameter determines which physical CPUs the VCPUs can run on.
To modify the number of CPUs assigned to a guest with virsh
:
# virsh setvcpus {domain-name, domain-id or domain-uuid} count
count
value cannot exceed the count above the amount specified when the guest was created.
Important
To modify a guest's memory allocation with virsh
:
# virsh setmem {domain-id or domain-name} count
Use virsh domblkstat
to display block device statistics for a running guest.
# virsh domblkstat GuestName block-device
Use virsh domifstat
to display network interface statistics for a running guest.
# virsh domifstat GuestName interface-device
A guest can be migrated to another host with virsh
. Migrate domain to another host. Add --live for live migration. The migrate
command accepts parameters in the following format:
# virsh migrate --live GuestName DestinationURL
--live
parameter is optional. Add the --live
parameter for live migrations.
GuestName
parameter represents the name of the guest which you want to migrate.
DestinationURL
parameter is the URL or hostname of the destination system. The destination system requires:
- the same version of Red Hat Enterprise Linux,
- the same hypervisor (KVM or Xen), and
- the
libvirt
service must be started.
This section covers managing virtual networks with the virsh
command. To list virtual networks:
# virsh net-list
# virsh net-list Name State Autostart ----------------------------------------- default active yes vnet1 active yes vnet2 active yes
# virsh net-dumpxml NetworkName
# virsh net-dumpxml vnet1 <network> <name>vnet1</name> <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid> <forward dev='eth0'/> <bridge name='vnet0' stp='on' forwardDelay='0' /> <ip address='192.168.100.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.128' end='192.168.100.254' /> </dhcp> </ip> </network>
virsh
commands used in managing virtual networks are:
virsh net-autostart network-name
— Autostart a network specified as network-name.virsh net-create XMLfile
— generates and starts a new network using an existing XML file.virsh net-define XMLfile
— generates a new network device from an existing XML file without starting it.virsh net-destroy network-name
— destroy a network specified as network-name.virsh net-name networkUUID
— convert a specified networkUUID to a network name.virsh net-uuid network-name
— convert a specified network-name to a network UUID.virsh net-start nameOfInactiveNetwork
— starts an inactive network.virsh net-undefine nameOfInactiveNetwork
— removes the definition of an inactive network.