HOWTO Optimiser et accélérer votre système

Un article de Gentoo Linux Wiki.

Cet article fait partie des HOWTOs.
Méthodes d'installation CD Live Noyau et matériel Portables et Notebooks Portage Système Réseaux et Services Serveur X Logiciels fréquemment utilisés Autres

Ce guide est la compilation de nombreux posts des forums Gentoo et de recherches que j'ai menées sur mes ordinateurs en essayant plusieurs programmes et options. Certaines modifications sont sûres, mais certaines autres peuvent altérer votre système. Veuillez effectuer une sauvegarde de vos données importantes, faire les tests sur des machines de test, et ensuite passer les optimisations sur les machines de production. L'opération proposée aura plus d'effet sur les vieilles machines que sur les ordinateurs récents, le système étant très rapide sur celles-ci de toute façon.


Sommaire

[modifier] Comment faire des tests sans risque

Pour tester de nouveaux ebuilds et essayer d'autres configurations, je fais les installations en environnement chrooté. Voici un guide (ou ici) pour faire de même, et tester ce HOWTO sans risque pour le système. Vous pouvez aussi utiliser VMWARE ou UML, mais le chroot est plus rapide. Une fois l'installation faite sous chroot, j'ai fait une image compressée, afin de pouvoir restaurer un système altéré et continuer avec un OS propre.

[modifier] Optimisation des scripts init

Certains processus lancés au démarrage du système ne sont pas toujours nécessaires. Il faut modifier les scripts pour ne lancer que ceux qui sont vraiment indispensables. Nous allons faire quelques modifications dans les fichiers d'initialisations importants :

Fichier : /etc/init.d/modules


Changer :

ebegin "Calculating module dependencies"
    /sbin/modules-update &>/dev/null
eend $? "Failed to calculate dependencies"

par :

if [ /etc/modules.d -nt /etc/modules.conf ]
    then
        ebegin "Calculating module dependencies"
        /sbin/modules-update &>/dev/null
        eend $? "Failed to calculate dependencies"
    else
        einfo "Module dependencies are up-to-date"
fi

En faisant ceci, modules-update ne se lancera qu'en cas de besoin lors de changements dans le système.


Fichier : /etc/init.d/localmount

Changer :

mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null

par :

mount -aFt nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null

Cela chargera toutes les partitions au même moment, et non les uns après les autres.

note : ceci ne fonctionne pas si vous avez dans votre fstab des partitions imbriquées (par exemple, dev/hda1 sur /home et /dev/hda2 sur /home/users) car le 2ème a besoin que le 1er soit déjà monté.

Fichier : /etc/init.d/bootmisc

Changer :

if [ -x /sbin/env-update.sh ]
then

    ebegin "Updating environment"
    /sbin/env-update.sh >/dev/null
    eend 0
fi

par :

if [ -x /sbin/env-update.sh ]
then
    if [ /etc/env.d -nt /etc/profile.env ]
    then
        ebegin "Updating environment"
        /sbin/env-update.sh >/dev/null
        eend 0
    else
        einfo "Environment up-to-date"
    fi
fi

env-update ne se lancera qu'en cas de réel besoin lors de changements dans le système.


Fichier : /etc/conf.d/rc

Changer :

RC_PARALLEL_STARTUP="no"

par :

RC_PARALLEL_STARTUP="yes"

Cela lancera tous les services au même moment, et non les uns après les autres.

note : un développeur pourrait-il nous éclairer sur le danger de telles modifications, et si ce n'est pas dangereux, pourquoi ce n'est pas dans portage par défaut ?


En cas d'activation du lancement simultané des service, le service "net" n'est pas prêt et peut poser des problèmes pour les services qui en dépendent. Dans ce cas :

Fichier : /etc/conf.d/rc

Changer :

RC_NET_STRICT_CHECKING="no"

par :

RC_NET_STRICT_CHECKING="yes"

Ceci permettra aux services qui dépendent de "net" de l'attendre.

[modifier] rc-update

Gérer les niveaux d'initialisation (ou runlevels) est très simple grâce à rc-update, qui facilite le travail :

Pour voir comment sont actuellements configurés les niveaux d'initialisation du démarrage :

Code : état actuel
# rc-update show

Pour ne pas démarrer un service au démarrage du système :

Code : enlever un service au démarrage
# rc-update del application runlevel

note : changer le runlevel pour boot ou default.
Si vous omettez le runlevel, ça cherchera dans tous les niveaux et enlèvera le service.

Pour ajouter une application :

Code : ajouter un service au démarrage
# rc-update add application runlevel


J'ai quelques services dans le runlevel boot et d'autres dans default. Veuillez noter que certains services ont besoin d'être lancés après d'autres, car il existe des dépendances entre les services.

Vous pouvez vérifier les dépendances en éditant le fichier /etc/init.d/service et en vérifiant les premières lignes, où elles sont déclarées. Par exemple, si vous voulez lancer sshd, vous aurez besoin d'avoir les services net lancés auparavent.

J'ai récemment créé un nouveau runlevel (battery) où j'ai ajouté tout ce que je veux voir tourner lorsque je suis hors courant secteur. Ensuite, à l'aide d'acpid j'ai configuré les runlevels pour passer en mode battery lorsqu'il n'y a plus de courant, et revenir au default au retour du courant. De cette façon, lorsque je suis hors secteur, j'utilise speedfreq, hdparm et iwconfig pour réduire la consommation du disque dur, de la carte WiFi et du processeur.

Vous pouvez vérifier le runlevel courant en utilisant la commande rc-status :

Code : rc-status
# rc-status
Runlevel: battery
acpid                                          started
alsasound                                      started
domainname                                     started
gpm                                            started
hdparm.battery                                 started
local                                          started
metalog                                        started
speedfreq.battery                              started
vixie-cron                                     started
wireless.baterry                               started

Plus d'informations sur les rc-* ici.


Si vous voulez charger X avant le reste des autres services en arrière-plan c'est possible, vous devrez d'abord éditer le fichier /etc/init.d/xdm.

Fichier : /etc/init.d/xdm

Changer :

  /sbin/telinit a &>/dev/null

par :

 
  /etc/X11/startDM.sh &>/dev/null

Puis passer xdm du runlevel default au runlevel boot à l'aide de la commande rc-update.

Code : rc-update del xdm && rc-update add xdm boot
# rc-update del xdm && rc-update add xdm boot
* xdm removed from the following runlevels: boot
* rc-update complete.
* xdm added to runlevel boot
* rc-update complete.

[modifier] cflags et ldflags

Les CFLAGS (vous pouvez les paramétrer dans /etc/make.conf) sont des paramètres qui sont passés à gcc lors de la compilation lors d'un emerge. On peut être plus ou moins téméraire avec eux :

Sur freehackers.org(en) et coyotegulch.com(en), sans oublier la documentation de leander256(fr), il y a de nombreuses informations sur les paramètres recommandés. Mes CFLAGS pour mon Pentium 4 sont les suivants :

Fichier : /etc/make.conf
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -mcpu=pentium4 -O3 -pipe -fforce-addr -falign-functions=4 -fprefetch-loop-arrays -fomit-frame-pointer"


Note : les CFLAGS ont changé un peu avec gcc 3.4.x et -mcpu est déconseillé. Vous utiliserez -mtune à sa place. D'ailleurs, pentium-m est acceptable pour les processeurs centrino. Les CFLAGS pour mon portable centrino sont les suivants :

Fichier : /etc/make.conf
CFLAGS="-O3 -march=pentium-m -mtune=pentium-m -pipe -ftracer -fomit-frame-pointer -ffast-math -momit-leaf-frame-pointers"

Comme pour les CXXFLAGS, -fvisibility-inlines-hidden a été raporté comme un bon paramètre pour accélérer les compilations C++ : -frepo a aussi été raporté comme un bon CXXFLAG, même s'il ne fonctionne pas si bien sur mon système.


Les LDFLAGS sont aussi intéressants, on en parle ici et . Les LDFLAGS sont des optimisations pour le dynamic loader (ld pour chargeur dynamique), qui ont plus ou moins le même effet que le prelink. Je les utilise déjà, et n'ai pas eu de problème lors de l'installation de nouveaux paquets :

Fichier : /etc/make.conf
LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"

Vous pouvez aussi utiliser hashstyle et --as-needed


Quelque chose de plus "stable" donnerait

Fichier : /etc/make.conf
LDFLAGS="-Wl,-O1"



Note : les LDFLAGS sont L, et non 1 (pour -W) Note : certains utilisateurs on rapporté des erreurs en utilisant des LDFLAGS. Si vous avez un problème de compilation, essayez de les supprimer.

NOTE : CFLAGS et LDFLAGS sont et seront un sujet pour lequel tout le monde a une opinion. La meilleure solution est peut-être de faire les tests soi-même. Vérifiez aussi les différents posts à ce sujet dans les forums. ACOVEA (dans les Portage) est un programme utile pour déterminer les CFLAGS que vous devriez utiliser. C'est un outil de benchmark qui effectuera plusieurs tests sur votre machine (le test standard dure environ une quinzaine d'heures) pour vous aider à sélectionner les meilleurs CFLAGS pour votre machine. Voir ce sujet concernant les scripts ACOVEA et leurs résultats.

NOTE : L'utilisation de certains flag peut modifier le comportement normal d'un programme. Si vous utilisez des flags trop agressifs, vous pouvez rencontrer des problèmes pour faire des rapports de bug corrects.

[modifier] Utiliser hdparm

hdparm est une application importante. Elle permet de configurer les paramètres du disque dur, afin d'en tirer les meilleurs performances :

Code : Installation de hdparm
# emerge hdparm
# rc-update add hdparm default

Puis, lire /etc/conf.d/hdparm

Voir la configuration actuelle :

Code : configuration actuelle
# hdparm -i /dev/hda

Tester son disque dur :

Code : test
# hdparm -Tt /dev/hda


Sur mon ordinateur, j'ai modifié /etc/conf.d/hdparm pour avoir le meilleur de mon disque :

Fichier : /etc/conf.d/hdparm
hda_args="-d1 -X69 -c1"
cdrom0_args="-d1"

Si vous voulez plus d'informations, man hdparm est votre ami.

Jetez aussi un oeil à ce petit tutoriel.

[modifier] Faut il prelinker ?

Prelink est une application puissante, permettant de linker les bibliothèques d'un binaire avant de l'utiliser. Ainsi, au lieu de vérifier quelles bibliothèques seront utilisées, prelink va modifier le binaire en ajoutant une petite description des bibliothèques nécessaires pour tourner. Cela évite de chercher les bibliothèques partagées à chaque fois que l'exécutable est lancé, donc l'accélère.


[modifier] Important

A chaque fois que vous mettez à jour les bibliothèques nécessaires aux binaires (par exemple glibc), vous devez relancer prelink sur le système...

C'est une petite optimisation qui sera appréciable lors du lancement de grosses applications telles que KDE (D'ailleurs, si vous prélinkez votre système, KDE ne devra plus lancer kdeinit, donc ça tournera plus vite). Les petits binaires sont rapides, donc peu sensibles au prélink.

le probleme c'est que en cas d'oubli ou meme de rupture du prelink c'est le crash.

Heureusement, portage s'occupe tres proprement d'emerger chaque bibliothèque à la bonne place.

[modifier] Besoins

C'est un plus de compiler les binaires avec binutils-2.13.90.0.xx et gcc-3.2 ou plus, et d'avoir installé glibc-2.3.1-r2 ou plus. La taille des binaires va augmenter avec prelink, et pour lancer le processus, vous aurez besoin d'assez d'espace sur le disque dur.

[modifier] Méthode

Code : Installation de prelink
# emerge prelink

Trouver le fichier de configuration /etc/prelink.conf

Code : Exécution de prelink
# prelink -afmR

Ceci est l'utilisation courante de prelink, qui va prelinker TOUS les exécutables, après avoir vérifié s'ils l'étaient déjà.

Il est possible que vous ayiez des erreurs lors du lancement, car certains binaires ne peuvent être prélinkés (ceux compressés avec upx, par exemple)

Code : Suprimer le prelink
# prelink -ua

Plus d'infos ici, et/ou man prelink.

[modifier] Gestion du Swap

Dans cette section seront mentionnés quelques détails pouvant aider.
Tout d'abord, si vous avez deux disques durs, il est avantageux de mettre la partition d'échange sur le second disque (en ayant la partition racine sur le premier), car cela améliorera les temps de lecture/écriture.

Il est aussi possible de créer plusieurs partitions de swap, par exemple une sur chaque disque dur rapide (temps de latence bas), et de leur assigner la même priorité pour répartir la charge sur l'ensemble de ces partitions. On définit la priorité avec l'option de montage pri dans le fichier fstab, d'autres possibilités sont envisageables en exploitant cette fonctionnalité.

Fichier : /etc/fstab

Exemple :

/dev/sda2       none            swap            defaults,pri=0                          0       0
/dev/hda2       none            swap            defaults,pri=0                          0       0


Il ne faut PAS utiliser un fichier comme fichier d'échange. J'ai essayé sur un vieil ordinateur : suppression de la partition d'échange, création d'un fichier d'échange de 256 Mo, et modification de fstab. Cela s'avère plus lent, car il faut trouver le fichier, l'ouvrir, trouver où écrire, écrire, sauver et fermer le fichier. Avec une partition, ce procédé est bien plus rapide.

Un concept à connaître est le swappiness (noyau 2.6 et +). Quand une application a besoin de mémoire et que la RAM est entièrement utilisée, il y a deux options : ou la RAM se vide un peu, ou la partition d'échange est utilisée (mais c'est plus lent que la RAM). Avec les nouveaux noyaux, il est possible de définir une variable pour choisir quelle option va être utilisée : purge de la RAM ou utilisation de la partition d'échange ?

Fichier : /etc/sysctl.conf
vm.swappiness = 40

Cette variable va de 0 à 100. Plus la valeur est faible, plus le noyau purgera la ram. La valeur par défaut est de 60. Je l'ai mise à 25 sur mon ordinateur portable, afin de réduire les accès disque. Vous pouvez utiliser la commande free -m pour voir les statistiques de l'utilisation mémoire.

[modifier] Ccache

ccache est une application incluse dans Portage et activée par défaut lors de l'emerge, qui agit comme un cache pour le compilateur. Avec ce petit programme, vous pourrez compiler bien plus rapidement que sans, spécialement pour ceux qui ont un gros make (vous pourriez croire qu'utiliser un cache lors de la compilation est sans intérêt, mais cela accélère des instructions comme le make clean)

Installez ccache et réglez la taille du cache par défaut (pour mettre un cache à 2Go, utilisez la commande ccache -M 2G), et ccache sera activé. Vous pouvez le vérifier avec la commande :

Code : activation de ccache ?
# emerge info | grep ccache

ccache version 2.3 [enabled]

Vous pouvez vérifier les statistiques de ccache grâce à :

Code : Statistiques de ccache
# ccache -s

Voir le TIP sur ccache : ici

[modifier] Distcc

distcc est une application qui va vous simplifier la vie si vous installez Gentoo sur plusieurs ordinateurs en réseau, ou si vous avez un ordinateur très lent mais un autre plus rapide. distcc peut être combiné avec ccache, pour diminuer les temps de compilation.
distcc permet de répartir la compilation sur plusieurs ordinateurs d'un même réseau, et d'utiliser ainsi les ressources de tous les ordinateurs sur lesquels il est installé.

Plus d'informations ici.



[modifier] Les paramètres USE

Les paramètres USE sont un outil utile fourni par Gentoo pour configurer les paquets tels que nous les voulons.

Par exemple, imaginons que nous voulions compiler Apache :

Code : Vérification des paramètres USE pour apache
# emerge -pv apache

[ebuild N ] net-www/apache-2.0.50 -debug -doc -ipv6 +ssl 6,197 kB

Les options (+/-) qui figurent après le nom du programme que nous allons installer (flag -v) sont les variables USE qu'il est possible d'utiliser pour configurer le paquet. Si par exemple nous ne voulions pas qu'apache utilise SSL, nous ferions ceci :

Code : apache sans SSL
# USE="-ssl" emerge -pv apache

[ebuild N ] net-www/apache-2.0.50 -debug -doc -ipv6 -ssl 6,197 kB


Nous pouvons maintenant voir que SSL est maintenant désactivé, et apache sera compilé sans le support SSL.

Dans cet exemple, nous modifions les paramètres USE directement dans l'invite de commande, mais ce n'est pas la façon propre de faire si nous voulons que le système se souvienne des paramètres USE pour chaque compilation de ce paquet. Nous pouvons régler les paramètres USE dans le fichier /etc/make.conf (tout l'environnement), ou utiliser /etc/portage/package.use (pour gérer les paquets individuellement).

Il en va de même pour le paramètre ~x86 (pour dire à portage d'utiliser la dernière version disponible pour chaque paquet). Il n'est pas recommandé de régler le paramètre dans l'invite de commande, mais plutôt dans le fichier /etc/make.conf, ou plutôt le régler individuellement :

Code : Utiliser la version instable de nano
# echo "app-editors/nano ~x86" >> /etc/portage/package.keywords


Il est important de jeter un oeil aux paramètres USE des paquets avant de les installer, afin de désactiver les dépendances dont on n'a pas besoin.
Par exemple, si nous voulons emerger le client IRC pour console BitchX, Portage installera xmms, X et d'autres dépendances qui nous seront bien inutiles. Mettre -xmms et -X dans /etc/portage/package.use va permettre d'installer BitchX sans le support xmms et X.

On peut trouver une description des paramètres USE dans le fichier /usr/portage/profiles/use.desc.

[modifier] Modifier les ebuilds et insérer des paquets

Gardez toujours une sauvegarde de vos fichiers avant de les modifier (Notez qu'un emerge sync réparera tout si vous ratez un ebuild).

[modifier] Qu'est-ce qu'injecter un paquet, et à quoi ça sert ?

Souvenez vous ce moment ou vous avez essayé d'installer un paquet X, et où Portage vous a demandé d'installer Y. Par exemple, nombre d'utilisateurs génèrent le noyau à la main plutôt que d'utiliser Portage pour le faire (gentoo-sources, gentoo-dev-sources, vanilla-sources, et autres). Quand vous installez des paquets qui ont besoin des sources du noyau (comme alsa, ou ipw2X00) installées, Portage va tenter d'installer des kernel-sources. Pourquoi faire ceci si vous avez déjà votre noyau dans /usr/src ?

Note : l'injection est maintenant déconseillée, il faut maintenant utiliser package.provided et virtuals comme ci-dessous :


[modifier] utiliser package.provided

package.provided dit à Portage qu'un paquet est installé (même s'il ne l'est pas). Vous pouvez utiliser ce fichier pour déclarer à Portage tous les paquets que vous avez installé à la main.

Code : utilisation de package.provided
echo "sys-kernel/ck-sources" >> /etc/portage/profile/package.provided

[modifier] utiliser virtuals

package.provided n'affecte pas les virtuals, car les virtuals sont utilisés pour dire à Portage quels paquets installer pour une catégorie donnée.
Par exemple, pour dire à Portage que vous installez x11 avec xorg et non pas avec xfree (cet exemple n'est pas parfait, mais il aide à comprendre) :

Code : utilisation des virtuals
echo "virtual/x11 x11-base/xorg-x11" >> /etc/portage/profile/virtuals


Plus d'informations à ce sujet et sur la gestion de /etc/portage : man portage.



[modifier] Halt vs Suspend

Vous ne vous êtes jamais demandé pourquoi éteindre l'ordinateur, alors qu'il est possible de le mettre en mémoire ou sur disque ? Si vous le mettez en mémoire, ça a l'inconvénient de nécessiter une alimentation pour garder le système en mémoire. Mais en le mettant sur disque, vous éteignez l'ordinateur tout en conservant votre session.

En faisant cela, on évite de démarrer tous les services à chaque démarrage (ce n'est pas une sortie de veille, mais c'est bien plus rapide qu'un démarrage complet). J'ai utilisé swsusp2 sur mon ordinateur portable, et ça fonctionne bien. Mais il faut patcher les sources du noyau. Plus d'infos ici. Essayez, vous ne regretterez pas.


[modifier] Xdelta - Deltup

Dans ce sujet , le sujet de Deltup est abordé, car une nouvelle version en est disponible. À chaque fois que Portage doit télécharger un fichier, deltup regardera si une version précédente du fichier (/usr/portage/distfiles) est présente, ne téléchargera que la différence entre les deux fichiers, et créera le nouveau à la volée.

Cela peut être important pour les utilisateurs de petites connexions qui veulent maintenir leur /usr/portage/distfiles à jour pour ne télécharger que les patches quand de nouvelles versions sont publiées, car cela peut réduire de beaucoup la quantité de données à télécharger lors de l'emerge de nouvelles versions des paquets installés.

[modifier] NPTL : Native POSIX Thread Library

Cette librairie, connue sous le nom de NPTL, peut améliorer votre système, car elle est jusqu'à quatre fois plus rapide que LinuxThreads pour créer de nouveaux threads. Vous *devriez* utiliser les headers linux 2.6, et une version récente de glibc et gcc (~x86 : version 3.x). Pour utiliser NPTL, vous avez juste à recompiler glibc avec le paramètre USE nptl

Plus d'informations ici.


[modifier] GCC

GCC est très important, surtout dans une distribution telle que Gentoo, où les utilisateurs essaient d'optimiser leur système en compilant eux-même les paquets qu'ils installent. En utilisant une version à jour, vous aurez un code plus optimisé (depuis la version 3.4.X, vous pouvez utiliser -march=pentium-m pour les processeurs Centrino)

Pour installer la dernière version de GCC, emergez simplement gcc avec ~x86 activé (modifiez votre profil en conséquence) :

Code : mise à jour de gcc
# echo "sys-devel/gcc ~x86" >> /etc/portage/package.keywords
# emerge -u gcc


[modifier] Systèmes de fichiers[sécurité vs performances]

Après avoir essayé plusieurs systèmes de fichiers, j'utilise reiserfs4, car c'est le plus rapide. Je pense qu'il est très utile d'utiliser un système de fichiers rapide, mais il faut faire des sauvegardes des données au cas où des fichiers soient corrompus.
Notez qu'après avoir utilisé ext2, ext3, reiserfs, xfs et d'autres systèmes de fichiers chiffrés, je n'ai jamais eu de données corrompues. Ne pas oublier de compiler le noyau avec le support du système de fichiers correspondant,

Pour convertir votre partition racine en reiser4, vous aurez besoin d'un LiveCD avec le support de reiser4 comme celui-ci.

NOTE : Certaines personnes ne trouvent pas le sous-menu Reiser4 dans l'arbre Filesystems du kernel. Assurez-vous auparavent d'avoir désactivé l'option use 4kb for kernel stacks au lieu de 8Kb dans le sous-menu kernel hacking.

[modifier] ext3

Il existe quelques optimisations possibles pour ext3, jouant sur les performances et la fiabilité. Par sécurité, ne les utilisez pas si vous ne comprenez pas ce que vous faites. Il est préférable d'avoir un live cd pour réparer en cas de mauvaise modification et de problème au montage des partitions au démarrage du système.

  • L'option dir_index, elle permet d'utiliser des "B-Trees" avec ext3 pour améliorer les temps d'accès aux fichiers dans les grands répertoires. On peut l'activer au moment du formatage de la partition avec l'option -O dir_index sur mke2fs ou avec tune2fs.
Code : Activation de dir_index

Avec mke2fs (attention, formatage de la partition /dev/hdXY) :

# mke2fs /dev/hdXY -O dir_index

Avec tune2fs, et e2fsck pour appliquer (sur une partition non montée) :

# tune2fs -O dir_index /dev/hdXY
# e2fsck -D /dev/hdXY


  • Par défaut, un certain pourcentage de l'espace libre d'une partition est réservée à l'utilisateur root, et il est impossible en tant qu'utilisateur normal d'occuper cet espace. Il est cependant inutile de réserver 5% d'une partition /home de 200Go à l'utilisateur root. Vous pouvez réduire ce pourcentage à 1% (par sécurité) ou à celui de votre choix,
Code : Réglage de l'espace réservé à root
# tune2fs -m 1 /dev/hdXY


  • ext3 propose plusieurs mode de journalisation :
    • writeback : les métadonnées sont écrites dans le journal, mais l'ordre d'écriture effective des données et métadonnée sur le disque n'est pas fixé (mode de fonctionnement de reiserfs, xfs, jfs).
    • ordered : mode par défaut, les métadonnées sont écrites dans le journal, les données sont ensuite écrites effectivement sur le disque suivies des métadonnées.
    • journal : les métadonnées ET les données sont journalisées.

Vous pouvez obtenir plus d'information à ce sujet sur cet article de linux-france.org.

Le mode journal est plus adapté si vous recherchez avant tout la fiabilité. Les modes writeback et ordered conviennent mieux pour une utilisation "Desktop". Le mode writeback peut être plus rapide que le mode ordered dans certains cas, mais est aussi moins fiable et peut créer des corruptions de fichier en cas de redémarrage sans démontage propre des partitions. Le mieux est d'essayer les différents modes pour voir lequel vous satisfait le plus par rapport à votre utilisation d'ext3.

Pour utilisez le mode writeback, vous devez modifier le fichier fstab pour passer l'option data=writeback au montage de votre partition ext3 :

Fichier : /etc/fstab
/dev/hdXY       /home           ext3            defaults,data=writeback              0       0

Il faut passer le paramètre rootflags=data=writeback au noyau au démarrage pour utiliser le mode writeback sur le système de fichier racine /. Avec grub, modifiez le fichier /boot/grub/grub.conf, et ajoutez ce paramètre sur la ligne kernel du noyau que vous utilisez.

Fichier : /boot/grub/grub.conf

Exemple :

title           Gentoo Linux 2.6.18-ck1-r2
root            (hd2,2)
kernel          /boot/kernel-genkernel-x86_64-2.6.18-ck1-r2 root=/dev/ram0 init=/linuxrc ramdisk=4096 real_root=/dev/sda3 udev vga=791 rootflags=data=writeback
initrd          /boot/initramfs-genkernel-x86_64-2.6.18-ck1-r2
savedefault
boot

Il peut être nécessaire de spécifier le mode de journalisation avec tune2fs

Code : Activation du mode de journalisation writeback
# tune2fs -o journal_data_writeback /dev/hdXY


Dans d'autres circonstances, le mode journal, en plus d'être fiable, peut s'avérer plus rapide comme dans ce test d'IBM. Vous pouvez l'activer en ajoutant data=journal comme option de montage dans /etc/fstab, et en passant le paramètre rootflags=data=journal au noyau (pour utiliser ce mode sur votre système de fichier racine). Il est aussi possible d'utiliser cette commande pour utilise le mode journal.

Code : Activation du mode de journalisation journal
# tune2fs -O has_journal -o journal_data /dev/hdXY


  • noatime,nodiratime : ces deux options peuvent être indiquées dans le fichier /etc/fstab pour chaque partition ext3. Elles permettent de ne pas mettre à jour la date de dernier accès à un fichier ou un répertoire automatiquement et régulièrement, mais d'attendre un accès en écriture sur ce fichier pour effectuer ces opérations. Ces options sont intéressantes pour faire des économies d'énergie.
Fichier : /etc/fstab

Exemple :

/dev/hda3       /mnt/hda3       ext3            noatime,nodiratime,defaults              0       0


  • Shake, il s'agit d'un utilitaire de défragmentation qui supportent ext3. Un ebuild et des informations sur son utilisation sont disponibles sur son site internet (en anglais).

[modifier] I/O et gestionnaires de tâches

[modifier] Scripts utiles

Il y a quelques scripts utiles sur les forums et dans l'arbre de Portage pour gérer votre système :

[modifier] eix (Emerge IndeX)

Celui-ci est inclus dans l'arbre de Portage (emerge eix), et sert à faire des recherches dans la base de données de Portage. Ce script est plus rapide que emerge -sS. Notez qu'après chaque emerge sync, il faut mettre à jour la base de données eix en lançant la commande update-eix, ou bien vous pouvez utiliser esync pour mettre à jour l'arbre de Portage (esync fera une synchronisation, et montrera alors une liste des différences d'avec l'ancienne synchronisation)

[modifier] portagedb

Même concept qu'esearch, mais plus rapide (et plus rapide à mettre à jour la base Portage). Le projet est encore jeune mais déjà bon. Plus d'informations ici.

[modifier] Cruft

Ce script génerera une liste de tous les fichiers du système qui peuvent être effacés car ils n'appartiennent à aucun paquet installé. Veuillez faire attention à ce que vous faites car il peut générer des faux positifs.

Code : utilisation
# ./cruft > cruft.log

Vous pouvez alors vérifier la liste et en effacer les fichiers que vous voulez garder. Ensuite, lancez cette commande pour vous débarasser des fichiers de trop :

Code : suppression des fichiers inutiles
# cat cruft.log | xargs rm -rf


Vous pouvez aussi juste jeter un oeil à la liste et supprimer les fichiers vous-même

Plus d'informations sur ce sujet.

[modifier] Stale

Script intéressant qui vous aidera à maintenir /usr/portage/distfiles dans une taille optimale. Ce script cherchera (et supprimera, avec l'option --nopretend) dans ce répertoire les fichiers obsolètes. Par exemple, si vous avez libtool-1.3.5.tar.gz et libtool-1.5.2.tar.gz, il supprimera libtool-1.3.5.tar.gz.

Ce script a des difficultés avec des fichiers comme font-arial-iso-8859-1 et font-arial-iso-8859-2, où la numération ne correspond pas à la version du paquet. (de même avec gtk et glib dans leur version 1.X et 2.X)


Plus d'informations ici.

[modifier] Porthole

Application faite en python (+gtk) permettant de configurer visuellement Portage, et facilitant la configuration de paquets et d'emerges. Déjà présent dans portage, il suffit de faire emerge porthole pour l'installer.


[modifier] genlop

Vous permettra d'afficher des statistiques sur les temps de compilation, sur les cflags utilisés pour la compilation ainsi que l'historique des versions installées emerge genlop pour l'installer. Vous pouvez aussi l'exécuter depuis Porthole.

[modifier] guitoo

Un autre gestionnaire graphique de portage, fait en Qt (pour les amoureux de KDE). Jeune projet, mais qui fonctionne bien.

Plus d'infos ici.

Vous trouverez aussi d'autres scripts et programmes utiles liés à portage dans ce sujet.

Guitoo n'existe plus ou à changer de nom, il a laissé place au projet suivant : Kuroo qui a vraiment l'air bien plus évolué. Projet à suivre...


MAJ : 01/11/2005
Source de la traduction : http://forums.gentoo.org/viewtopic.php?t=246737
Source de l'article initial : http://forums.gentoo.org/viewtopic.php?t=231170
Traducteur : Saigneur
Auteur initial : mvila
Quelques modifications (en Français) par Monstros et Scullder