<?xml version="1.0" encoding="utf-8"?> <sect1 id="creatingandusing"> <title>Création et utilisation des systèmes de fichiers compressés</title> <sect2 id="creating"> <title>Étapes principales</title> <para> Pour créer un système de fichiers compressés à partir d'un répertoire unique (disons, <filename>/répertoire/quelconque</filename>), et de le sortir dans un fichier ordinaire (produisant ainsi une image du système de fichiers), vous n'avez qu'à dire la phrase magique : </para> <programlisting> bash# mksquashfs /répertoire/quelconque dir.sqsh </programlisting> <para> <command>mksquashfs</command> exécutera la compression et affichera le nombre d'inodes et la taille des données écrits qui en résultent, ainsi que le taux de compression moyen. Maintenant vous avez l'image de votre répertoire <filename>/répertoire/quelconque</filename> dans le fichier <filename>dir.sqsh</filename>. Vous pouvez maintenant utiliser la commande <command>mount</command> pour la monter en utilisant un dispositif local : </para> <programlisting> bash# mkdir /mnt/dir bash# mount dir.sqsh /mnt/dir -t squashfs -o loop </programlisting> <para> Pour vérifier si on obtient bien le résultat escompté : </para> <programlisting> bash# ls /mnt/dir </programlisting> <para> Si vous voulez faire sortir directement le système de fichiers dans un périphérique (disons, votre lecteur de disquette <filename>/dev/fd0</filename>) : </para> <programlisting> bash# mksquashfs /répertoire/quelconque /dev/fd0 </programlisting> <para> Ensuite il n'y a qu'à monter le périphérique avec la commande <command>mount</command> : </para> <programlisting> bash# mount /dev/fd0 /mnt/floppy -t squashfs </programlisting> <para> Puis vérifiez si c'est bon : </para> <programlisting> bash# ls /mnt/floppy </programlisting> </sect2> <sect2 id="squashing"> <title>Compression des systèmes de fichiers</title> <para> Les opérations décrites ici correspondent à la plupart des cas où le système de fichiers en lecture seule peut être utilisé, que vous le vouliez sur un périphérique de bloc ou dans un fichier. Il pourra s'agir tout aussi bien des immenses archives FTP/HTTP qui ne changent pas souvent, que l'obtention d'une partition compressée <filename>/usr</filename> et toute chose du même genre. </para> <sect3 id="squashing-ex1"> <title>Exemple 1</title> <para> Supposons que vous ayez un répertoire <filename>/var/arch</filename> avec beaucoup de fichiers et que vous voulez le transformer en un système de fichiers compressés et le garder sur votre partition racine en tant que fichier (il sera une image du système de fichiers que vous monterez en local). Voici les opérations à exécuter </para> <para> Compressez le répertoire, puis montez le en local pour le tester : </para> <programlisting> bash# mksquashfs /var/arch /var/arch.sqsh bash# mkdir /mnt/tmp bash# mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop bash# ls /mnt/tmp </programlisting> <para> Si tout marche comme prévu, faites monter ce système de fichiers automatiquement au moment du démarrage en ajoutant cette ligne à votre <filename>/etc/fstab</filename> : </para> <programlisting> /var/arch.sqsh /var/arch squashfs ro,defaults 0 0 </programlisting> <para> Démontez le système de fichiers du point de montage temporaire, et montez en utilisant cette entrée fstab : </para> <programlisting> bash# umount /mnt/tmp bash# mount /var/arch </programlisting> <para> Maintenant il n'y a plus qu'à vérifier que tout fonctionne bien : </para> <programlisting> bash# ls /var/arch </programlisting> </sect3> <sect3 id="squashing-ex2"> <title>Exemple 2</title> <para> Disons que vous avez deux partitions sur le disque dur, <filename>/dev/hda6</filename> (qui est vide) et <filename>/dev/hda7</filename> (elle est plus grosse que <filename>/dev/hda6</filename>, est montée sur <filename>/var/arch</filename>, contient des données et est pleine). Maintenant, disons que vous voulez compresser le système de fichiers <filename>/dev/hda7</filename> et le déplacer dans <filename>/dev/hda6</filename>, puis utiliser <filename>/dev/hda7</filename> pour d'autres choses. Nous supposerons que vous avez la ligne suivante dans <filename>/etc/fstab</filename> (<command>reiserfs</command> est juste un exemple de système de fichiers utilisé sur <filename>/dev/hda7</filename>) : </para> <programlisting> /dev/hda7 /var/arch reiserfs defaults 0 0 </programlisting> <para> De la même manière que dans l'exemple précédent : </para> <programlisting> bash# mksquashfs /var/arch /var/arch.sqsh bash# mkdir /mnt/tmp bash# mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop bash# ls /mnt/tmp </programlisting> <para> Si tout s'est bien passé, démontez <filename>/dev/hda7</filename> (si besoin est) et utilisez <command>dd</command> pour copier <filename>/var/arch.sqsh</filename> dans <filename>/dev/hda6</filename> : </para> <programlisting> bash# umount /dev/hda7 bash# dd if=/var/arch.sqsh of=/dev/hda6 </programlisting> <para> Maintenant remplacez la ligne <filename>/dev/hda7</filename> dans <filename>/etc/fstab</filename> par : </para> <programlisting> /dev/hda6 /var/arch squashfs ro,defaults 0 0 </programlisting> <para> Montez le nouveau système de fichiers et vérifiez si tout s'est bien passé : </para> <programlisting> bash# mount /var/arch bash# ls /var/arch </programlisting> <para> N'oubliez pas d'effacer l'image du système de fichiers dont on n'a plus besoin : </para> <programlisting> bash# rm /var/arch.sqsh </programlisting> </sect3> </sect2> <sect2 id="tinyemb"> <title>Création de micro-systèmes incorporés/minuscules</title> <para> En disant "incorporés/minuscules", je veux parler de systèmes Linux construits pour démarrer à partir de disquettes, de disque IDE/USB à mémoire flash, de CD-ROM iso-9660, de petits disques durs et autres. Que vous vouliez avoir votre système de fichiers racine en entier sur un support unique (une seule partition, une seule disquette), ou avoir un système modulaire (plusieurs disquettes ou partitions de disques), la procédure est presque identique. La création des systèmes Linux en question n'entre pas dans le cadre de ce Guide Pratique ; il existe des guides pratiques et autres qui y sont consacrés (comme le <emphasis>Bootdisk HOWTO</emphasis> et <emphasis>Linux From Scratch</emphasis> ; visitez <ulink url="http://www.tldp.org"/> pour récupérer ces documents). </para> <sect3 id="sqflash"> <title> Systèmes de fichiers compressés sur disquette/mémoire flash/disques durs </title> <para> Pour utiliser SquashFS pour la création de systèmes Linux sur des petits disques, vous n'avez juste qu'à suivre les étapes habituelles de création d'un système minimal, en exécutant les opérations suivantes au moment où c'est nécessaire : </para> <orderedlist> <listitem><para> Quand vous déployez un noyau sur votre système, vérifiez que vous avez bien activer le support de SquashFS afin qu'il puisse monter les systèmes de fichiers compressés. </para></listitem> <listitem><para> Utilisez <command>mksquashfs</command> pour la création des disques RAM initiaux en lecture seule et/ou du répertoire racine et/ou des autres systèmes de fichiers. </para></listitem> <listitem><para> N'oubliez pas de paramétrer les types de système de fichiers à <filename>squashfs</filename> dans <filename>/etc/fstab</filename> ou les scripts de démarrage de votre système pour monter les systèmes de fichiers compressés. </para></listitem> </orderedlist> <para> <emphasis>Exemple avec la disquette</emphasis>. Disons que vous avez l'arborescence de votre système de disquettes dans <filename>/home/user/floppylinux</filename> et que vous voulez placer le système de fichiers racine sur l'une d'entre elles et <filename>/usr</filename> sur une autre. Voici ce que vous devrez faire : </para> <programlisting> bash# cd /home/user bash# mksquashfs floppylinux root.sqsh -e usr bash# mksquashfs floppylinux/usr usr.sqsh </programlisting> <note><para> Vous voyez ici comment nous utilisons l'option <command>-e</command> pour exclure le répertoire <filename>/usr</filename> pour l'image des systèmes de fichiers racine. </para></note> <note><para> N'oubliez pas de spécifiez <filename>squashfs</filename> dans le <filename>/etc/fstab</filename> de votre disque racine ou dans les scripts de démarrage lorsque vous montez le système de fichiers <filename>/usr</filename>. </para></note> <para> Insérez un disque racine dans votre lecteur de disquettes 3,5" (je suppose que vous avez lilo ou grub dessus et que, donc, un système de fichiers existe sur cette disquette, et le système de fichier racine sera sous le répertoire <filename>/boot</filename> de ce système de fichiers) : </para> <programlisting> bash# mount /mnt/floppy bash# cp root.sqsh /mnt/floppy/boot </programlisting> <para> Quand c'est fait, démontez la disquette racine, remplacez la disquette par un disque <filename>/usr</filename> et utilisez <command>dd</command> pour transférer le système de fichiers <filename>usr</filename> : </para> <programlisting> bash# dd if=usr.sqsh of=/dev/fd0 </programlisting> </sect3> <sect3 id="sqfloppy"> <title>Systèmes de fichiers compressés sur CD-ROM</title> <para> Avec SquashFS, on peut compresser de gros systèmes de fichiers qu'on pourra mettre sur des CD "Live" (par exemple). </para> <orderedlist> <listitem><para> Activez SquashFS dans le noyau Linux du système cible. </para></listitem> <listitem><para> Créez un système de fichiers compressés racine. </para></listitem> <listitem><para> Modifier le <filename>/etc/fstab</filename> ou les scripts de démarrage du système cible pour monter le système de fichiers compressés quand vous en aurez besoin. </para></listitem> </orderedlist> <para> Si vous créez un système de fichiers racine à partir d'un système de fichiers Linux qui tourne, utilisez l'option <command>-e</command> pour que <command>mksquashfs</command> exclue tous les pseudos systèmes de fichiers tels que <filename>/proc</filename>, <filename>/sys</filename> (sur les noyaux Linux après 2.5.x) et <filename>/dev</filename> (quand vous utilisez DevFS). En outre, n'oubliez pas d'ajouter l'image du système de fichiers elle-même qui est créée avec <command>mksquashfs</command> (Je pense que vous comprenez les raisons de ces exclusions). </para> </sect3> </sect2> </sect1>