<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>

<!-- Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
    http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->
<section id="working-with-volumes">
  <title>Working With Volumes</title>
  <para>A volume provides storage to a guest VM. The volume can provide for a root disk or an
    additional data disk. &PRODUCT; supports additional volumes for guest VMs. </para>
  <para>Volumes are created for a specific hypervisor type. A volume that has been attached to guest
    using one hypervisor type (e.g, XenServer) may not be attached to a guest that is using another
    hypervisor type, for example:vSphere, KVM. This is because the different hypervisors use different
    disk image formats. </para>
  <para>&PRODUCT; defines a volume as a unit of storage available to a guest VM. Volumes are either
    root disks or data disks. The root disk has "/" in the file system and is usually the boot
    device. Data disks provide for additional storage, for example: "/opt" or "D:". Every guest VM
    has a root disk, and VMs can also optionally have a data disk. End users can mount multiple data
    disks to guest VMs. Users choose data disks from the disk offerings created by administrators.
    The user can create a template from a volume as well; this is the standard procedure for private
    template creation. Volumes are hypervisor-specific: a volume from one hypervisor type may not be
    used on a guest of another hypervisor type. </para>
  <note>
    <para>&PRODUCT; supports attaching up to 13 data disks to a VM on XenServer hypervisor versions
      6.0 and above. For the VMs on other hypervisor types, the data disk limit is 6.</para>
  </note>
  <xi:include href="creating-new-volumes.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <xi:include href="upload-existing-volume-to-vm.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <xi:include href="attaching-volume.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <xi:include href="detach-move-volumes.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <xi:include href="vm-storage-migration.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <xi:include href="resizing-volumes.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <xi:include href="volume-deletion-garbage-collection.xml"
    xmlns:xi="http://www.w3.org/2001/XInclude"/>
</section>
