\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]{lun. oct. 31 20:29:32 CET 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={ext4},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={4ème système de fichier étendu},
CreationDate={D:20161031202932},
ModDate={D:20161031202932},
Keywords={FileSystems;storages}
}}
\begin{document}
 
\begin{center}
{\Huge ext4 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large 4ème système de fichier étendu}
 
\vspace{10mm}
 
\vspace{1cm}{\huge Fonctionnalités }
 
\
 
\hspace{1mm}  Un système de fichier formatté en ext4 peut avoir certains flags de fonctionnalités embarqués:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 64bits]{Active les systèmes de fichiers supérieurs à 2\textasciicircum 32 blocks. Cette fonctionnalité est active automatiquement si nécessaire.}
\item[\hspace{1mm} bigalloc]{Active l'allocation de blocks clusterisés, pour que l'unité d'allocation soit une puissance de 2 nombres de blocks. C'est à dire, chaque bit dans le bitmap d'allocation de block indique désormais si un cluster est utilisé ou non, où un cluster est par défaut composé de 16 blocks. Cette fonctionnalité peut diminuer le temps passé à allouer des blocks et réduit la fragmentation, spécialement pour les grands fichiers. La taille peut être spécifiée en utilisant mke2fs -C.}
\item[\hspace{1mm} dir\_index]{Utilise des b-trees hashés pour accélérer la recherche de nom dans les grands répertoires.}
\item[\hspace{1mm} dir\_nlink]{Autorise plus de 65000 sous-répertoires par répertoire}
\item[\hspace{1mm} encrypt]{Chiffrement au niveau du système de fichier des blocks de données et des noms de fichier. les métadonnées d'inode (timestamps, taille de fichier, user/groupe, etc) ne sont pas chiffrés}
\item[\hspace{1mm} ext\_attr]{Active l'utilisation d'attributs étendus.}
\item[\hspace{1mm} extent]{Permet le mappage des numéros de blocks logiques pour un inode particulier vers des blocks physique dans le périphériques de stockage à stocker en utilisant un extent tree, qui est une structure de données plus efficace que le schéma de block indirect traditionnel utilisé par ext2 et ext3. Cela diminue la charge de block de métadonnées, améliore les performances et diminue le besoin de lancer e2fsck sur le système de fichier.}
\item[\hspace{1mm} extra\_isize]{Réserve un quantité d'espace spécifique dans chaque inode pour les métadonnées étendues tels que les timestamps nanoseconde et la date de création de fichier, même si le kernel n'a pas besoin d'un tel espace. Sans cette option, le kernel réserve de l'espace quand il en a besoin. Utile quand la taille d'inode fait au moins 256 octets.}
\item[\hspace{1mm} filetype]{Active le stockage des information de type de fichier dans le entrées de répertoire.}
\item[\hspace{1mm} flex\_bg]{Permet aux métadonnées de groupes par block (bitmaps d'allocation et tables d'inodes) d'être placés n'importe où. De plus, mke2fs plase ces métadonnées ensemble en commençant au premier groupe de block de chaque "flex\_bg group". La taille du groupe flex\_bg peut être spécifié avec l'option -G}
\item[\hspace{1mm} has\_journal]{Créé un journal qui s'assure de la consistance du système de fichier même entre les arrêt non-propre. Équivalent à utiliser l'option -j avec mke2fs ou tune2fs.}
\item[\hspace{1mm} huge\_file]{Permet des fichiers supérieurs à 2Tio}
\item[\hspace{1mm} inline\_data]{Permet de stocker des données dans l'inode et dans les zones d'attributs étendus.}
\item[\hspace{1mm} journal\_dev]{Active dans le superblock dans un périphérique journal externe. La taille de block pour le journal externe doit être la même que le système de fichier.}
\item[\hspace{1mm} large\_file]{Définis automatiquement quand un fichier supérieur à 2Gio est créé.}
\item[\hspace{1mm} meta\_bg]{Permet de redimensionner un système de fichiers online sans réserver explicitement de l'espace pour agrandir la taille des descripteurs de groupe de block. Également utilisé pour redimensionner des systèmes de fichier supérieurs à 2\textasciicircum 32 blocks. Non recommandé à la création d'un système de fichier.}
\item[\hspace{1mm} mmp]{Fournis une protection de montage multipoint. Utile dans les environnements de stockage partagés}
\item[\hspace{1mm} project]{Fournis le support des quotas de projet. Avec cette fonctionnalité, le project ID de l'inode est géré quand le système de fichier est monté.}
\item[\hspace{1mm} quota]{Créé des inodes quota (inode \#3 pour usrquota, \#4 pour grpquota) et les définis dans le superblock. Avec cette fonctionnalité, les quotas sont activés automatiquement quand le système de fichier est monté.}
\item[\hspace{1mm} resize\_inode]{indique que de l'espace a été réservé pour que la table de descripteur de groupe de block puisse être étendue en redimmensionnant un système de fichier monté. L'opération de redimensionnement online est géré par le kernel, piloté par resize2fs. Nécessite également sparse\_super.}
\item[\hspace{1mm} sparse\_super]{Indique que les copies backup du superblock et les descripteurs de groupe de block sont présent seulement dans quelques groupes de block, pas tous.}
\item[\hspace{1mm} sparse\_super2]{Indique qu'il y a seulement 2 sauvegardes de superblock et des descripteurs de groupe de block. Les groupes de block utilisés pour les sauvegardes sont stockés dans le superblock, mais typiquement, sera localisé au début du groupe de block \#1, et un dans le dernier groupe de block dans le système de fichier. Version extrême de sparse\_super et est conçus pour permettre qu'un plus grand pourcentage du disque ait des blocks contigus disponible pour les fichiers.}
\item[\hspace{1mm} uninit\_bg]{Indique que les descripteurs de groupe de block sont protégés en utilisant des checksums, permettant à mke2fs de créer un système de fichier sans initialiser tous les groupes de block. Accélère la création des systèmes de fichier.}
\end{description}
 
\vspace{1cm}{\huge Options de montage }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} journal\_dev=devnum/journal\_path=path]{Quand les numéros majeur/mineur du périphérique de journal externe a été changé, ces options permettent à l'utilisateur de spécifier le nouvel emplacement du journal.}
\item[\hspace{1mm} norecovery|noload]{Ne charge pas le journal au montage. Noter que si le système de fichier n'a pas été démonté proprement, ne pas rejouer le journal peut engendrer des inconsistances dans le système de fichier.}
\item[\hspace{1mm} data=\{journal|ordered|writeback\}]{Spécifie le mode de journalisation. Les métadonnées sont toujours journalisés:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} journal]{Toutes les données sont envoyées au journal avant d'être écrit dans le système de fichier}
\item[\hspace{6mm} ordered]{mode par défaut. Toutes les données sont écrites dans le système de fichier avant que ses métadonnées soient envoyées au journal}
\item[\hspace{6mm} writeback]{L'ordre des données n'est pas préservé - les données peuvent être écrites dans le système de fichier après que ses métodonnées aient été envoyées au journal. Plus performant et garanti l'intégrité du système de fichier, mais d'anciennes données peuvent apparaître dans les fichiers après un crash et une récupération journal.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} commit=nrsec]{Synchronise toutes les données et métadonnées chaque nrsec secondes. Défaut: 5. 0=défaut.}
\item[\hspace{1mm} oldalloc|orlov]{Utilise l'ancien allocateur ou l'allocateur Orlov pour les nouveaux inode. Orlov est le défaut.}
\item[\hspace{1mm} \texttt{[}no\texttt{]}user\_xattr]{Active les attributs étendus}
\item[\hspace{1mm} \texttt{[}no\texttt{]}acl]{Support pour les ACL posix}
\item[\hspace{1mm} bsddf|minixdf]{Définis le comportement pour l'appel système statfs. minixdf retourne dans le champ f\_blocks le nombre total de blocks, bsddf soustrait les blocks utilisé par ext4 et non disponible pour le stockage.}
\item[\hspace{1mm} debug]{Affiche des informations de debuggage à chaque remontage}
\item[\hspace{1mm} errors=\{continue|remount-ro|panic\}]{Définis le comportement si une erreur est rencontrée}
\item[\hspace{1mm} data\_err=ignore|abord]{Affiche simplement un message d'erreur si une erreur se produit (ignore), ou annule le journal (abort)}
\item[\hspace{1mm} grpid|bsdgroups et nogrpid|sysvgroups]{Définissent quel GID a un fichier nouvellement créé. avec grpid, il prend le GID du répertoire dans lequel il a été créé; sinon (le défaut), il prend le fsgid du processus courant, sauf si le setgid est mis, auquel cas il prend le gid du répertoire parent et obtient le setgid si c'est un répertoire lui-même.}
\item[\hspace{1mm} sb=n]{Au lieu du block 1, utilise le block n comme superblock. Peut être utile quand le système de fichier a été endommagé.}
\item[\hspace{1mm} nouid32]{Désactive les UID et GID 32bits. Pour compatibilité avec les anciens kernel.}
\item[\hspace{1mm} grpquota|usrquota|quota|noquota]{active le support des quotas}
\item[\hspace{1mm} usrjquota=aquota.user|grpjquota=aquota.group|jqfmt=vfsv0]{Support pour les quotas journalisés (quota version 2). jqfmt=vfsv0 active les quotas journalisés. Pour les quotas journalisés les options de montage usrjquota=aquota.user et grpjquota=aquota.group sont requis pour indiquer au système de quota quels bases de quota utiliser. Les quotas journalisés ont l'avantage que même après un crash aucune vérification de quota n'est requis.}
\item[\hspace{1mm} journal\_checksum]{Active le cheksum des transactions du journal. Permet au code de récupération dans e2fsck et le kernel de détecter les corruptions dans le kernel.}
\item[\hspace{1mm} journal\_async\_commit]{Les blocks émis peuvent être écris sur le disque sans attendre les blocks descripteur.}
\item[\hspace{1mm} barrier=0 / barrier=1 / barrier / nobarrier]{Active l'utilisation de barrières d'écriture dans le code jbd. Ces barrières forcent l'ordre sur disque correcte des commits journaux, rendant les cache d'écritures disque volatiles plus sûres, au prix d'une pénalité de performances.}
\item[\hspace{1mm} inode\_readahead\_blks=n]{contrôle le nombre maximum de blocks de table d'inodes que l'algorithme readahead de table d'inode pré-lit dans le cache. La valeur doit être une puissance de 2. Défaut: 32 blocks}
\item[\hspace{1mm} stripe=n]{Nombre de blocks de système de fichiers que mballoc tente d'utiliser pour la taille d'allocation et l'alignement. Pour les systèmes RAID5/6, c'est le nombre de disques de données * la taille de chunk dans les blocks du système de fichier.}
\item[\hspace{1mm} delalloc|nodelalloc]{Défère l'allocation de block jusqu'au moment de l'écriture}
\item[\hspace{1mm} max\_batch\_time=usec]{Temps max d'attente pour des opérations de système de fichier additionnels à batcher ensemble avec une opération d'écriture synchrone. Vu qu'une opération d'écriture synchrone force un commit puis attend que l'opération d'E/S se complète, cela ne coûte rien et peut être un gros gain de débit, on attend un peut pour voir si une autre transaction peut se greffer dans l'écriture synchrone. L'algorithme utilisé est conçus pour la vitesse disque, en mesurant la quantité de temps qu'il prend pour finir un commit.}
\item[\hspace{1mm} min\_batch\_time=usec]{Temps de commit minimum. Défaut: 0ms. Augmenter ce paramètre peut améliorer des charges synchrone multi-threadés sur les disques rapide, au prix d'une latence accrue.}
\item[\hspace{1mm} journal\_ioprio=prio]{Priorité E/S (de 0 à 7, 0 étant la priorité la plus élevée) qui devrait être utilisé pour les opérations d'E/S envoyés par kjournald2 durant une opération commit. Défaut: 3, qui est légèrement supérieur à la priorité E/S par défaut.}
\item[\hspace{1mm} abort]{simule les effets de ext4\_abort().}
\item[\hspace{1mm} auto\_da\_alloc|noauto\_da\_alloc]{De nombreuses applications cassées n'utilisent pas fsync() en remplaçant les fichiers existant via des pattern. Si auto\_da\_alloc est activé, ext4 détecte les pattern replace-via-rename et replace-via-truncate et force toutes allocations de blocks retardés à être alloués au prochain commit journal, dans le mode data=ordered.}
\item[\hspace{1mm} noinit\_itable]{N'initialise pas les blocks de table d'inode non-initialisés en fond. Peut être utilisé par les CD d'installation pour que le processus d'installation puisse se compléter le plus vite possible; le processus d'initialisation de table d'inode sera déférré à la prochaine fois que le système de fichier est monté}
\item[\hspace{1mm} init\_itable=n]{Le code itable attend n fois le nombre de millisecondes qu'il a pris pour remplir de 0 la table d'inode du groupe de block précédent. Celà minimise l'impact sur les performances système à l'initialisation des tables d'inode}
\item[\hspace{1mm} discard/nodiscard]{Contrôle si ext4 devrait émettre des commandes discard/TRIM au périphérique block quand des blocks sont libérés. Utile pour des disques SSD et les LUN sparse/thinly-provisionned.}
\item[\hspace{1mm} block\_validity/noblock\_validity]{Active la facilité kernel pour traquer les blocks de métadonnées du système de fichier dans les structures de données interne. Cela permet à l'allocateur multi-block et d'autres routines de rapidement localiser les extents qui peuvent chevaucher les blocks de métadonnées. Cette option est prévu pour du debugging.}
\item[\hspace{1mm} dioread\_lock/dioread\_nolock]{Contrôle si ext4 devrait ou non utilise les locks de lecture DIO. Si l'option dioread\_nolock est donné, alloue les extents non initialisés avant l'écriture du tampon et convertis l'extent en initialisé après que les E/S soient complétés. Cette approche permet d'éviter d'utiliser d'inode mutex, qui améliore l'évolutivité sur les stockages à haute vitesse. Cependant cela ne fonctionne pas avec les données journalisée et l'option dioread\_nolock est ignorée.}
\item[\hspace{1mm} max\_dir\_size\_kb=n]{Limite la taille des répertoires pour que toute tentative de les étendre au-delà de cette limite en Kio génère une erreur ENOSPC. Utile dans les environnement en mémoire contrainte, où de très gros répertoires peut causer de sérieux problèmes de performances. (par exemple, s'il y a seulement 512Mo de mémoire disponible, un répertoire de 176Mo peut sérieusement monopoliser les ressources système.}
\item[\hspace{1mm} i\_version]{Active le support d'inode 64bits. Défaut: off.}
\end{description}
 
\vspace{1cm}{\huge Attributs de fichier }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} a]{Ajouter uniquement}
\item[\hspace{1mm} A]{Pas de mise à jours du atime}
\item[\hspace{1mm} d]{Pas de dump}
\item[\hspace{1mm} D]{Mise à jours de répertoire synchrone}
\item[\hspace{1mm} i]{immuable}
\item[\hspace{1mm} S]{Mises à jours synchrone}
\item[\hspace{1mm} u]{Non supprimable}
\item[\hspace{1mm} j]{Données journalisées}
\item[\hspace{1mm} e]{Format étendu}
\end{description}
\end{flushleft}
\end{document}
