Features/VirtStorage

= Virtualization Storage Management =

Summary
Facilitate as simple as possible storage provisioning over libvirt connections (local and remote), for use by virtual machines.

Owner

 * Name: ColeRobinson

Current status

 * Targeted release:  Fedora 10
 * Last updated: 2008-09-11
 * Percentage of completion: 100%

Detailed Description
Fedora 8 introduced the ability to manage existing guest domains remotely using libvirt. It was not possible to create new remote guests due to lack of storage management capabilities. This feature is to add the ability to list, create and delete storage volumes from a remote host using libvirt. This includes the ability to create raw sparse & non-sparse files in a directory, allocate LVM logical volumes, partition physical disks, and attach to iSCSI targets.

Benefit to Fedora
This will enable the virt-manager tool to remote provision new guest domains, and manage the storage associated with them. It will provide improved SELinux integration, since the APIs will be able to ensure that all storage volumes have the correct SELinux security context when being assigned to a guest.

Scope

 * List storage volumes in a directory, and allocate new volumes, raw files both sparse and non-sparse, and formats supported by qemu-img (cow, qcow, qcow2, vmdk, etc)
 * List partitions in a disk, and allocate new partitions from free space
 * Logic to an iSCSI server and list volumes associated with an exported target
 * List logical volumes in an LVM volume group, and allocate new LVM logical volumes
 * Automatically assign correct SELinux security context label to all volumes when associating with a guest (ie, virt_image_t)

Test Plan

 * Install 2 Fedora 9 machines
 * Enable the libvirtd service on one machine
 * Run virt-manager on the other machine
 * Browse storage available on the server, using virt-manager
 * Allocate a logical volume from a volume group.
 * Allocate a file in a directory
 * Attach to an iSCSI server
 * Create a new guest OS and associate with some storage.

User Experience
There will no longer be any need to directly login to a server providing virtualization capabilities. All common management tasks can be completed remotely using virt-manager.

Dependencies

 * Core storage APIs in libvirt:
 * File based storage backend in libvirt (Done, in F9)
 * LVM based storage backend in libvirt (Done, F9)
 * Disk based storage backend in libvirt (Can list existing devices, partition removal fix is posted, needs some work for adding)
 * iSCSI based storage backend in libvirt (Done, in F9)
 * virt-manager:
 * UI for browsing storage pools, and allocating storage volumes from a pool (Done)
 * Provision directory/file based pools and volumes (Done)
 * Provision disk pools and partition volumes (in progress)
 * Provision LVM based pools and volumes (Done)
 * Use iSCSI storage pools and volumes (in progress)

Contingency Plan
As long as virt-manager UI is taken upstream, current situation is acceptable. Disk and iSCSI support can be added later with not a large amount of effort. File based provisioning is the priority and it is already in working order.

Documentation

 * libvirt
 * Storage API overview
 * Storage XML Format
 * virt-manager
 * Storage Management
 * Upstream UI patch posting and screenshots

UI documentation forthcoming after it is pulled in upstream

Release Notes
Support for pool formats is not consistent.
 * For all pools, there are known performance issues with allocating nonsparse volumes. Beware.
 * Directory, Filesystem, Network Pools: add + delete pool, add + delete volumes. Certain volume formats may not be able to be created (ex. bochs). Raw, qcow, qcow2 should at least work. See https://bugzilla.redhat.com/show_bug.cgi?id=461931
 * Logical Pools: Add and Deleting of Pool and Volumes supported. The one issue though is that the pool must be created from an existing volume group. There is also a bug blocking this from correctly functioning at the libvirt level (https://bugzilla.redhat.com/show_bug.cgi?id=461962), though aside from that everything should be golden
 * Disk Pools: add + delete pool, view preallocated volumes, but cannot delete or add them.
 * iSCSI Pools: Add pool, but only for no auth iSCSI share. View preallocated volumes, but cannot delete or add them


 * It appears that not all storage pool formats are supported yet. Would it be possible to list what is and isn't supported for final release?

Comments and Discussion

 * See Talk:Features/VirtStorage