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>
...
nameuuidallocationcapacityavailable
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>
...
devicepath which is the fully qualified
path to the block device node. Since 0.4.1directorypath
which is the fully qualified path to the block device node.
Since 0.4.1adaptername
which is the SCSI adapter name (ex. "host1").
Since 0.6.2hostdirectory
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.1nameformattype 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.1vendorname whose value is backend
specific. Since 0.8.4productname 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
permissionsmode 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>
...
namekeyallocationunit can be specified to adjust the passed value.
Values can be: 'K' (kilobytes), 'M' (megabytes), 'G' (gigabytes),
'T' (terabytes), 'P' (petabytes), or 'E' (exabytes).
Since 0.4.1capacityunit attribute can be
specified with the same semantics as for allocation
This is compulsory when creating a volume.
Since 0.4.1sourcetarget
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>
pathformattype attribute. Consult the pool-specific docs for
the list of valid values. Since 0.4.1permissionsmode 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>
pathformatpermissionsmode 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>