<!doctype article public "-//OASIS//DTD DocBook V4.1//EN">
<article id="lg68f-fr" lang="fr">
 <articleinfo>
  <title>Systèmes de fichiers journalisés pour Linux</title>
<subtitle>Linux Gazette numéro 68</subtitle>
<copyright><year>2001</year><holder>Matteo Dell'Omodarme</holder></copyright>
<author><firstname>Matteo</firstname><surname>Dell'Omodarme</surname>
<affiliation>
  <address><email>matt@martine2.difi.unipi.it</email></address>
</affiliation>
<authorblurb>
<para>Je suis un étudiant à l'Université de Pise, et
utilisateur de Linux
depuis 1994. J'administre actuellement les serveurs Linux de la section
Astronomie du Département de Physique, avec une certaine expérience en
sécurité. Mon adresse mél principale est
<email>matt@martine2.difi.unipi.it</email>
</para>
</authorblurb>
</author>
<othercredit>
  <firstname>Jérôme</firstname>
  <surname>Fenal</surname>
  <affiliation>
    <address><email>jerome@fenal.org</email></address>
  </affiliation>
  <contrib>Traduction française</contrib>
</othercredit>
</articleinfo>

<!-- ###################################################################### -->
<sect1 id="lg68f-fr-1"><title>Introduction</title>
<para>
Un système de fichiers est le logiciel employé pour organiser et gérer
l'information stockée sur disque&nbsp;; il assure l'intégrité des
données à la condition que les données écrites sur disque sont
identiques quand elles sont relues plus tard. En plus des données
contenues dans les fichiers, le système de fichier stocke et gère
aussi d'autres informations au sujet des fichiers et de lui-même
(i.e. informations de date et d'heure, propriétaire, permissions
d'accès, taille du fichier, emplacement de stockage sur le disque,
etc...) Ces informations sont communément appelées meta-données.
</para>
<para>
Puisque le système de fichiers essaie autant que possible de
travailler de façon asynchrone afin d'éviter les goulots
d'étranglement lors des accès au disque, une interruption soudaine de
son activité amènerait des pertes de données. Par exemple, considérons
le scénario suivant&nbsp;: qu'arriverait-il si votre machine plante
quand vous travaillez sur un document qui réside sur le standard de
Linux : Ext2FS&nbsp;?
Il y a plusieurs réponses&nbsp;:
<itemizedlist>
   <listitem>
   <para>La machine plante après que vous ayez sauvegardé le
   fichier. C'est le meilleur scénario&nbsp;: vous n'avez rien
   perdu. Redémarrez simplement votre machine et continuez à
   travailler sur votre document.
   </para>
  </listitem>
   <listitem>
   <para>La machine plante avant que vous n'ayez sauvegardé le
   fichier. Vous avez perdu toutes les modifications que vous aviez
   faites, mais l'ancienne version du fichier est toujours sur disque.
   </para>
  </listitem>
   <listitem>
   <para>La machine plante au moment exact où vous sauvegardez votre
   fichier. C'est le plus mauvais cas&nbsp;: la nouvelle version du
   fichier recouvre physiquement l'ancienne version sur disque. Vous
   vous retrouvez avec un fichier à moitié nouveau mais aussi à moitié
   ancien. Si le fichier est un fichier binaire, vous ne pourrez plus
   le relire puisque le format interne sera endommagé et ne
   correspondra pas à ce que l'application s'attend à lire.
   </para>
  </listitem>
  </itemizedlist>
</para>
<para>Dans ce dernier scénario, les choses peuvent être pires encore
si les données écrites sur disques font partie des meta-données, tel
le répertoire. Et maintenant, au lieu d'avoir un simple fichier
corrompu, c'est un système de fichiers qui l'est, et vous pouvez y
perdre un répertoire voire la partition de disque complète.
</para>
<para>Le système de fichier standard de Linux, Ext2FS, essaie de
prévenir et corriger les cas de corruption de meta-données en
effectuant une analyse complète du système de fichier
(<command>fsck</command>) lors du démarrage du système. Et comme
Ext2FS inclut des copies redondantes des meta-données critiques, il
est peu probable que les données soient complètement perdues. Le
système s'emploie à savoir où se situent les meta-données corrompues,
et soit répare les dommages en recopiant la version redondante, soit
efface simplement le ou les fichiers dont les meta-données sont
corrompues.
</para>
<para>Bien évidemment, plus la taille du système de fichier à vérifier
est importante, plus le temps de vérification sera long. Sur des
espaces disque de plusieurs giga-octets, cela peut prendre un temps
très important de vérifier les meta-données au démarrage.
</para>
<para>Et comme Linux commence à être utilisé pour des applications de
plus en plus complexes, sur des gros serveurs, et de moins en moins de
tolérance pour les arrêts de production, le besoin d'un système de
fichier protégeant données et meta-données se fait de plus en plus sentir.
</para>
<para>Les systèmes de fichiers journalisés pour Linux sont la réponse
à ce besoin.</para>
</sect1>


<!-- ###################################################################### -->
<sect1 id="lg68f-fr-2"><title>Qu'est-ce qu'un système de fichiers
journalisé ?</title>
  <para>
Nous ne ferons ici qu'une simple introduction aux systèmes de fichiers
journalisés. Pour obtenir des informations plus avancées et
techniques, reportez-vous à l'article de Juan I. Santos Florido dans
la <ulink
url="http://www.linuxgazette.com/issue55/florido.html">Linux-Gazette
n°55</ulink>. D'autres informations sont disponibles dans l'article <ulink url="http://freshmeat.net/articles/view/212/">http://freshmeat.net/articles/view/212/</ulink>.
</para>
<para>La plupart des systèmes de fichiers modernes utilisent des
techniques de journalisation empruntées au monde des bases de données
pour améliorer la reprise sur incident. Les transactions sont écrites
séquentiellement sur une partie du disque appelée
<emphasis>journal</emphasis> ou <emphasis>log</emphasis> avant de les
écrire sur disque à leur place définitive dans le système de
fichiers. Les mises en oeuvres varient dans le contenu écrit dans le
journal. Certaines n'y mettent que les meta-données, alors que
d'autres y enregistrent toutes les écritures<footnote><para>NdT&nbsp;: et
donc les données contenues dans les fichiers.</para></footnote>
</para>
<para>
Maintenant, si un plantage survient avant qu'une entrée de journal ne
soit validée<footnote><para>NdT&nbsp;: en franglais&nbsp:
<emphasis>committée</emphasis></para></footnote>, les données
originales sont toujours sur disque et vous avez uniquement perdu vos
dernières modifications. Si le plantage intervient pendant
l'<command>update</command><footnote><para>NdT&nbsp: on gardera le terme
anglais puisqu'il s'agit du daemon (en mode noyau - pour Linux - ou utilisateur,
suivant les Unix) du même nom</para></footnote> (i.e. après
la validation de l'entrée du journal), l'entrée du journal reflète ce
qui aurait dû être fait. Et au ré-amorçage du système, il n'a qu'a
rejouer les transactions du journal, et terminer
l'<command>update</command> qui a été interrompu.
</para>
<para>
Dans les deux cas, vous avez des données valides, et non une partition
inutilisable. Et comme le temps de reprise sur incident associé à
cette approche journalisée, le système est utilisable dans les
quelques secondes qui suivent.
</para>
<para>
Il est aussi important de noter que l'utilisation d'un système de
fichiers jounalisé ne rend pas complètement obsolète l'emploi d'un
programme de vérification d'intégrité (<command>fsck</command>). Des
erreurs matérielles ou logicielles peuvent corrompre de façon
aléatoire quelques blocs du système de fichiers, interdisant une
récupération grâce au journal de transactions.
</para>
</sect1>

<!-- ############################## -->

<sect1 id="lg68f-3.fr"><title>Systèmes de fichiers journalisés disponibles</title>
<para>
Dans ce qui va suivre, nous allons considérer trois systèmes de
fichiers journalisés.
</para>
<para>Le premier est ext3. Développé par Stephen Tweedie, un des principaux
développeurs du noyau Linux, ext3 ajoute la journalisation à ext2.
Il est disponible en version alpha à <ulink
url="ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/">ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/</ulink></para>
<para>Namesys développe un système de fichiers journalisé du nom de ReiserFS.
Il est disponible à <ulink
url="http://www.namesys.com/">http://www.namesys.com</ulink></para>
<para>SGI a sorti le 1<superscript>er</superscript> mai 2001 la
version 1.0 de son système de fichiers XFS pour Linux. Vous pouvez le
trouver à <ulink url="http://oss.sgi.com/projects/xfs/">http://oss.sgi.com/projects/xfs/</ulink>.
</para>
<para>
Dans cet article, ces trois solutions seront testées et mesurée au
banc d'essai en utilisant deux programmes différents.
</para>
</sect1>

<!-- ############################## -->
<sect1 id="lg68f-4.fr"><title>Installer ext3</title>
<para>
Pour obtenir des détails techniques au sujet de ext3, se référer à la <ulink
url="ftp://ftp.kernel.org/pub/linux/kernel/people/sct/ext3/journal-design.ps.gz">publication</ulink>
et à la <ulink
url="http://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html">présentation</ulink>
du Dr Stephen Tweedie.
</para>
<para>
Le système de fichier ext3 est directement dérivé de son ancêtre
ext2. Il a le gros avantage d'être complètement compatible avec ext2
puisqu'il s'agit d'un ext2 avec journalisation. Le désavantage le plus
visible est que ext3 ne met pas en oeuvre la plupart des
caractéristiques avancées des systèmes de fichiers modernes, qui
améliorent manipulation des données et compacité de stockage.
</para>
<para>
ext3 est livré sous la forme d'un patch pour le noyau 2.2.19. Il vous
faut donc trouver un noyau <filename>linux-2.2.19</filename> sur <ulink
url="ftp://ftp.kernel.org/">ftp://ftp.kernel.org/</ulink> ou depuis un
site <ulink url="http://www.kernel.org/mirrors/">miroir</ulink>. Le
patch est disponible depuis <ulink
url="ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/">ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/</ulink>
ou <ulink url="ftp://ftp.kernel.org/pub/linux/kernel/people/sct/ext3">ftp://ftp.kernel.org/pub/linux/kernel/people/sct/ext3</ulink>
ou depuis un miroir de ce site.
</para>
<para>Vous avez besoin des fichiers suivants&nbsp;:
<itemizedlist>
<listitem><para><ulink
url="ftp://ftp.kernel.org/pub/linux/kernel/people/sct/ext3/ext3-0.0.7a.tar.bz2"><filename>ext3-0.0.7a.tar.bz2</filename></ulink>&nbsp;:
le patch noyaui&nbsp;;</para></listitem>
<listitem><para><ulink
url="ftp://ftp.kernel.org/pub/linux/kernel/people/sct/ext3/e2fsprogs-1.21-WIP-0601.tar.bz2"><filename>e2fsprogs-1.21-WIP-0601.tar.bz2</filename></ulink>&nbsp;:
les programmes <productname>e2fsprogs</productname> avec le support pour ext3.</para></listitem>
</itemizedlist>
</para>
<para>
Copiez le noyau Linux <filename>linux-2.2.19.tar.bz2</filename> et
<filename>ext3-0.0.7a.tar.bz2</filename> dans le répertoire <filename
class='directory'>/usr/src</filename>, puis en extraire le contenu&nbsp;:
<programlisting>
mv linux linux-old
tar -Ixvf linux-2.2.19.tar.bz2
tar -Ixvf ext3-0.0.7a.tar.bz2
cd linux
cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1
cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
</programlisting>
</para>
<para>
Le premier fichier <command>diff</command> est une copie du patch
dévermineur noyau de SGI. Le second est le patch de ext3. Maintenant,
configurez le noyau, en spécifiant YES à l'option &laquo;&nbsp;Enable
Second extended fs development code&nbsp;&raquo; dans la section
&laquo;&nbsp;filesystem&nbsp;&raquo;, puis le construire.
</para>
<para>
Après la compilation et l'installation du noyau, vous devez construire
et installer la suite e2fsprogs&nbsp;:
<programlisting>
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2
cd e2fsprogs-1.21
./configure
make
make check
make install
</programlisting>
Et c'est tout. Le point suivant est de construire un système de
fichiers ext3 dans une partition. Re-démarrez avec le nouveau
noyau. Vous avez maintenant deux options&nbsp;: créer un nouveau
système de fichiers, ou en journaliser un existant.
</para>
<itemizedlist>
<listitem><para>Créer un nouveau système de fichiers. Utilisez
simplement la commande <command>mke2fs</command> de la suite installée
e2fsprogs, et en utilisation l'option <option>-j</option> en lançant <command>mke2fs</command>&nbsp;:</para><para><programlisting>mke2fs -j /dev/xxx
</programlisting></para<para> où <filename class='devicefile'>/dev/xxx</filename>
est le périphérique où vous voulez créer le système de fichiers ext3. L'option
<option>-j</option> permet de spécifier à <command>mke2fs</command> de créer un
système ext3 avec un journal caché. Vous pouvez contrôler la taille du journal
avec l'option <option>-Jsize=&lt;n&gt;</option> (n étant la taille en Mo du
journal).
</para></listitem>
<listitem><para>Mettre à jour un système de fichiers ext2 en
ext3. Utilisez simplement <command>tune2fs</command>&nbsp;:</para>
<para>
<programlisting>tune2fs -j /dev/xxx</programlisting>
</para>
<para>Vous pouvez lancer cette commande sur un système de fichier
monté ou démonté. S'il est monté, un fichier <filename>.journal</filename> sera
créé en sa racine&nbsp;; s'il est démonté, un inode système et caché sera
utilisé pour y mettre le journal. Ainsi, toutes les données du système de
fichiers sont préservées.</para></listitem>
</itemizedlist>
<para>
Vous pouvez monter le système de fichier ext3 avec la commande&nbsp;:
<programlisting>mount -t ext3 /dev/xxx /mount_dir</programlisting>
Puisque ext3 est essentiellement un système de fichier ext2 avec
journalisation, un système de fichier ext3 proprement démonté peut
être remonté en tant que ext2 sans aucune autre commande.
</para>
</sect1>

<!-- ############################## -->
<sect1 id="lg68f-5.fr"><title>Installer XFS</title>
<para>
Pour un survol technique de XFS, référez-vous à <ulink
url="http://linux-xfs.sgi.com/projects/xfs/">la page linux-XFS du site
SGI</ulink> et aux <ulink
url="http://linux-xfs.sgi.com/projects/xfs/publications.html">pages
des publications de SGI.</ulink>
Voir aussi la <ulink
url="http://oss.sgi.com/projects/xfs/faq.html">Foire Aux
Questions</ulink>.
</para>
<para>
XFS est un système de fichiers journalisé pour Linux disponible chez
SGI. La technologie est mature, ce qui a été prouvé sur les systèmes
Irix en tant qye système de fichiers par défaut pour tous les clients
de SGI. XFS est disponible sous LPG (GNU GPL). 
</para>
<para>XFS Linux 1.0 est disponible pour la version 2.4 du noyau
Linux. J'ai essayé le patch pour la version 2.4.2. La première étape
est donc d'obtenir le noyau linux-2.4.2 d'un des miroirs de
kernel.org. Les patches sont disponibles à <ulink url="ftp://oss.sgi.com/projects/xfs/download/Release-1.0/patches/"></ulink>. Téléchargez-y&nbsp;:
</para>
<para>
<itemizedlist>
<listitem><para><ulink
url="ftp://oss.sgi.com/projects/xfs/download/Release-1.0/patches/linux-2.4-xfs-1.0.patch.gz"><filename>linux-2.4-xfs-1.0.patch.gz</filename></ulink></para></listitem>
<listitem><para><ulink
url="ftp://oss.sgi.com/projects/xfs/download/Release-1.0/patches/linux-2.4.2-core-xfs-1.0.patch.gz"><filename>linux-2.4.2-core-xfs-1.0.patch.gz</filename></ulink></para></listitem>
<listitem><para><ulink
url="ftp://oss.sgi.com/projects/xfs/download/Release-1.0/patches/linux-2.4.2-kdb-04112001.patch.gz"><filename>linux-2.4.2-kdb-04112001.patch.gz</filename></ulink></para></listitem>
</itemizedlist>

Copiez le noyau Linux <filename>linux-2.4.2.tar.bz2</filename> dans
<filename class='directory'>/usr/src</filename>, renommez le
répertoire <filename class='directory'>linux</filename> existant en <filename
class='directory'>linux-old</filename> et extrayez le nouveau noyau&nbsp;:

<programlisting>
mv linux linux-old
tar -Ixf inux-2.4.2.tar.bz2
</programlisting>

Copiez chacun des patches cités c-dessus et appliquez-les&nbsp;:
<programlisting>
zcat patchfile.gz | patch -p1 
</programlisting>
Configurez ensuite le noyau, en validant les options &laquo;&nbsp;XFS
filesystem support&nbsp;&raquo; (CONFIG_XFS_FS) et &laquo;&nbsp;Page
buffer support&nbsp;&raquo; (CONFIG_PAGE_BUF) dans la section
&laquo;&nbsp;Filesystem&nbsp;&raquo;.
Notez que vous aurez aussi besoin de mettre à jour les utilitaires
systèmes dans les versions montrées ici ou les suivantes&nbsp;
<itemizedlist>
<listitem><para><ulink url="http://www.kernel.org/pub/linux/utils/kernel/modutils/v2.4/">modutils-2.4.0</ulink></para></listitem>
<listitem><para><ulink url="http://www.gnu.org/software/autoconf/autoconf.html"></ulink>autoconf-2.13</para></listitem>
<listitem><para><ulink url="http://e2fsprogs.sourceforge.net/">e2fsprogs-devel-1.18</ulink></para></listitem>
</itemizedlist>
Installez ensuite le nouveau noyau et redémarrez.
Téléchargez maintenant les <ulink
url="ftp://oss.sgi.com/projects/xfs/download/Release-1.0/cmd_tars/xfsprogs-1.2.0.src.tar.gz">outils
XFS</ulink>.
Cette archive tar contient tout un jeu de commandes pour utiliser XFS,
comme <command>mkfs.xfs</command>. Pour les construire&nbsp;:
<programlisting>
tar -zxf  xfsprogs-1.2.0.src.tar.gz
cd xfsprogs-1.2.0
make configure 
make 
make install
</programlisting>
Après avoir installé ces commandes, vous pouvez créer un nouveau
système de fichiers avec la commande&nbsp;:
<programlisting>
# mkfs -t xfs /dev/xxx
</programlisting>
Une option importante dont vous aurez peut-être besoin est l'option
<option>-f</option> qui forcera la création du nouveau système de
fichiers s'il en existe déjà un sur la partition. Bien évidemment,
cela détruira toute donnée présente sur cette partition&nbsp;:
<programlisting>
mkfs -t xfs -f /dev/xxx
</programlisting>
Vous pouvez ensuite monter le système de fichier avec la commande&nbsp;:
<programlisting>
mount -t xfs /dev/xxx /mount_dir
</programlisting>
</para>
</sect1>

<!-- ############################## -->
<sect1 id="lg68f-6.fr"><title>Installer ReiserFS</title>
<para>
Pour les détails techniques au sujet de ReiserFS, référez-vous au
<ulink url="http://www.namesys.com/">site de Namesys</ulink> et la <ulink url="http://www.namesys.com/faq.html">Foire aux Questions</ulink>.
</para>
<para>
ReiserFS est intégré au noyau Linux depuis la version 2.4.1-pre4. Vous
devez néanmoins récupérer les outils
(i.e. <command>mkreiserfs</command> pour initialiser le système de
fichier sur une partition vide, le retailleur, etc.)
</para>
<para>
La toute dernière version de ReiserFS est disponible en tant que patch
envers les noyaux 2.2.x et 2.4.x. J'ai testé la version pour le noyau
Linux 2.2.19.
</para>
<para>
La première étape, comme d'habitude, est d'obtenir le noyau standard
<filename>linux-2.2.19.tar.bz2</filename> depuis un des miroirs de kernel.org.
Récupérez aussi le <ulink
url="ftp://ftp.namesys.com/pub/reiserfs-for-2.2/">patch ReiserFS pour
2.2.19</ulink>
</para>
<para>
Notez que si vous utilisez la version pour le noyau 2.4, vous aurez
aussi besoin de l'archive des utilitaires <ulink
url="ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.x.0j.tar.gz"><filename>reiserfsprogs-3.x.0j.tar.gz</filename></ulink><footnote><para>NdT&nbsp;:
En effet, les utilitaires dans la version 3.5 de ReiserFS pour noyau
2.2 sont dans le patch pour des questions de réutilisation du
code. Cela n'empêche en rien le fait de récupérer les derniers outils
(les mêmes que pour le noyau 2.4, en particulier pour <command>reiserfsck</command>.</para></footnote>
</para>
<para>
Déballez maintenant l'archive du noyau et le patch. Copiez les
archives dans <filename class='directory'>/usr/src</filename> et renommez le
répertoire <filename class='directory'>linux</filename> en <filename
class='directory'>linux-old</filename>&nbsp;; puis lancez les commandes&nbsp;:
<programlisting>
tar -Ixf linux-2.2.19.tar.bz2
bzcat linux-2.2.19-reiserfs-3.5.33-patch.bz2 | patch -p0
</programlisting>
Compilez le noyau en ayant validé le support de ReiserFS dans la
section &laquo;&nbsp;Filesystem&nbsp;&raquo;. Compilez et installez
les utilitaires&nbsp;:
<programlisting>
cd /usr/src/linux/fs/reiserfs/utils 
make
make install 
</programlisting>
Installez le nouveau noyau et rebootez. Vouz pouvez maintenant créer
le nouveau système de fichier ReiserFS, avec la commande
suivante&nbsp;:
<programlisting>
mkreiserfs /dev/xxxx 
</programlisting>
et le monter&nbsp;:
<programlisting>
mount -t reiserfs /dev/xxx /mount_dir
</programlisting>
</para>
</sect1>

<!-- ############################## -->
<sect1 id="lg68f-7.fr"><title>Les systèmes de fichiers au banc d'essai</title>
<para>
Pour le test, j'ai utilisé un Pentium III, avec 16 Mo de mémoire et un
disque dur de 2 Go, installé avec la distribution Linux RedHat 6.2.
Tous les systèmes de fichiers ont correctement fonctionné chez moi, ce
qui m'a fait démarré un petit test de performances pour pouvoir les
comparer. Le premier test fut d'arrêter brutalement l'alimentation
électrique afin de vérifier la reprise grâce au journal. Tous les
systèmes de fichiers ont passé cette phase avec succès, et la machine
fut en ordre de marche dans les secondes qui suivirent pour chaque
système de fichier.
</para>
<para>
L'étape suivante est l'analyse de performances en utilisant le
programme bonnie++, disponible à <ulink
url="http://www.coker.com.au/bonnie++/">http://www.coker.com.au/bonnie++/</ulink>.
Ce programme analyse les accès de type base de données dans un
fichier, ainsi que les créations, lectures, et destructions de petits
fichiers simulant ainsi les utilisations faites par des programmes
tels <productname>Squid</productname>, <productname>INN</productname>, ou les
programmes utilisant le format Maildir (<productname>qmail</productname>).
La commande utilisée pour lancer le test est&nbsp;:
<programlisting>
bonnie++ -d/work1 -s10 -r4 -u0
</programlisting>
Elle lance le test en utilisant 10 Mo dans le système de fichiers
monté sur le répertoire <filename class='directory'>/work1</filename>. Les
autres options spécifient la quantité de mémoire utilisée
(<option>-r4</option>), et l'utilisateur (<option>-u0</option>, c'est-à-dire
l'administrateur).
</para>
<para>
Les résultats apparaissent dans les tableaux ci-dessous&nbsp;:
</para>

<para>
<informaltable frame="all">
<tgroup cols="14" colsep="1" rowsep="1">
<colspec colname="col0" align="center">
<colspec colname="col1" align="center">
<colspec colname="col2" align="center">
<colspec colname="col3" align="center">
<colspec colname="col4" align="center">
<colspec colname="col5" align="center">
<colspec colname="col6" align="center">
<colspec colname="col7" align="center">
<colspec colname="col8" align="center">
<colspec colname="col9" align="center">
<colspec colname="col10" align="center">
<colspec colname="col11" align="center">
<colspec colname="col12" align="center">
<colspec colname="col13" align="center">
<tbody>
<row>
<entry align="center" morerows=1 namest="col0" nameend="col1"></entry>
<entry align="center" namest="col2" nameend="col7">Ecritures séquentielles</entry>
<entry align="center" namest="col8" nameend="col11">Lectures séquentielles</entry>
<entry align="center" morerows=1 namest="col12" nameend="col13">Accès aléatoires</entry>
</row>
<row>
<entry align="center" namest="col2" nameend="col3">Caractère</entry>
<entry align="center" namest="col4" nameend="col5">Bloc</entry>
<entry align="center" namest="col6" nameend="col7">Ré-écriture</entry>
<entry align="center" namest="col8" nameend="col9">Caractère</entry>
<entry align="center" namest="col10" nameend="col11">Bloc</entry>
</row>
<row>
<entry align="center">SF</entry>
<entry align="center">Espace de test</entry>
<entry align="center">Ko/sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">Ko/sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">Ko/sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">Ko/sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">Ko/sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">Ko/sec</entry>
<entry align="center">&percnt; CPU</entry>
</row>
<row>
<entry align="center">ext2</entry>
<entry align="center">10 Mo</entry>
<entry align="center">1471</entry>
<entry align="center">97</entry>
<entry align="center">14813</entry>
<entry align="center">67</entry>
<entry align="center">1309</entry>
<entry align="center">14</entry>
<entry align="center">1506</entry>
<entry align="center">94</entry>
<entry align="center">4889</entry>
<entry align="center">15</entry>
<entry align="center">309</entry>
<entry align="center">10</entry>
</row>
<row>
<entry align="center">ext3</entry>
<entry align="center">10 Mo</entry>
<entry align="center">1366</entry>
<entry align="center">98</entry>
<entry align="center">2361</entry>
<entry align="center">38</entry>
<entry align="center">1824</entry>
<entry align="center">22</entry>
<entry align="center">1482</entry>
<entry align="center">94</entry>
<entry align="center">4935</entry>
<entry align="center">14</entry>
<entry align="center">317,8</entry>
<entry align="center">10</entry>
</row>
<row>
<entry align="center">xfs</entry>
<entry align="center">10 Mo</entry>
<entry align="center">1206</entry>
<entry align="center">94</entry>
<entry align="center">9512</entry>
<entry align="center">77</entry>
<entry align="center">1351</entry>
<entry align="center">33</entry>
<entry align="center">1299</entry>
<entry align="center">98</entry>
<entry align="center">4779</entry>
<entry align="center">80</entry>
<entry align="center">229,1</entry>
<entry align="center">11</entry>
</row>
<row>
<entry align="center">reiserfs</entry>
<entry align="center">10 Mo</entry>
<entry align="center">1455</entry>
<entry align="center">99</entry>
<entry align="center">4253</entry>
<entry align="center">31</entry>
<entry align="center">2340</entry>
<entry align="center">26</entry>
<entry align="center">1477</entry>
<entry align="center">93</entry>
<entry align="center">5593</entry>
<entry align="center">26</entry>
<entry align="center">174,3</entry>
<entry align="center">5</entry>
</row>
</tbody>
</tgroup>
</informaltable>

<informaltable frame="all">
<tgroup cols="14" colsep="1" rowsep="1">
<colspec colname="col0" align="center">
<colspec colname="col1" align="center">
<colspec colname="col2" align="center">
<colspec colname="col3" align="center">
<colspec colname="col4" align="center">
<colspec colname="col5" align="center">
<colspec colname="col6" align="center">
<colspec colname="col7" align="center">
<colspec colname="col8" align="center">
<colspec colname="col9" align="center">
<colspec colname="col10" align="center">
<colspec colname="col11" align="center">
<colspec colname="col12" align="center">
<colspec colname="col13" align="center">
<tbody>
<row>
<entry align="center" morerows=1 namest="col0" nameend="col1"></entry>
<entry align="center" namest="col2" nameend="col7">Créations séquentielles</entry>
<entry align="center" namest="col8" nameend="col13">Créations aléatoires</entry>
</row>
<row>
<entry align="center" namest="col2" nameend="col3">Création</entry>
<entry align="center" namest="col4" nameend="col5">Lecture</entry>
<entry align="center" namest="col6" nameend="col7">Destruction</entry>
<entry align="center" namest="col8" nameend="col9">Création</entry>
<entry align="center" namest="col10" nameend="col11">Lecture</entry>
<entry align="center" namest="col12" nameend="col13">Destruction</entry>
</row>
<row>
<entry align="center">SF</entry>
<entry align="center">Nombre de fichiers</entry>
<entry align="center">/ sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">/ sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">/ sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">/ sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">/ sec</entry>
<entry align="center">&percnt; CPU</entry>
<entry align="center">/ sec</entry>
<entry align="center">&percnt; CPU</entry>
</row>
<row>
<entry align="center">ext2</entry>
<entry align="center">16</entry>
<entry align="center">94</entry>
<entry align="center">99</entry>
<entry align="center">278</entry>
<entry align="center">99</entry>
<entry align="center">492</entry>
<entry align="center">97</entry>
<entry align="center">95</entry>
<entry align="center">99</entry>
<entry align="center">284</entry>
<entry align="center">100</entry>
<entry align="center">93</entry>
<entry align="center">41</entry>
</row>
<row>
<entry align="center">ext3 </entry>
<entry align="center">16 </entry>
<entry align="center">89 </entry>
<entry align="center">98 </entry>
<entry align="center">274 </entry>
<entry align="center">100 </entry>
<entry align="center">458 </entry>
<entry align="center">96 </entry>
<entry align="center">93 </entry>
<entry align="center">99 </entry>
<entry align="center">288</entry>
<entry align="center">99</entry>
<entry align="center">97</entry>
<entry align="center">45</entry>
</row>
<row>
<entry align="center">xfs</entry>
<entry align="center">16</entry>
<entry align="center">92</entry>
<entry align="center">99</entry>
<entry align="center">251</entry>
<entry align="center">96</entry>
<entry align="center">436</entry>
<entry align="center">98</entry>
<entry align="center">91</entry>
<entry align="center">99</entry>
<entry align="center">311</entry>
<entry align="center">99</entry>
<entry align="center">90</entry>
<entry align="center">41</entry>
</row>
<row>
<entry align="center">reiserfs</entry>
<entry align="center">16</entry>
<entry align="center">1307</entry>
<entry align="center">100</entry>
<entry align="center">8963</entry>
<entry align="center">100</entry>
<entry align="center">1914</entry>
<entry align="center">99</entry>
<entry align="center">1245</entry>
<entry align="center">99</entry>
<entry align="center">1246</entry>
<entry align="center">100</entry>
<entry align="center">1725</entry>
<entry align="center">100</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para><para>
Deux résultats sont montrés par type de test&nbsp;: le débit du système
de fichiers (en Ko par seconde) et le temps d'utilisation du processeur (en %).
Plus les chiffres de débit sont élevés, meilleurs ils sont pour le système de
fichiers. L'inverse est vrai pour le temps processeur.
</para>
<para>
Ainsi que vous pouvez le voir, ReiserFS remporte haut-la-main la
victoire pour la gestion de fichiers (sections &laquo;&nbsp;Créations
séquentielles&nbsp;&raquo et &laquo;&nbsp;Créations
aléatoires&nbsp;&raquo;), dépassant ses opposants d'un facteur
supérieur à 10. De plus, il est quasiment aussi bon que les autres
systèmes de fichiers dans les lectures et écritures séquentielles. Il
n'y a pas de différence significative entre les autres systèmes de
fichiers. XFS est aussi rapide que ext2, et ext3, comme prévu, un peu
plus lent que ext2 (qui fait la même chose, la perte de temps dues aux
appels systèmes pour la journalisation en moins.)
</para>
<para>
Le dernier test employé est mongo, un programme disponible sur la page
benchmark pour ReiserFS de <ulink
url="html://www.namesys.com/">www.namesys.com</ulink>, programme que
j'ai modifié pour tester les trois systèmes de fichiers
journalisés. J'ai inséré dans le script perl mongo.pl les commandes
pour monter les systèmes de fichiers XFS et ext3 et pour les
formater. Puis j'ai lancé le banc de test.
</para>
<para>
Le script initialise une partition /dev/xxx, la monte, et fait tourner
un certain nombre de processus dans chaque phase&nbsp;: création de
fichier, copie, lien symbolique, lectures, état du
fichier<footnote><para>NdT&nbsp;: de l'appel système
stat</para></footnote>, renommage, et destruction du fichier. Mongo
calcule aussi la fragmentation après les phases de création et de
copie&nbsp;:
<blockquote><para>Fragmentation = nombre de fragments / nombre de fichiers
</para>
</blockquote>
Vous trouverez les résultats du test sous différentes formes dans le
répertoire <filename class='directory'>results</filename>&nbsp;:
<informaltable frame="none">
<tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0">
<colspec colname="col1">
<tbody>
<row>
<entry>log</entry>
<entry>résultats bruts</entry>
</row>
<row>
<entry>log.tbl</entry>
<entry>résultats à injecter dans le
programme <command>compare</command></entry>
</row>
<row>
<entry>log_table</entry>
<entry>log</entry>
</row>
</tbody>
</tgroup>
</informaltable>
Les tests furent exécutés comme indiqué dans l'exemple suivant&nbsp;
<programlisting>
mongo.pl ext3 /dev/hda3 /work1 logext3 1
</programlisting>
où ext3 doit être remplacé par reiserfs ou xfs pour pouvoir tester les
autres systèmes de fichiers. Les autres arguments sont le périphérique
à monter où se situe le système de fichier à tester, le point de
montage, le nom du fichier où les résultats seront conservés et le
nombre de processus à lancer. 
</para>
<para>
Vous trouverez dans les tables suivantes les résultats de
l'analyse. Les données correspondent au temps d'exécution, en
secondes, la valeur la moins élevée étant la meilleure. Dans le
premier tableau, la taille moyenne d'un fichier est de 100 octets, dans
le second, 1000 octets, et dans le dernier, 10000 octets.

<informaltable frame="all">
<tgroup cols="4" colsep="1" rowsep="1">
<colspec colname="col0" align="center">
<colspec colname="col1" align="center">
<colspec colname="col2" align="center">
<colspec colname="col3" align="center">
<tbody>
<row>
<entry align="center"></entry>
<entry align="center">ext3 files=68952 size=100 bytes dirs=242</entry>
<entry align="center">XFS files=68952 size=100 bytes dirs=241</entry>
<entry align="center">reiserFS files=68952 size=100 bytes dirs=241</entry>
</row>
<row>
<entry align="center">Création</entry>
<entry align="center">90,07</entry>
<entry align="center">267.86</entry>
<entry align="center">53,05</entry>
</row>
<row>
<entry align="center">Fragmentation</entry>
<entry align="center">1,32</entry>
<entry align="center">1,02</entry>
<entry align="center">1,00</entry>
</row>
<row>
<entry align="center">Copie</entry>
<entry align="center">239,02</entry>
<entry align="center">744,51</entry>
<entry align="center">126,97</entry>
</row>
<row>
<entry align="center">Fragmentation</entry>
<entry align="center">1,32</entry>
<entry align="center">1,03</entry>
<entry align="center">1,80</entry>
</row>
<row>
<entry align="center">Liens symboliques</entry>
<entry align="center">0</entry>
<entry align="center">203,54</entry>
<entry align="center">105,71</entry>
</row>
<row>
<entry align="center">Lecture</entry>
<entry align="center">782,75</entry>
<entry align="center">1543,93</entry>
<entry align="center">562,53</entry>
</row>
<row>
<entry align="center">Etat des fichiers (stat)</entry>
<entry align="center">108,65</entry>
<entry align="center">262,25</entry>
<entry align="center">225,32</entry>
</row>
<row>
<entry align="center">Renommage</entry>
<entry align="center">67,26</entry>
<entry align="center">205,18</entry>
<entry align="center">70,72</entry>
</row>
<row>
<entry align="center">Destruction</entry>
<entry align="center">23,80</entry>
<entry align="center">389,79</entry>
<entry align="center">85,51</entry>
</row>
</tbody>
</tgroup>
 </informaltable>
</para>
<para>
<informaltable frame="all">
<tgroup cols="4" colsep="1" rowsep="1">
<colspec colname="col0" align="center">
<colspec colname="col1" align="center">
<colspec colname="col2" align="center">
<colspec colname="col3" align="center">
<tbody>
<row>
<entry align="center"></entry>
<entry align="center">ext3 files=11248 size=1000 bytes dirs=44</entry>
<entry align="center">XFS files=11616 size=1000 bytes dirs=43</entry>
<entry align="center">ReiserFS files=11616 size=1000 bytes dirs=43</entry>
</row>
<row>
<entry align="center">Création</entry>
<entry align="center">30,68</entry>
<entry align="center">57,94</entry>
<entry align="center">36,38</entry>
</row>
<row>
<entry align="center">Fragmentation</entry>
<entry align="center">1,38</entry>
<entry align="center">1,01</entry>
<entry align="center">1,03</entry>
</row>
<row>
<entry align="center">Copie</entry>
<entry align="center">75,21</entry>
<entry align="center">149,49</entry>
<entry align="center">84,02</entry>
</row>
<row>
<entry align="center">Fragmentation</entry>
<entry align="center">1,38</entry>
<entry align="center">1,01</entry>
<entry align="center">1,43</entry>
</row>
<row>
<entry align="center">Liens symboliques</entry>
<entry align="center">16,68</entry>
<entry align="center">29,59</entry>
<entry align="center">19,29</entry>
</row>
<row>
<entry align="center">Lecture</entry>
<entry align="center">225,74</entry>
<entry align="center">348,99</entry>
<entry align="center">409,45</entry>
</row>
<row>
<entry align="center">Etat des fichiers (stat)</entry>
<entry align="center">25,60</entry>
<entry align="center">46,41</entry>
<entry align="center">89,23</entry>
</row>
<row>
<entry align="center">Renommage</entry>
<entry align="center">16,11</entry>
<entry align="center">33,57</entry>
<entry align="center">20,69</entry>
</row>
<row>
<entry align="center">Destruction</entry>
<entry align="center">6,04</entry>
<entry align="center">64,90</entry>
<entry align="center">18,21</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
<para>
<informaltable frame="all">
<tgroup cols="4" colsep="1" rowsep="1">
<colspec colname="col0" align="center">
<colspec colname="col1" align="center">
<colspec colname="col2" align="center">
<colspec colname="col3" align="center">
<tbody>
<row>
<entry align="center"></entry>
<entry align="center">ext3 files=2274 size=10000 bytes dirs=32</entry>
<entry align="center">XFS files=2292 size=10000 bytes dirs=31</entry>
<entry align="center">reiserFS files=2292 size=10000 bytes dirs=31</entry>
</row>
<row>
<entry align="center">Création</entry>
<entry align="center">27,13</entry>
<entry align="center">25,99</entry>
<entry align="center">22,27</entry>
</row>
<row>
<entry align="center">Fragmentation</entry>
<entry align="center">1,44</entry>
<entry align="center">1,02</entry>
<entry align="center">1,05</entry>
</row>
<row>
<entry align="center">Copie</entry>
<entry align="center">55,27</entry>
<entry align="center">55,73</entry>
<entry align="center">43,24</entry>
</row>
<row>
<entry align="center">Fragmentation</entry>
<entry align="center">1,44</entry>
<entry align="center">1,02</entry>
<entry align="center">1,12</entry>
</row>
<row>
<entry align="center">Liens symboliques</entry>
<entry align="center">1,33</entry>
<entry align="center">2,51</entry>
<entry align="center">1,43</entry>
</row>
<row>
<entry align="center">Lecture</entry>
<entry align="center">40,51</entry>
<entry align="center">50,20</entry>
<entry align="center">56,34</entry>
</row>
<row>
<entry align="center">Etat des fichiers (stat)</entry>
<entry align="center">2,34</entry>
<entry align="center">1,99</entry>
<entry align="center">3,52</entry>
</row>
<row>
<entry align="center">Renommage</entry>
<entry align="center">0,99</entry>
<entry align="center">1,10</entry>
<entry align="center">1,25</entry>
</row>
<row>
<entry align="center">Destruction</entry>
<entry align="center">3,40</entry>
<entry align="center">8,99</entry>
<entry align="center">1,84</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
<para>
De ces tableaux, vous pouvez voir que ext3 est souvent plus rapide pour les
opérations de type stat, destruction et renommage de fichier, alors que
ReiserFS gagne pour les opération de création et de copie. Notez également que
les temps d'exécution de ReiserFS sont meilleurs dans le premier cas (petits
fichiers) comme prévu dans sa documentation technique.
</para>
</sect1>
<!-- ############################## -->
<sect1 id="lg68f-fr-3"><title>Conclusions</title>
<para>
Il existe actuellement deux systèmes de fichiers journalisés robustes
et fiables pour Linux (i.e. XFS et ReiserFS) qui peuvent être utilisés
sans crainte.
ext3 est toujours en version alpha et peut subir quelque
panne. J'ai eu quelques problèmes en utilisant bonnie++ sur ce
système de fichiers&nbsp;: le système a enregistré quelques erreurs de
la part de la mémoire virtuelle et a détruit l'interpréteur de
commandes interactif que j'utilisais. 
</para>
<para>
Au vu des résultats de ce banc d'essai, mon conseil est d'installer
ReiserFS à l'avenir (je le ferai sûrement).
</para>
<para>Copyright &copy; 2001, Matteo Dell'Omodarme</para>
<para>Copying license <ulink url="http://www.linuxgazette.com/copying.html">http://www.linuxgazette.com/copying.html</ulink></para>
<para>Paru dans le numéro 68 de la Linux Gazette, juillet 2001.</para>
<para>Traduction française par Jérôme Fenal <email>jerome@fenal.org</email>.</para>
</sect1>
</article>
