Pour créer un système de fichiers compressés à partir d'un répertoire
unique (disons, /répertoire/quelconque
), 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 :
bash# mksquashfs /répertoire/quelconque dir.sqsh
mksquashfs 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 /répertoire/quelconque
dans le fichier
dir.sqsh
. Vous pouvez maintenant utiliser la
commande mount pour la monter en utilisant un
dispositif local :
bash# mkdir /mnt/dir bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Pour vérifier si on obtient bien le résultat escompté :
bash# ls /mnt/dir
Si vous voulez faire sortir directement le système de fichiers dans un
périphérique (disons, votre lecteur de disquette
/dev/fd0
) :
bash# mksquashfs /répertoire/quelconque /dev/fd0
Ensuite il n'y a qu'à monter le périphérique avec la commande mount :
bash# mount /dev/fd0 /mnt/floppy -t squashfs
Puis vérifiez si c'est bon :
bash# ls /mnt/floppy
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
/usr
et toute chose du même genre.
Supposons que vous ayez un répertoire /var/arch
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
Compressez le répertoire, puis montez le en local pour le tester :
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
Si tout marche comme prévu, faites monter ce système de fichiers
automatiquement au moment du démarrage en ajoutant cette ligne à votre
/etc/fstab
:
/var/arch.sqsh /var/arch squashfs ro,defaults 0 0
Démontez le système de fichiers du point de montage temporaire, et montez en utilisant cette entrée fstab :
bash# umount /mnt/tmp bash# mount /var/arch
Maintenant il n'y a plus qu'à vérifier que tout fonctionne bien :
bash# ls /var/arch
Disons que vous avez deux partitions sur le disque dur,
/dev/hda6
(qui est vide) et
/dev/hda7
(elle est plus grosse que
/dev/hda6
, est montée sur
/var/arch
, contient des données et est pleine).
Maintenant, disons que vous voulez compresser le système de fichiers
/dev/hda7
et le déplacer dans
/dev/hda6
, puis utiliser
/dev/hda7
pour d'autres choses. Nous supposerons
que vous avez la ligne suivante dans /etc/fstab
(reiserfs est juste un exemple de système de fichiers
utilisé sur /dev/hda7
) :
/dev/hda7 /var/arch reiserfs defaults 0 0
De la même manière que dans l'exemple précédent :
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
Si tout s'est bien passé, démontez /dev/hda7
(si
besoin est) et utilisez dd pour copier
/var/arch.sqsh
dans
/dev/hda6
:
bash# umount /dev/hda7 bash# dd if=/var/arch.sqsh of=/dev/hda6
Maintenant remplacez la ligne /dev/hda7
dans
/etc/fstab
par :
/dev/hda6 /var/arch squashfs ro,defaults 0 0
Montez le nouveau système de fichiers et vérifiez si tout s'est bien passé :
bash# mount /var/arch bash# ls /var/arch
N'oubliez pas d'effacer l'image du système de fichiers dont on n'a plus besoin :
bash# rm /var/arch.sqsh
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 Bootdisk HOWTO et Linux From Scratch ; visitez http://www.tldp.org pour récupérer ces documents).
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 :
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.
Utilisez mksquashfs 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.
N'oubliez pas de paramétrer les types de système de fichiers à
squashfs
dans /etc/fstab
ou
les scripts de démarrage de votre système pour monter les systèmes de
fichiers compressés.
Exemple avec la disquette. Disons que vous avez
l'arborescence de votre système de disquettes dans
/home/user/floppylinux
et que vous voulez placer le
système de fichiers racine sur l'une d'entre elles et
/usr
sur une autre. Voici ce que vous devrez
faire :
bash# cd /home/user bash# mksquashfs floppylinux root.sqsh -e usr bash# mksquashfs floppylinux/usr usr.sqsh
![]() | Note |
---|---|
Vous voyez ici comment nous utilisons l'option -e
pour exclure le répertoire |
![]() | Note |
---|---|
N'oubliez pas de spécifiez |
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 /boot
de ce système de
fichiers) :
bash# mount /mnt/floppy bash# cp root.sqsh /mnt/floppy/boot
Quand c'est fait, démontez la disquette racine, remplacez la disquette par
un disque /usr
et utilisez dd
pour transférer le système de fichiers usr
:
bash# dd if=usr.sqsh of=/dev/fd0
Avec SquashFS, on peut compresser de gros systèmes de fichiers qu'on pourra mettre sur des CD "Live" (par exemple).
Activez SquashFS dans le noyau Linux du système cible.
Créez un système de fichiers compressés racine.
Modifier le /etc/fstab
ou les scripts de démarrage
du système cible pour monter le système de fichiers compressés quand
vous en aurez besoin.
Si vous créez un système de fichiers racine à partir d'un système de
fichiers Linux qui tourne, utilisez l'option -e pour
que mksquashfs exclue tous les pseudos systèmes de
fichiers tels que /proc
, /sys
(sur les noyaux Linux après 2.5.x) et /dev
(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
mksquashfs (Je pense que vous comprenez les raisons
de ces exclusions).