In this proposal description we would like to introduce a separate pool
type:fspool. Fspool provides and manages filesystems.
Below are listed possible examples of fspool, depending on source type:
volume, directory or network.
Volume fspool uses storage pool volume to reside upon.
<fspool type = 'volume'>
<name>fspool</name>
<uuid>cb07b799-8e03-485c-aaa0-7c88f60b37b0</uuid>
<allocation>0</allocation>
<capacity>0<capacity>
<source>
<pool ='pool name'/>
<volume='volume name'/>
<format type = 'ext4'/> (ext4, zfs - depending on type of volume that
is used as a backend).
<source/>
<target>
<path>/path/to/fspool</path>
<permissions>
<mode>0777</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</fspool>
Directory fspool represents a host directory:
<fspool type = 'dir'>
<name>fspool</name>
<uuid>cb07b799-8e03-485c-aaa0-7c88f60b37b0</uuid>
<target>
<path>/path/to/fspool/root</path>
<permissions>
<mode>0777</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</fspool>
Network fspool is similar to previous one, except it is remote:
<fspool type='network'>
<name>fspool</name>
<uuid>b27a72b5-a92e-4e58-a172-a80ba73b30fe</uuid>
<source>
<host name='X.X.X.X'/> - if the pool is not on the host
<dir path='some/directory/exposed/to/our/host'/>
</source>
<target>
<path>/fspool</path>
</target>
</fspool>
basic API for fspool management:
fspool-define
fspool-build
fspool-start
fspool-stop
fspool-destroy
fspool-undefine
Fspools are divided into fs items. Single item is a directory inside the fspool root
directory.
Fs item example is listed below:
<fs>
<name>item</name>
<allocation>0</allocation>
<capacity>0<capacity>
<source>fspool='name'</source>
<target>
<path>/fspool</path>
</target>
<permissions>
<mode>0777</mode>
<owner>0</owner>
<group>0</group>
<cgroups> Limits</cgroups>
</permissions>
</fs>
- allocation/capacity - is omitted when fspools type is directory.
- target path is a path to fs item from the fspool root. If it is not
present then the content of item is placed directly in fspool root.
- cgroups can be used in order to manipulate space usage politics.
Fs items will be manipulated via fs API:
fs-define
fs-delete
fs-list
In addition to containers use-cases, fspools are also useful for libvirt itself - they
will help store and
easily manage some internal metadata, such as snapshots or internal connection driver
information (logs, domain configurations, etc).
Please, take a look and share your opinion.
Olga