<appendix id="LVMplug-in">

<title>Le plug-in LVM</title>

<!-- Introduction -->

<para>

  Le plug-in LVM regroupe les objets de stockage dans ce qui s'appelle 
  des conteneurs. A partir de ces conteneurs, de nouveaux objets de 
  stockage peuvent être créés, avec différents rattachements [mapping] 
  aux objets consommés. Les conteneurs ont la capacité de stockage pour 
  le regroupement de plusieurs objets, permettent le stockage futur 
  d'objets supplémentaires, et permettent un redimensionnement facile 
  des objets produits.

</para>

<!-- C.1 Comment est implémenté le LVM -->
<sect1 id="HowLVMimplementation">

<title>Comment est implémenté le LVM</title>

<para>

  Le plug-in LVM de Linux est compatible avec les volumes et les groupes 
  de volumes des outils originaux du LVM de Linux de Sistina Software. 
  Le LVM d'origine est basé sur le concept des groupes de volumes. Un 
  groupe de volume (VG [Volume Group]) est un groupement de volumes 
  physiques (PV [Physical Volumes]), qui sont généralement des disques 
  ou des partitions de disques. Le groupe de volume n'est pas utilisable 
  directement en tant qu'espace de stockage, par contre, il constitue 
  une réserve d'espace de stockage disponible. On crée des volumes 
  logiques (LV [Logical Volumes]) pour utiliser ces espaces de stockage. 
  L'espace de stockage du LV peut être rattaché à un ou plusieurs des PV 
  du groupe.
  
</para>
<para>

  Les concepts du LVM de Linux sont représentés par les mêmes concepts 
  que ceux du plug-in LVM de l'EVMS. Un groupe de volume s'appelle 
  conteneur et les volumes logiques produits s'appellent des régions. 
  Les volumes physiques peuvent être des disques, des segments, ou 
  d'autres régions. Tout comme dans le LVM original, les régions peuvent 
  être rattachées aux objets consommés de différentes façons.

</para>
</sect1>

<!-- C.2 Les opérations sur les conteneurs -->
<sect1 id="ContainerOperations">

<title>Les opérations sur les conteneurs</title>

<!-- C.2.1 Création de conteneurs LVM -->
<sect2 id="CreatingLVMContainer">

<title>Création de conteneurs LVM</title>

<para>

  Les conteneurs se créent avec un premier ensemble d'objets. Dans le 
  plug-in LVM, les objets peuvent être des disques, des segments, ou des 
  régions. LVM a deux options pour la création de conteneur. On ne peut 
  pas changer la valeur de ces options une fois le conteneur créé. Les 
  options sont:
  
</para>

<para>name</para>
<para>Le nom du nouveau conteneur.</para>
<para>pe_size</para>

<para>

  La taille du domaine physique (PE [Physical Extent]), qui représente 
  le niveau de granularité pour la création des régions. Par défaut 
  c'est 16&nbsp;Mo. Chaque région doit avoir un grand nombre de domaines. En 
  outre, chaque région peut avoir au maximum seulement 65534 domaines. 
  Ainsi, la taille du PE pour le conteneur limite la taille maximum 
  d'une région dans ce conteneur. Avec la taille par défaut du PE, une 
  région LVM peut être au maximum de 1To. En plus chaque objet consommé 
  par le conteneur doit être assez grand pour prendre au moins cinq 
  domaines. On ne peut donc pas donner arbitrairement une taille 
  importante au PE. Faites les bons choix.

</para>
</sect2>

<!-- C.2.2 Ajouter des objets aux conteneurs LVM -->
<sect2 id="AddingObject">

<title>Ajouter des objets aux conteneurs LVM</title>

<para>

  On peut ajouter des objets aux conteneurs LVM existants dans le but 
  d'augmenter la réserve de stockage disponible pour la création de 
  régions. Un simple conteneur peut consommer jusqu'à 256 objets. Du 
  fait que le nom et la taille du PE sont fixés à la création du 
  conteneur, il n'y a pas d'options disponibles lorsqu'on ajoute de 
  nouveaux objets à un conteneur. Chaque objet doit être assez grand 
  pour contenir cinq domaines physiques. Si un objet n'est pas assez 
  grand pour satisfaire à cette exigence, le plug-in LVM ne permettra 
  pas à l'objet de s'ajouter au récipient.
  
</para>
</sect2>

<!-- C.2.3 Suppression des objets d'un conteneur LVM -->
<sect2 id="RemovingObject">

<title>Supression des objets d'un conteneur LVM</title>

<para>

  On peut supprimer un objet consommé de son conteneur du moment 
  qu'aucune région n'est affectée à cet objet. Le plug-in LVM ne permet 
  pas de supprimer de leur récipient les objets en cours d'utilisation. 
  Si un objet doit obligatoirement être retiré, on peut supprimer ou 
  rétrécir les régions, ou déplacer les domaines dans le but de libérer 
  l'objet de toute utilisation.
  
</para>
<para>

  Il n'y a pas d'options disponibles pour la suppression d'objets du 
  récipient LVM.
  
</para>
</sect2>

<!-- C.2.4 L'extension des objets consommés dans les conteneurs LVM -->
<sect2 id="ExpandingConsumedObject">

<title>L'extension des objets consommés dans les conteneurs LVM</title>

<para>

  En plus de pouvoir ajouter de nouveaux objets dans un conteneur LVM, 
  on peut également étendre l'espace dans un conteneur par l'extension 
  d'un des objets consommés déjà existants (les volumes physiques [PV]). 
  Par exemple si on a, comme volume physique, un segment de disque avec 
  de l'espace disponible juste après sur le disque, on peut étendre ce 
  segment, ce qui augmentera la quantité d'espace disponible dans ce 
  conteneur. De la même façon, si le PV est une région RAID-0 ou RAID-5, 
  on peut étendre cette région en ajoutant des objets supplémentaires, 
  ce qui en contrepartie augmente l'espace disponible dans le conteneur.

</para>
<para>

  Lorsque l'on utilise l'interface graphique utilisateur ou les 
  interfaces en mode texte, l'extension d'un PV se fait par l'extension 
  du conteneur. S'il y a des PV extensibles, ils apparaîtront dans la 
  liste "expand-points". Choisissez le volume physique à étendre puis 
  les options d'extension de cet objet. Après l'extension du PV, 
  l'espace disponible en plus sur ce PV correspondra à l'espace 
  disponible du conteneur.
  
</para>
<para>

  Lorsque l'on utilise l'interpréteur de lignes de commande [CLI], 
  l'extension d'un PV se fait directement par l'extension de l'objet 
  correspondant. Le CLI et l'EVMS achemineront les commandes nécessaires 
  de façon à ce que l'extension du conteneur se fasse en même temps.

</para>
<para>

  Les options pour l'extension d'un volume physique dépendent du plug-in 
  auquel cet objet PV appartient. Veuillez vous référer à l'annexe du 
  plug-in correspondant si vous voulez plus d'information sur les 
  options de cet objet.
  
</para>  
</sect2>

    <!-- Appendice C 2.5 Réduction des objets consommés d'un conteneur LVM -->
    <sect2>
    
    <title>
    
      Réduction des objets consommés d'un conteneur LVM
    
    </title>
      
      <para>
      
        En plus de la suppression des objets existants d'un conteneur 
        LVM, on peut également diminuer la taille d'un conteneur en 
        réduisant un des objets consommés existants (les PV). Cela est 
        permis seulement si l'objet consommé a des extensions physiques 
        (PE) en fin d'objet qui ne sont pas allouées à d'autres régions 
        LVM. Dans ce cas, LVM2 permettra une réduction de l'objet 
        équivalente au nombre d'extensions physiques inutilisées à la 
        fin de l'objet.
      
      </para>
      
      <para>
      
        Par exemple, si un PV est un segment de disque, on peut réduire 
        ce segment, ce qui diminuera la quantité d'espace libre dans le 
        conteneur. De même, si un PV est une région RAID-0 ou RAID-5, on 
        peut réduire cette région en enlevant un des objets, ce qui 
        diminue à son tour l'espace libre dans le conteneur.
        
      </para>
      
      <para>
      
        En utilisant l'interface graphique ou l'interface texte, la 
        réduction des PV se fait en réduisant le conteneur. Les 
        éventuels PV existants qu'il est possible de réduire 
        apparaîtront dans la liste des points de réduction. Choisissez 
        le PV à réduire et ensuite les options pour réduire cet objet. 
        Après que le PV ait été réduit, l'espace libre du conteneur 
        correspondra à la quantité d'espace disponible sur ce PV après 
        diminution.
      
      </para>
      
      <para>
      
        En utilisant le CLI, la réduction d'objet se fait en 
        rétrécissant directement l'objet approprié. Le CLI et le moteur 
        EVMS achemineront les commandes nécessaires pour que le 
        conteneur soit réduit en même temps.
      
      </para>
      
      <para>
      
        Les options pour réduire un PV dépendent du module d'extension 
        auquel le PV appartient. Veuillez vous référer à l'annexe du 
        module d'extension appropriée pour plus d'informations sur les 
        options pour cet objet.
        
      </para>
      
    </sect2>
    
    
    <!-- Appendice C 2.6 Suppression des conteneurs LVM -->
    <sect2><title>Suppression des conteneurs LVM</title>
      
      <para>
      
        On peut supprimer un conteneur tant que celui-ci n'a pas de 
        régions produites. Le plug-in LVM ne permet pas de supprimer des 
        conteneurs si ils possèdent une quelconque région. Aucune option 
        n'est disponible pour supprimer des conteneurs LVM.
      
      </para>
      
    </sect2>
    
    <!-- Appendice C 2.7 Changement du nom d'un conteneur LVM -->
    <sect2><title>Changement du nom d'un conteneur LVM</title>
      
      <para>
      
        On peut renommer un conteneur LVM existant. En renommant un 
        conteneur LVM, toutes les régions produites à partir du 
        conteneur changeront automatiquement de nom également, car les 
        noms de régions incluent le nom du conteneur. Dans l'interface 
        graphique d'EVMS et l'interface texte, on utilise pour cela la 
        commande <command>modify properties</command>, qui est 
        disponible dans le menu "Actions" ou dans les menus contextuels. 
        Avec le CLI, on utilisera la commande <command>set</command>.
      
      </para>
      
      <para>
      
        Voir la <xref linkend="renamereg"></xref> pour plus 
        d'informations sur ce qui se passe quand on renomme les régions.
      
      </para>
    </sect2>
  </sect1>
  
  <!-- Appendice C 3 Les actions sur les régions -->
  <sect1><title>Les actions sur les régions</title>
    
    <!-- Appendice C 3.1 Création de régions LVM -->
    <sect2><title>Création de régions LVM</title>
      
      <para>
      
        On créé des régions LVM à partir de l'espace libre dans un 
        conteneur LVM. Si il y a au moins une zone d'espace libre dans 
        le conteneur, on peut créer une nouvelle région.
      
      </para>
      
      <para>
      
        On dispose des options suivantes pour créer des régions 
        LVM&nbsp;:
      
      </para>
      
      <variablelist>
        <varlistentry>
          <term>name</term>
          <listitem><para>Le nom de la nouvelle région</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>extents</term>
          <listitem><para>Le nombre de zones à allouer à la nouvelle région. Une nouvelle région doit avoir au moins une zone et pas plus que le nombre total de zones libres disponibles dans le conteneur, dans la limite maximum de 65534. Avec l'option <filename>extents</filename>, la valeur appropriée pour l'option size est automatiquement calculée. Par défaut, une nouvelle région utilise toutes les zones disponibles dans le conteneur.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>size</term>
          <listitem><para>La taille de la nouvelle région. Cette taille doit être un multiple de la taille de l'extension physique du conteneur. Avec l'option <filename>size</filename>, la valeur appropriée pour l'option extents est automatiquement calculée. Par défaut, une nouvelle région utilise tout l'espace libre disponible dans le conteneur.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>stripes</term>
          <listitem><para>Si le conteneur utilise deux objets ou plus, et que chaque objet a une zone non allouée, la nouvelle région peut être répartie sur plusieurs objets. C'est comme pour la répartition RAID-0 et cela permet une augmentation du débit E/S sur un ensemble d'objets. Cette option spécifie sur combien d'objets la nouvelle région peut être répartie. Par défaut, les nouvelles régions ne sont pas réparties sur plusieurs objets, et cette valeur est fixée à 1.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>stripe_size</term>
          <listitem><para>La granularité de la répartition. La valeur par défaut est 16Ko, Utilisez cette option seulement si l'option <command>stripes</command> est plus grande que 1.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>contiguous</term>
          <listitem><para>Cette option spécifie que la nouvelle région doit être allouée à un seul, et que les zones de cette région doivent être physiquement contigues. La valeur par défaut est "faux" [false], ce qui permet aux régions de s'étendre sur plusieurs objets. Cette option ne peut être utilisée si l'option <filename>stripes</filename> est plus grande que 1.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>pv_names</term>
          <listitem><para>Une liste des noms des objets sur lesquels la nouvelle région doit se placer. Par défaut, cette liste est vide, ce qui signifie que tous les objets disponibles seront utilisés pour allouer de l'espace à la nouvelle région.</para></listitem>
        </varlistentry>
      </variablelist>
    </sect2>
    
    <!-- Appendice C 3.2 Agrandissement des régions LVM -->
    <sect2><title>Agrandissement des régions LVM</title>
      
      <para>On peut agrandir des régions LVM existantes si il y a des zones inutilisées dans le conteneur. Si la région est répartie, on peut l'agrandir seulement en utilisant l'espace libre dans les objets sur lesquels elle est répartie. Si la région a été créée avec l'option contiguous, on peut l'agrandir seulement s'il y a de l'espace physiquement contigu après l'espace déjà alloué.</para>
      
      <para>On dispose des options suivantes pour l'agrandissement des régions LVM :</para>
      
      <variablelist>  
        <varlistentry>
          <term>add_extents</term>
          <listitem><para>Le nombre de zone à ajouter à la région. Si on utilise cette option, la valeur appropriée pour l'option add_size est automatiquement calculée. Par défaut, la région s'agrandira en utilisant toutes les zones libres dans le conteneur.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>add_size</term>
          <listitem><para>La quantité d'espace à ajouter à la région. Si on utilise cette option, la valeur appropriée pour l'option add_extents est automatiquement calculée. Par défaut la région s'agrandira en utilisant tout l'espace libre dans le conteneur.</para></listitem>
        </varlistentry>
        <varlistentry>
          <term>pv_names</term>
          <listitem><para>Liste des noms des objets à partir desquels allouer l'espace supplémentaire. Par défaut, cette liste est vide, ce qui signifie que tous les objets disponibles seront utilisés pour allouer de l'espace supplémentaire à la région.</para></listitem>
        </varlistentry>
      </variablelist>
    </sect2>
    
    <!-- Appendice C 3.3 Réduction des régions LVM -->
    <sect2><title>Réduction de régions LVM</title>
      <para>On peut réduire une région LVM existante en supprimant deszones se trouvant à la fin de cette région. Les régions doivent avoir au minimum une zone, une région ne peut donc pas être réduite à zéro.</para>
      
      <para>Les options suivantes sont disponibles pour réduire une région LVM. Etant donné qu'on réduit toujours une région en enlevant de l'espace se trouvant en fin de la région, une liste d'objets ne peut être spécifiée dans cette commande.</para>
      
      <variablelist>
        <varlistentry><term>remove_extents</term>
          <listitem><para>Nombre de zones à supprimer de la région. Si vous spécifiez cette option, la valeur correspondante pour  <filename>remove_size</filename> est automatiquement calculée. Par défaut, une seule zone sera supprimée de la région.</para>
          </listitem></varlistentry>
        
        <varlistentry><term>remove_size</term>
          <listitem><para>Quantité d'espace à enlever de la région. Si vous spécifiez cette option, la valeur correspondante pour  <filename>remove_extents</filename> est automatiquement calculée.</para></listitem>
        </varlistentry>
        
      </variablelist>
    </sect2>
    
    <!-- Appendice C 3.4 Suppression des régions LVM -->
    <sect2><title>Suppression de régions LVM</title>
      <para>On peut supprimer une région LVM existante tant qu'elle ne se trouve pas être un volume de compatibilité, un volume EVMS, ou qu'elle n'est pas utilisée par un autre plug-in EVMS. Aucune option n'est disponible pour supprimer les régions LVM.</para>
    </sect2>
    
    <!-- Appendice C 3.5 Déplacement des régions LVM -->
    <sect2><title>Déplacement des régions LVM</title>
      <para>Le plug-in LVM permet de modifier la liaison logique-physique d'une région LVM et de déplacer, du même coup, les données nécessaires. Cette possibilité est extrêmement utile s'il est nécessaire de retirer un volume physique (PV) d'un conteneur. On trouve actuellement deux fonctions du plug-in LVM pour le déplacement des régions: <command>move_pv</command> et <command>move_extent</command>.</para>
      
      <!-- Appendice C 3.5.1 move_pv -->
      <sect3><title>move_pv</title>
        <para>Lorsqu'il est nécessaire d'enlever un volume physique d'un conteneur, toutes les zones physiques de ce volume allouées à des régions doivent être amenées sur d'autres PV. La commande <command>move_pv</command>  permet de déplacer des zones physiques sur d'autres PV. <command>move_pv</command> cible le conteneur LVM et le PV qui nous intéresse est utilisé comme objet sélectionné. Les options suivantes sont disponibles :</para>
        <variablelist>
          <varlistentry><term>target_pvs</term>
            <listitem><para>Par défaut, toutes les zones disponibles des volumes physiques qui sont restés dans le conteneur sont utilisées pour déplacer les PV. On peut spécifier un sous-ensemble de ces PV avec cette option.</para>
            </listitem>
          </varlistentry>
          <varlistentry><term>maintain_stripes</term>
            <listitem><para>Quand le PV cible contient des régions réparties, on a le choix entre trois possibilités pour manipuler le déplacement des zones qui appartiennent à ces régions:</para>
              
              <variablelist>
                <varlistentry><term>no</term>
                  <listitem><para>Ce n'est pas la peine de maintenir une vraie répartition. Avec cette option, les zones seront déplacées sur des PV que la région utilise déjà pour d'autres données segmentées. Cela signifie que la performance ne sera pas aussi optimale qu'avec une vraie répartition, mais cela donne une souplesse maximale dans la réalisation des opérations de déplacement. C'est l'option par défaut pour <command>maintain_stripes</command>.</para>
                  </listitem>
                </varlistentry>
                <varlistentry><term>loose</term>
                  <listitem><para>Permet d'éviter que les zones déplacées ne se retrouvent pas sur un PV que la région répartie utilise déjà. Cependant, cela ne garantit pas que toutes les zones déplacées se retrouveront sur le même PV. Par exemple, une région avec trois répartitions peut finir par être rattachée à quatre PV ou plus.</para>
                  </listitem>
                </varlistentry>
                <varlistentry><term>strict</term>
                  <listitem><para>Permet de diriger toutes les zones déplacées sur le même PV, ce qui aboutira à une vraie répartition avec le même nombre de PV utilisés à l'origine par la région répartie. Il s'agit du choix le plus restrictif, et peut empêcher l'opération <command>move_pv</command> de se faire (cela dépend de la configuration particulière du conteneur).</para>
                  </listitem>
                </varlistentry>
              </variablelist>
              
              <para>Si le PV ciblé ne possède pas de régions réparties, l'option <command>maintain_stripes</command> est ignorée.</para>
            </listitem>
          </varlistentry>
        </variablelist>    
      </sect3>
      
      <!-- Appendice C 3.5.2 move_extent -->
      <sect3><title>move_extent</title>
        <para>Le plug-in LVM offre la possibilité de déplacer non seulement l'ensemble des zones d'un volume physique, mais aussi de les déplacer isolément. Cela permet un réglage très fin de l'allocation des zones. Cette commande cible la région possèdant la zone à déplacer. Il y a trois options à renseigner pour la commande <command>move_extent</command> :</para>
        
        <variablelist>
          <varlistentry><term>le</term>
            <listitem><para>Numéro de la zone logique à déplacer. Pour LE, les numéros commencent à 0.</para></listitem>
          </varlistentry>
          <varlistentry><term>pv</term>
            <listitem><para>Objet cible vers lequel sera déplacée la zone.</para></listitem>
          </varlistentry>
          <varlistentry><term>pe</term>
            <listitem><para>Zone physique cible sur l'objet cible. Pour PE, les numéros commencent également à 0.</para></listitem>
          </varlistentry>
        </variablelist>
        
        <para>Pour déterminer le LE source et le PE cible, il est souvent utile de consulter le détail des informations sur la région et le conteneur en question. Ce qui suit correspond aux lignes de commande qui peuvent être utilisées pour réunir ces informations:</para>
        
        <para>Pour visualiser la carte des LE dans la région, entrez cette commande :</para>
        <programlisting>query:ei,&lt;region_name&gt;,Extents</programlisting>
        
        <para>Pour visualiser la liste des PV du conteneur, entrez cette commande :</para>
        <programlisting>query:ei,&lt;container_name&gt;,Current_PVs</programlisting>
        
        <para>Pour visualiser la carte actuelle des PE pour le PV cible qui vous intéresse, entrez cette commande :</para>
        <programlisting>query:ei,&lt;container_name&gt;,PEMapPV#</programlisting>
        <para># représente le numéro du PV cible dans le conteneur.</para>
        
        <para>Ces informations sont également faciles à trouver dans l'interface graphique ou l'interface texte en utilisant la rubrique "Display Details" dans les menus contextuels de la région ou du conteneur.</para>
      </sect3>
      
    </sect2>
    
    <!-- Appendice C 3.6 Modification des noms des régions LVM -->
    <sect2 id="renamereg"><title>Modification des noms des régions LVM</title>
      <para>On peut renommer une région LVM existante. Dans l'interface graphique d'EVMS et l'interface texte, cela se fait en utilisant la commande <command>modify properties</command>, qui est disponible dans le menu "Actions" ou dans les menus contextuels. Dans le CLI d'EVMS, cela se fait en utilisant la commande <command>set</command>.</para>
      
      <para>Si on modifie le nom d'une région LVM qui possède un volume de compatibilité, le nom de ce volume de compatibilité changera également. Afin que cela fonctionne correctement, ce volume doit être démonté pour que son nom soit modifié. De plus, n'oubliez pas de mettre à jour votre fichier <filename>/etc/fstab</filename> si le volume y est inscrit, sinon le volume ne sera pas monté correctement au prochain démarrage du système.</para>
      
      <para>Si on modifie le nom d'une région LVM qui possède un volume EVMS ou un autre objet de stockage, le changement de nom de la région sera visible pour les couches supérieures. Dans ce cas, le changement de nom peut se faire même si le volume est monté.</para>
    </sect2>  
  </sect1>
</appendix>
