\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 20:56:24 CEST 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={mdmon},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Supervision des métadonnées md externes},
CreationDate={D:20160522205624},
ModDate={D:20160522205624},
Keywords={raid;storages;Haute Disponibilité}
}}
\begin{document}
 
\begin{center}
{\Huge mdmon }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Supervision des métadonnées md externes}
 
\vspace{10mm}
 
\hspace{1mm}  le kernel 2.6.27 ajoute le support des métadonnées externes. Ces métadonnées externes impliques que l'espace utilisateur gère toutes les mises à jours des métadonnées. La responsabilité du kernel est de notifier l'espace utilisateur quand un événement de métadonnées se produit, tels qu'une erreur disque. Le kernel, dans des cas importants, attends l'espace utilisateur pour prendre une action sur ces notifications.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Mises à jours des métadonnées }
 
\
 
\hspace{1mm}  mdmon est un service de mise à jours des métadonnées. mdmon requête l'espace de nom sysfs à la recherche de changements dans les attributs array\_state, sync\_action et state. Quand un changement est détecté il appel un handler par type de métadonnées pour effectuer les modifications sur les métadonnées. Les actions sont les suivantes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} array\_state - inactif]{Efface le bit dirty pour le volume et laisse l'array stoppé}
\item[\hspace{1mm} array\_state - write pending]{Définis le bit dirty pour l'array puis met array\_state à actif. Les écritures sont bloquées tant que les écritures de l'espace utilisateur sont actifs}
\item[\hspace{1mm} array\_state - active-idle]{Le timer safe mode a expiré pour l'array et définis l'état pour nettoyer les écritures de block dans l'array}
\item[\hspace{1mm} array\_state - clean]{Efface le bit dirty pour le volume}
\item[\hspace{1mm} array\_state - read-only]{État initial de tous les array au démarrage. mdmon prend une des 3 actions suivantes:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} 1/]{Transition de l'array vers read-auto conservant le bit dirty effacé si le handler de métadonnées détermine que l'array n'a pas besoin de resynchro ou autre modifications}
\item[\hspace{6mm} 2/]{Transition de l'array vers actif si le handler de métadonnées détermines qu'une resynchro ou autres manipulations est nécessaire.}
\item[\hspace{6mm} 3/]{Laisser l'array read-only si le volume est marqué à ne pas superviser.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} sync\_action - resync-to-idle]{Notify l'handler de métadonnées qu'une resynchro peut avoir fini. Si un processus de resynchro est en attente avant d'être complété, cet événement permet au handler de métadonnées de vérifier la resynchro}
\item[\hspace{1mm} sync\_action - recover-to-idle]{Un spare peut avoir finis la reconstruction donc indique au handler l'état de chaque disque. C'est l'opportunité de l'handler d'effacer les bits out-of-sync et le status dégradé du volume.}
\item[\hspace{1mm} <disk>/state - faulty]{Une erreur disque déclenche une série d'événements. D'abord, notify le handler qu'un disque a échoué, et notify le kernel qu'il peut débloquer les écritures qui étaient dépendant de ce disque. Ensuite le disque est mis à removed+ de l'array membre. Finallement le disque est marqué en erreur dans tous les autres array membre dans le conteneur.}
\end{description}
 
\vspace{1cm}{\huge Conteneurs }
 
\
 
\hspace{1mm}  Les formats de métadonnées externe, comme DDF, diffèrent des formats de métadonnées MD natifs dans le sens qu'ils définissent un jeu de disques et une série de sous-array dans ces disques. Les métadonnées en comparaison définissent une relation 1:1 entre un jeu de périphériques block et un array RAID. Par exemple, pour créer 2 array à différents niveaux RAID dans un simple jeu de disques, les métadonnées MD nécessitent que les disques soient partitionnés puis chaque array peut être créé avec un sous-jeu de ces partitions. Les formats externes supportés effectuent cet opération disques en interne.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les périphériques conteneur maintiennent simplement les références de tous les disques membre et permet aux outils mdmon de déterminer quels array actifs appartiennent à quel conteneur. Certaines commandes de gestion d'array comme la suppression ou l'ajout de disque sont seulement valides au niveau du conteneur. Les conteneurs sont identifiés dans /proc/mdstat avec une vversion de métadonnées "external:<metadata name>". Les périphériques membres sont identifiés par "external:/<container device>/<member index>", ou "external:-<container device>/<member index>" si l'array est lecture seule.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Options }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} CONTAINER]{Le périphérique conteneur à superviser. Peut être un chemin complet comme /dev/md/container, ou un simple nom de périphérique md.}
\item[\hspace{1mm} --foreground]{Ne lance pas en tâche de fond}
\item[\hspace{1mm} --takeover]{Instruit mdmon de remplacer un service mdadm déjà en cours d'exécution}
\item[\hspace{1mm} --all]{Trouve tous les conteneurs actifs et démarre le monitoring sur chacun d'entre-eux}
\end{description}
 
\vspace{1cm}{\huge Démarrage et arrêt }
 
\
 
\hspace{1mm}  mdmon doit être lancé quand un système de fichier dans le périphérique monitoré est monté avec des considérations spéciale quand le système de fichier root est monté depuis un périphérique mdmon supervisé. Noter qu'en général mdmon est nécessaire même si le système de fichier est monté en lecture seule. et certains systèmes de fichier restent en écriture dans ces circonstances, par exemple pour rejouer un journal après un arrêt non propre.
\vspace{5mm} \\
 
 
\hspace{1mm}  Quand l'array est assemblé par le code initramfs, mdadm démarre automatiquement mdmon si requis. Cela signifie que mdmon doit être installé dans l'initramfs et doit il doit y avoir un système de fichier en écriture dans lequel mdmon peut créer un pid et un socket. Le système de fichier particulier à utiliser est donné à mdmon à la compilation. défaut: /run/mdadm.
\vspace{5mm} \\
 
 
\hspace{1mm}  Une fois le système root instancié avec un pivot\_root, mdmon devrait être lancé avec --all --takeover pour que le mdmon lancé dans l'initramfs puisse être remplacé.
\vspace{5mm} \\
 
 
\hspace{1mm}  À l'arrêt, mdmon ne devrait pas être terminer avec les autres processus. Vu qu'il maintien un fichier ouvert dans /dev, il n'est pas possible de démonter /dev si c'est un système de fichie séparé
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Terminer le mdmon en cours d'exécution est terminé et une nouvelle instance est démarré: \\
\hspace{1mm} \textbf{mdmon --all-active-arrays --takeover} \\
\end{flushleft}
\end{document}
