\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{dim. mai 22 21:16:04 CEST 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={lvmthin},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Provisionning léger lvm},
CreationDate={D:20160522211604},
ModDate={D:20160522211604},
Keywords={storages;raid;lvm}
}}
\begin{document}
 
\begin{center}
{\Huge lvmthin }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Provisionning léger lvm}
 
\vspace{10mm}
 
\hspace{1mm}  Les blocks dans un volume logique standard sont alloués quand le LV est créé, mais les blocks dans un provisionning léger sont alloués quand ils sont écris. À cause de celà, un LV thin provisioned a une taille virtuelle, et peut être plus grand que l'espace physique disponible. La quantité de stockage physique fournie pour les LV thin provisioned peut être augmentée ultérieurement en cas de besoin.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les blocks dans un LV standard sont alloués (durant la création) dans le VG, mais les blocks dans un LV thin sont alloués (durant l'utilisation) depuis un "thin pool LV" spécial. Ce pool contient des blocks de stockage physique, et les blocks dans les LV thin référencent simplement les blocks dans le pool.
\vspace{5mm} \\
 
 
\hspace{1mm}  Un thin pool LV doit être créé avant que les LV thin puissent y être créés. Un thin pool LV est créé en combinant 2 LV standard: Un LV de données qui maintient les blocks pour les LV thin, et un LV de métadonnées, qui maintient les blocks de données associés avec les LV thin.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les snapshots de LV thin sont inefficaces parce que les blocks de données communs à un LV thin et un de ses snapshots sont partagés. Les snapshots peuvent être plus de LV thin ou d'autre snapshots thin. Les blocks communs à des snapshots récursifs sont également partagés dans le thin pool. Il n'y a pas de limite ou de dégradation des séquences de snapshots.
\vspace{5mm} \\
 
 
\hspace{1mm}  Vu que les LV thin ou les LV snapshot y sont écris, ils consomment des blocks de données dans le pool. À mesure que les blocks de données diminuent dans le pool, il peut être nécessaire d'en fournir. Cela peut être en étandant le pool. Supprimer les LV thin ou les snapshots du pool peut également libérer des blocks dans le pool. Cependant, supprimer les LV n'est pas toujours une manière efficace de libérer de l'espace parce que la quantité est limité au nombre de blocks non partagés avec d'autres LV dans le pool.
\vspace{5mm} \\
 
 
\hspace{1mm}  L'allocation de block incrémental de pools thin peut causer les LV à devenir fragmentés. Les LV standard évitent généralement en allouant tous les blocks en une fois durant la création.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Termes Thin }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} ThinDataLV]{Grand LV créé dans un VG, utilisé par le pool thin pour stocker les blocks ThinLV}
\item[\hspace{1mm} ThinMetaLV]{Petit LV créé dans un VG, utilisé pour suivre l'utilisation des blocks de données}
\item[\hspace{1mm} ThinPoolLV]{Combinaison de ThinDataLV et ThinMetaLV, contenant les ThinLV et les SnapLV}
\item[\hspace{1mm} ThinLV]{Créé depuis le ThinPoolLV, apparaît blanc après la création}
\item[\hspace{1mm} SnapLV]{Snapshot créé depuis le ThinPoolLV, apparaît comme un snapshot d'un autre LV après la création}
\end{description}
 
\vspace{1cm}{\huge Utilisation Thin }
 
\
 
\hspace{1mm}  La méthode première pour utiliser le provisionning thin est:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1. Créer ThinDataLV]{Créer un LV qui va maintenir les données du pool thin}
\item[\hspace{1mm} lvcreate -n pool0 -L 10G vg0]{}
\item[\hspace{1mm} 2. Créer ThinMetaLV]{Créer un LV qui va maintenir les métadonnées}
\item[\hspace{1mm} lvcreate -n pool0meta -L 1G vg0]{}
\item[\hspace{1mm} 3. Créer le ThinPoolLV]{Combiner les données et métadonnées en un LV pool}
\item[\hspace{1mm} lvconvert --type thin-pool --poolmetadata vg0/pool0meta vg0/pool0]{}
\item[\hspace{1mm} 4. Créer un ThinLV]{Créer un nouveau LV thin depuis le pool. Ce LV est créé avec une taille virtuelle}
\item[\hspace{1mm} lvcreate -n thin1 -V 1T --thinpool vg0/pool0]{}
\item[\hspace{1mm} lvcreate -n thin2 -V 1T --thinpool vg0/pool0]{}
\item[\hspace{1mm} 5. Créer un SnapLV]{Créer des snapshots d'un ThinLV ou SnapLV existant. Ne pas spécifier -L, --size pour créer un snapshot.}
\item[\hspace{1mm} lvcreate -n thin1s1 -s vg0/thin1]{}
\item[\hspace{1mm} lvcreate -n thin1s2 -s vg/thin1]{}
\item[\hspace{1mm} lvcreate -n thin1s1s1 -s vg/thin1s1]{}
\item[\hspace{1mm} 6. Activer un SnapLV]{Les snapshots thin sont créés avec le flag "activation skip", indiqué par l'attribut "k". Utiliser -K avec lvchange ou vgchange pour activer les snapshots avec l'attribut "k"}
\item[\hspace{1mm} lvchange -ay -K vg0/thin1s1]{}
\end{description}
 
\vspace{1cm}{\huge Syntaxe alternative pour spécifier le type thin-pool }
 
\
 
\hspace{1mm} La syntaxe pour créer un pool est: \\
\hspace{1mm} \textbf{lvconvert --type -thin-pool --poolmetadata VG/ThinMetaLV VG/ThinDataLV} \\
\hspace{1mm} Un LV existant est convertis en un pool thin en changeant son type en thin-pool. Une syntaxe alternative peut être utilisée pour la même opération: \\
\hspace{1mm} \textbf{lvconvert --thinpool VG/ThinDataLV --poolmetadata VG/ThinMetaLV} \\
 
\hspace{1mm}  Le type thin-pool est déduit par lvm; l'option --thinpool n'est pas un alias pour --type thin-pool. L'utilisation de l'option --thinpool ici est différente de l'utilisation de l'option --thinpool en créant un LV thin, où il spécifie le pool dans lequel le LV thin est créé.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Automatic pool metadata LV }
 
\
 
\hspace{1mm} Un LV thin de données peut être convertis en un LV pool thin sans spécifier de LV metadata. LVM créé automatiquement un LV metadata dans le même VG \\
\hspace{1mm} \textbf{lvcreate -n pool0 -L 10G vg0} \\
\hspace{1mm} \textbf{lvconvert --type thin-pool vg0/pool0} \\
 
\vspace{1cm}{\huge Spécifier des périphériques pour les LV de données et de métadonnées }
 
\
 
\hspace{1mm} Les LV de données et de métadonnées dans un thin pool sont mieux créés sur des périphériques physiques séparés. Pour cela, spécifie les nom de périphérique à la fin de la ligne lvcreate. Cela peu être utile pour utiliser des périphériques rapides pour les métadonnées \\
\hspace{1mm} \textbf{lvcreate -n pool0 -L 10G vg0 /dev/sdA} \\
\hspace{1mm} \textbf{lvcreate -n pool0meta -L 1G vg0 /dev/sdB} \\
\hspace{1mm} \textbf{lvconvert --type thin-pool --poolmetadata vg0/pool0meta vg0/pool0} \\
 
\vspace{1cm}{\huge Tolérance aux panne en utilisant RAID }
 
\
 
\hspace{1mm} Pour la tolérance aux panne, utiliser un raid pour le pool de données et de métadonnées. C'est recommandé pour les métadonnées \\
\hspace{1mm} \textbf{lvcreate --type raid1 -m 1 -n pool0 -L 10G vg0 /dev/sdA /dev/sdB} \\
\hspace{1mm} \textbf{lvcreate --type raid1 -m 1 -n pool0meta -L 1G vg0 /dev/sdC /dev/sdD} \\
\hspace{1mm} \textbf{lvconvert --type thin-pool --poolmetadata vg0/pool0meta vg0/pool0} \\
 
\vspace{1cm}{\huge LV metadata spare }
 
\
 
\hspace{1mm} La première fois qu'un LV pool est créé, lvm crée un lv metadata space dans le VG. Ce comportement peut être contrôlé avec l'option --poolmetadataspare y|n. \\
 
\vspace{1cm}{\huge  }
 
\
 
\hspace{1mm}  Pour créer le LV pmspare (pool metadata spare), lvm crée d'abord un LV avec un nom par défaut, par ex lvol0, puis le convertit en un LV caché avec le suffix \_pmspare, par ex, lvol0\_pmspare. Un pmspare est conservé dans un VG à utiliser pour tout pool thin. Le pmspare LV ne peut pas être créé explicitement, mais peut être supprimé explicitement.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm} \textbf{lvcreate -n pool0 -L 10G vg0} \\
\hspace{1mm} \textbf{lvcreate -n pool0meta -L 1G vg0} \\
\hspace{1mm} \textbf{lvconvert --type thin-pool --poolmetadata vg0/pool0meta vg0/pool0} \\
 
\vspace{1cm}{\huge Vérification et réparation des métadonnées }
 
\
 
\hspace{1mm} Si un thin pool metadata est endommagé, il peut être réparé. Vérifier et réparer un thin pool metadata est analogue à lancer fsck sur un système de fichier. \\
 
\hspace{1mm} Quand un thin pool LV est activé, lvm lance la commande thin\_check pour vérifier les métadonnées dans le LV de métadonnées du pool. \\
 
\begin{description} \normalsize
\item[\hspace{1mm} lvm.conf thin\_check\_executable]{peut être définis avec une chaîne vide ("") pour désactiver l'étape thin\_check. Ce n'est pas recommandé.}
\item[\hspace{1mm} lvm.conf thin\_check\_options]{Contrôle les options de commande utilisées pour la commande thin\_check}
\end{description}
 
\hspace{1mm}  Si la commande thin\_check trouve un problème avec les métadonnées, le LV pool n'est pas activé, et les métadonnées doivent être réparées.
\vspace{5mm} \\
 
 
\hspace{1mm} Les commandes de réparation simple ne réussisent pas toujours. La réparation avancée peut nécessiter d'éditer les métadonnée du pool thin et les métadonnées lvm. \\
\hspace{1mm} \textbf{lvconvert --repair VG/ThinPoolLV} \\
 
\hspace{1mm}  La réparation effectue les étapes suivantes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1. Créer une nouvelle copie réparée des métadonnées]{lvconvert lance la commande thin\_repair pour lire les métadonnées endommagées dans le LV de métadonnées existant, et écrit une nouvelle copie réparée dans le LV pmspare du VG.}
\item[\hspace{1mm} 2. Remplacer le thin pool metadata LV]{Si l'étape 1 est réussie, le LV de métadonnées du pool thin est remplacé avec le LV pmspare contenant les métadonnées corrigées. L'ancien devient visible avec le nouveau nom ThinPoolLV\_tmetaN (où N est 0, 1, ...).}
\end{description}
 
\hspace{1mm}  Si la réparation fonctionne, le LV pool thin et ses LV thin peuvent être activés, et le LV contenant les métadonnées du pool thin endommagé peut être supprimé. Il peut être utile de déplacer le nouveau LV de métadonnées vers un meilleur PV.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si la réparation ne fonctionne pas, le LV du pool thin et ses LV thin sont perdus.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si les métadonnées sont restaurées manuellement avec thin\_repair directement, le LV de métadonnées du pool peuvent être échangé avec un autre LV contenant les nouvelles métadonnées:
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Activation des snapshots thin }
 
\
 
\hspace{1mm} Quand un LV snapshot thin est créé, il a le flag "activation skip" par défaut. Ce flag est indiqué par l'attribut 'k' affiché par lvs \\
\hspace{1mm} \textbf{lvs vg/thin1s1} \\
 
\hspace{1mm}  Ce flag indique que le LV snapshot n'est pas activé par des commande d'activation normales. Ce comportement ne s'applique pas aux commandes de désactivation.
\vspace{5mm} \\
 
 
\hspace{1mm}  Un LV snapshot avec l'attribut 'k' peut être activé en utilisant -K (ou --ignoreactivationskip) en plus de l'option standard -ay (ou --activate y)
\vspace{5mm} \\
 
 
\hspace{1mm} Commande pour activer un LV snapshot thin: \\
\hspace{1mm} \textbf{lvchange -ay -K VG/SnapLV} \\
 
\hspace{1mm}  Le flag persistant "activation skip" peut être désactivé durant lvcreate, ou ultérieurement avec lvchange en utilisant l'option -kn (ou --setactivationskip n). Il peut être activé avec -kv (ou --setactivationskip y).
\vspace{5mm} \\
 
 
\hspace{1mm}  Quand le flag 'activation skip' est supprimé, les commandes d'activation normales vont activer le LV, et l'option -K n'est pas nécessaire
\vspace{5mm} \\
 
 
\hspace{1mm} La commande pour créer un LV snapshot sans le flag: \\
\hspace{1mm} \textbf{lvcreate -kn -n SnapLV -s VG/ThinLV} \\
\hspace{1mm} Commande pour supprimer le flag d'un LV snapshot: \\
\hspace{1mm} \textbf{lvchange -kn VG/SnapLV} \\
 
\begin{description} \normalsize
\item[\hspace{1mm} lvm.conf auto\_set\_activation\_skip]{Contrôle le paramètre d'activation utilisé par lvcreate}
\end{description}
 
\vspace{1cm}{\huge Supprimer les LV pool thin, les LV thin et les snapshots }
 
\
 
\hspace{1mm}  Supprimer un LV thin et ses snapshots associés retourne les blocks utilisés au LV pool thin. Ces blocks sont réutilisés pour d'autres LV thin et snapshots.
\vspace{5mm} \\
 
 
\hspace{1mm}  Supprimer un LV pool thin supprime le LV de données, et le LV de métadonnées et retourne l'espace au VG.
\vspace{5mm} \\
 
 
\hspace{1mm}  La suppression de LV pool thin, LV thin et snapshots avec lvremove, ne peuvent pas être récupérés avec vgcfgrestore. vgcfgbackup ne récupère pas les métadonnées du pool.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Gérer manuellement l'espace libre d'un LV pool thin }
 
\
 
\hspace{1mm}  L'espace disponible dans le LV pool thin peut être affiché avec la commande lvs. L'espace libre peut être ajouté en étendant le LV pool thin.
\vspace{5mm} \\
 
 
\hspace{1mm} Commande pour étendre l'espace du pool: \\
\hspace{1mm} \textbf{lvextend -L Size VG/ThinPoolLV} \\
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm} Doubler l'espace physique d'un pool: \\
\hspace{1mm} \textbf{lvextend -L+10G vg0/pool0} \\
 
\hspace{1mm}  D'autres méthodes pour augmenter l'espace dans le pool inclus de supprimer un LV thin et des snapshots associés, ou lancer fstrim dans le système de fichier utilisant un LV thin.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Gérer manuellement l'espace de métadonnées d'un LV pool thin }
 
\
 
\hspace{1mm}  L'espace de métadonnées disponible dans un LV pool thin peut être affiché avec la commande lvs -o+metadata\_percent
\vspace{5mm} \\
 
 
\hspace{1mm} Commande pour étendre l'espace de métadonées du pool: \\
\hspace{1mm} \textbf{lvextend --poolmetadatasize Size VG/ThinPoolLV} \\
 
\vspace{1cm}{\huge Utiliser fstrim pour augmenter l'espace libre dans un LV pool thin }
 
\
 
\hspace{1mm}  Supprimer des fichiers dans un système de fichier au dessus d'un LV thin ne rajoute pas généralement d'espace libre dans le pool. Lancer manuellement fstrim peut retourner de l'espace dans le pool qui a été utilisé par des fichier supprimés. fstrim ne fonctionne pas si le LV pool thin a le mode discards à ignore.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm}  Un pool thin a 10G d'espace physique, et un LV thin qui a une taille virtuelle 100G. Écrire un fichier 1G dans le système de fichier réduit l'espace libre dans le pool thin de 10\% et augmente l'utilisation virtuelle du système de fichier de 1\%. Supprimer le fichier de 1G restore les 1\% virtuel du système de fichier, me ne restaure pas les 10\% physiques. la commande fstrim restore cet espace physique au pool thin.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Étendre automatiquement le LV pool thin }
 
\
 
\hspace{1mm}  Le service lvm dmeventd (lvm2-monitor) supervise l'utilisation de données des LV pool thin et les étends quand l'utilisation atteind un certain niveau. L'espace libre nécessaire doit exister dans le VG pour étendre les LV pool thin. Superviser et étendre les LV pool thin sont contrôlés indépendamment.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Supervision }
 
\
 
\hspace{1mm}  Quand un LV pool thin est activé, dmeventd va le superviser par défaut. La commande pour démarrer et stopper la supervision dmeventd d'un LV pool thin:
\vspace{5mm} \\
\hspace{1mm}  Le status de supervision actuel peut être affiché avec la commande lvs -o+seg\_monitor
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge autoextension }
 
\
 
\hspace{1mm}  dmeventd devrait être configuré pour étendre les LV pool thin avant que tout l'espace soit utilisé. Les alertes sont émises via syslog quand l'utilisation d'un pool thin atteind 80\%, 85\%, 90\% et 95\%. Le point auquel dmeventd étend un pool, et la quantité sont contrôlés avec 2 paramètres de configuration:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} lvm.conf thin\_pool\_autoextend\_threshold]{\% qui défins quand le pool devrait être étendu. À 100 désactive l'extension automatique. La valeur minimum est 50.}
\item[\hspace{1mm} lvm.conf thin\_pool\_autoextend\_percent]{Définis la quantité d'espace à ajouter, en pourcentage de la taille courante.}
\end{description}
 
\vspace{1cm}{\huge Désactivation }
 
\
 
\hspace{1mm}  Il y a plusieurs manières où l'extension des pools thin peut être empêché.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{Si le service dmeventd ne fonctionne pas, aucun monitoring ou extension automatique ne va se produire}
\item[\hspace{1mm} -]{Même quand dmeventd fonctionne, toute la supervision peut être désactivée avec le paramètre de monitoring dans lvm.conf}
\item[\hspace{1mm} -]{Pour activer ou créer un LV pool thin sans interagir avec dmeventd, utiliser l'option --ignoremonitoring peut être utilisé.}
\item[\hspace{1mm} -]{Définir thin\_pool\_autoextend\_threshold à 100 désactive l'extension automatique.}
\end{description}
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm}  Si thin\_pool\_autoextend\_threshold vaut 70 et thin\_pool\_autoextend\_percent vaut 20, quand un pool excède 70\% d'utilisation, il est étendu de 20\%. Pour un pool de 1G, en utilisant 700M cela déclenche une redimmensionnement à 1,2G. Quand l'utilisation excède 840M, le pool sera étendu à 1,44G, et ainsi de suite.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Épuisement de l'espace }
 
\
 
\hspace{1mm}  Proprement géré, l'espace de données des pool thin devraient être étendus avant que tout l'espace soit utilisé. Si l'espace est déjà épuisé, il peut être toutefois être étendus.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le comportement d'un pool thin plein est configurable avec l'option --errorwhenfull y|n de lvcreate ou lvchange. Cette option ne s'applique seulement pour les écritures.
\vspace{5mm} \\
 
 
\hspace{1mm} La commande pour changer le comportement d'un pool thin complet: \\
\hspace{1mm} \textbf{lvchange --errorwhenfull \{y|n\} VG/ThinPoolLV} \\
 
\begin{description} \normalsize
\item[\hspace{1mm} lvm.conf error\_when\_full]{Contrôle l'erreur dans le fichier de configuration}
\end{description}
 
\hspace{1mm} Le paramètre courant d'un LV pool thin peut être affiché avec \\
\hspace{1mm} \textbf{lvs -o+lv\_when\_full} \\
 
\hspace{1mm}  Le paramètre errorwhenfull n'affecte pas les paramètre de supervision et autoextension, et ces derniers n'affectent pas non plus le paramètre errorwhenfull. C'est seulement quand la supervision/autoextension ne sont pas effectifs que le pool thin devient plein et que le paramètre errorwhenfull est appliqué.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le défaut est 'n'. Les écritures des LV thin sont acceptés et mis en queue, dans l'attente d'espace disponible. Une fois l'espace étendu, les écritures en attente sont traitées.
\vspace{5mm} \\
 
 
\hspace{1mm}  En attendant d'être étendus, le pool thin met les écriture en queue pour 60 secondes (le défaut). Si l'espace n'a pas été étendus après ce délai, les écritures en queue retournent une erreur à l'appelant, par ex le système de fichier. Cela peut résulter en une corruption du système de fichier pour les systèmes de fichier non-journalisés qui peut nécessiter fsck. Quand un pool thin retourne des erreurs d'écriture à un LV thin, un système de fichier est sujet à la perte de données utilisateur non-synchronisés.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le timeout de 60 secondes peut être changé ou désactivé avec l'option du module kernel dm-thin-pool no\_space\_timeout.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
