Although all storage pool backends share the same public APIs and XML format, they have varying levels of capabilities. Some may allow creation of volumes, others may only allow use of pre-existing volumes. Some may have constraints on volume size, or placement.
The is the top level tag for a storage pool document is 'pool'. It has
a single attribute type
, which is one of dir
,
fs
,netfs
,disk
,iscsi
,
logical
. This corresponds to the storage backend drivers
listed further along in this document.
The storage pool XML format is available since 0.4.1
<pool type="iscsi"> <name>virtimages</name> <uuid>3e3fce45-4f53-4fa7-bb32-11f34168b82b</uuid> <allocation>10000000</allocation> <capacity>50000000</capacity> <available>40000000</available> ...
name
uuid
allocation
capacity
available
A single source
element is contained within the top level
pool
element. This tag is used to describe the source of
the storage pool. It can contain the following child elements:
... <source> <host name="iscsi.example.com"/> <device path="demo-target"/> </source> ...
device
path
which is the fully qualified
path to the block device node. Since 0.4.1directory
path
which is the fully qualified path to the block device node.
Since 0.4.1host
directory
or device
element. Contains an attribute name
which is the hostname or IP address of the server. May optionally
contain a port
attribute for the protocol specific
port number. Since 0.4.1name
format
type
whose value is
backend specific. This is typically used to indicate filesystem
type, or network filesystem type, or partition table type, or
LVM metadata type. All drivers are required to have a default
value for this, so it is optional. Since 0.4.1
A single target
element is contained within the top level
pool
element. This tag is used to describe the mapping of
the storage pool into the host filesystem. It can contain the following
child elements:
... <target> <path>/dev/disk/by-path</path> <permissions> <owner>0744</owner> <group>0744</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </target> </pool>
path
/dev/
may seem
like the logical choice, however, devices nodes there are not
guaranteed stable across reboots, since they are allocated on
demand. It is preferable to use a stable location such as one
of the /dev/disk/by-{path,id,uuid,label
locations.
Since 0.4.1
permissions
mode
element contains the octal permission set. The
owner
element contains the numeric user ID. The group
element contains the numeric group ID. The label
element
contains the MAC (eg SELinux) label string.
Since 0.4.1
If a storage pool exposes information about its underlying
placement / allocation scheme, the device
element
within the source
element may contain information
about its available extents. Some pools have a constraint that
a volume must be allocated entirely within a single constraint
(eg disk partition pools). Thus the extent information allows an
application to determine the maximum possible size for a new
volume
For storage pools supporting extent information, within each
device
element there will be zero or more freeExtent
elements. Each of these elements contains two attributes, start
and end
which provide the boundaries of the extent on the
device, measured in bytes. Since 0.4.1
A storage volume will be either a file or a device node. The storage volume XML format is available since 0.4.1
<volume type="file"> <name>sparse.img</name> <key>/var/lib/xen/images/sparse.img</key> <allocation>0</allocation> <capacity unit="T">1</capacity> ...
name
key
allocation
capacity
source
target
A single target
element is contained within the top level
volume
element. This tag is used to describe the mapping of
the storage volume into the host filesystem. It can contain the following
child elements:
... <target> <path>/var/lib/virt/images/sparse.img</path> <permissions> <owner>0744</owner> <group>0744</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </target> </volume>
path
/dev/
may seem
like the logical choice, however, devices nodes there are not
guaranteed stable across reboots, since they are allocated on
demand. It is preferable to use a stable location such as one
of the /dev/disk/by-{path,id,uuid,label
locations.
Since 0.4.1
format
type
. Consult the pool-specific docs for the
list of valid values. Since 0.4.1permissions
mode
element contains the octal permission set. The
owner
element contains the numeric user ID. The group
element contains the numeric group ID. The label
element
contains the MAC (eg SELinux) label string.
Since 0.4.1
Here are a couple of examples, for a more complete set demonstrating every type of storage pool, consult the storage driver page
<pool type="dir"> <name>virtimages</name> <target> <path>/var/lib/virt/images</path> </target> </pool>
<pool type="iscsi"> <name>virtimages</name> <source> <host name="iscsi.example.com"/> <device path="demo-target"/> </source> <target> <path>/dev/disk/by-path</path> </target> </pool>
<volume type="file"> <name>sparse.img</name> <allocation>0</allocation> <capacity unit="T">1</capacity> <target> <path>/var/lib/virt/images/sparse.img</path> <permissions> <owner>0744</owner> <group>0744</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </target> </volume>