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 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"/> <vendor name="Acme"/> <product name="model"/> </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.1adapter
name
which is the SCSI adapter name (ex. "host1").
Since 0.6.2host
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.1vendor
name
whose value is backend
specific. Since 0.8.4product
name
whose value
is backend specific. Since 0.8.4
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>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> <encryption type='...'> ... </encryption> </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
encryption
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> <name>sparse.img</name> <key>/var/lib/xen/images/sparse.img</key> <allocation>0</allocation> <capacity unit="T">1</capacity> ...
name
key
allocation
unit
can be specified to adjust the passed value.
Values can be: 'B' or 'bytes' for bytes, 'KB' (kilobytes,
103 or 1000 bytes), 'K' or 'KiB' (kibibytes,
210 or 1024 bytes), 'MB' (megabytes, 106
or 1,000,000 bytes), 'M' or 'MiB' (mebibytes, 220
or 1,048,576 bytes), 'GB' (gigabytes, 109 or
1,000,000,000 bytes), 'G' or 'GiB' (gibibytes, 230
or 1,073,741,824 bytes), 'TB' (terabytes, 1012 or
1,000,000,000,000 bytes), 'T' or 'TiB' (tebibytes,
240 or 1,099,511,627,776 bytes), 'PB' (petabytes,
1015 or 1,000,000,000,000,000 bytes), 'P' or 'PiB'
(pebibytes, 250 or 1,125,899,906,842,624 bytes),
'EB' (exabytes, 1018 or 1,000,000,000,000,000,000
bytes), or 'E' or 'EiB' (exbibytes, 260 or
1,152,921,504,606,846,976 bytes). Since
0.4.1, multi-character unit
since
0.9.11capacity
unit
attribute can be
specified with the same semantics as for allocation
This is compulsory when creating a volume.
Since 0.4.1source
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> <format type='qcow2'/> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </target>
path
format
type
attribute. 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
A single backingStore
element is contained within the top level
volume
element. This tag is used to describe the optional copy
on write, backing store for the storage volume. It can contain the following
child elements:
... <backingStore> <path>/var/lib/virt/images/master.img</path> <format type='raw'/> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </backingStore> </volume>
path
format
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.6.0
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> <name>sparse.img</name> <allocation>0</allocation> <capacity unit="T">1</capacity> <target> <path>/var/lib/virt/images/sparse.img</path> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </target> </volume>