<?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="about-secondary-storage">
  <title>About Secondary Storage</title>
  <para>Secondary storage stores the following:</para>
  <itemizedlist>
    <listitem>
      <para>Templates &mdash; OS images that can be used to boot VMs and can include additional
        configuration information, such as installed applications</para>
    </listitem>
    <listitem>
      <para>ISO images &mdash; disc images containing data or bootable media for operating
        systems</para>
    </listitem>
    <listitem>
      <para>Disk volume snapshots &mdash; saved copies of VM data which can be used for data
        recovery or to create new templates</para>
    </listitem>
  </itemizedlist>
  <para>The items in secondary storage are available to all hosts in the scope of the secondary
    storage, which may be defined as per zone or per region.</para>
  <para>To make items in secondary storage available to all hosts throughout the cloud, you can add
    object storage in addition to the zone-based NFS Secondary Staging Store. It is not necessary to
    copy templates and snapshots from one zone to another, as would be required when using zone NFS
    alone. Everything is available everywhere.</para>
  <para>For Hyper-V hosts, SMB/CIFS storage is supported.</para>
  <para>&PRODUCT; provides plugins that enable both OpenStack Object Storage (Swift, <ulink
      url="http://swift.openstack.org">swift.openstack.org</ulink>) and Amazon Simple Storage
    Service (S3) object storage. When using one of these storage plugins, you configure Swift or S3
    storage for the entire &PRODUCT;, then set up the NFS Secondary Staging Store for each zone. The
    NFS storage in each zone acts as a staging area through which all templates and other secondary
    storage data pass before being forwarded to Swift or S3. The backing object storage acts as a
    cloud-wide resource, making templates and other data available to any zone in the cloud.</para>
  <para></para>
  <warning>
    <para>Heterogeneous Secondary Storage is not supported in Regions. For example, you cannot set
      up multiple zones, one using NFS secondary and the other using S3 or Swift secondary.</para>
  </warning>
  <para></para>
</section>
