Cette page traite de l'optimisation des disques durs IDE. Les disques durs SCSI n'ont pas ce problème d'optimisation "à la main". Par défaut, les disques durs IDE ne sont pas toujours très bien optimisés au niveau performance sous Linux. Il faut donc connaître les caractéristiques de son disque dur et de sa carte mère pour optimiser ses disques à l'aide du programme hdparm. L'idée est de créer un script shell avec des commandes hdparm pour optimiser les disques durs et de configurer le système pour que ce script soit lancé à chaque démarrage. Nous prendrons comme exemple un ordinateur qu'il n'a qu'un seul disque dur IDE, branché en Primary Master, donc accessible par /dev/hda.
  1. Installer et utiliser hdparm Il faut d'abord installer le programme :
    apt-get install hdparm Les options les plus intéressantes de hdparm sont : Nous allons donc commencer par recueillir des informations sur le disque dur :
    hdparm -I /dev/hda
    Il faut regarder en particulier dans la section "Capabilities" ce qui concerne le DMA. Par exemple, pour mon disque-dur, j'ai :
    DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 *udma4 udma5
    L'étoile sur "udma4" signifie que mon disque dur supporte le DMA et que, si le DMA est activé, il se mettra en mode UDMA 4. Maintenant, nous allons regarder si le DMA est activé :
    hdparm -d /dev/hda
    /dev/hda:
     using_dma    =  1 (on)
    
    Ici, le DMA est activé, donc le disque dur est configuré en UDMA 4. Ceux qui ont mis l'option "Use PCI DMA by default when available" dans la configuration du noyau (menu ATA/IDE/MFM/RLL support) ont probablement le DMA activé par défault, mais ce n'est pas toujours le cas. Faisons le test de performance pour pouvoir ensuite faire des comparaisons avec les performances que l'on aura avec de meilleurs réglages. Il faut réaliser ce test à un moment où le système n'est pas entrain d'utiliser le disque dur et le refaire plusieurs fois (le premier test n'est généralement pas significatif). En root :
    hdparm -t /dev/hda Si ton disque dur support le DMA et que celui-ci n'était pas activé, alors il faut absolument le faire, tu gagnera énomément en performance. Pour cela, en root :
    hdparm -d1 /dev/hda
    Tu peux alors refaire le test de performance : chez moi, le débit du disque dur est multiplié par 7 ! Si ton disque dur n'est plus tout jeune et ne support par le DMA, alors il faut s'intéresser à l'I/O : est-il configuré en 16 bits ou en 32 bits ? Par défault, il est toujours configuré en 16 bits par le noyau. Seuls les disques durs très très vieux ne supportent sont pas 32 bits. Le fait de le passer de 16 à 32 bits peut améliorer les performances d'un facteur 2 environ. Pour voire dans quel mode il est :
    hdparm -c /dev/hda Pour le passer en mode 32 bits, tape en root :
    hdparm -c1 /dev/hda
    puis refais le test de performance pour voire l'amélioration. Si ton disque dur supporte le DMA et que tu l'as activé, cela ne fera aucune différence que l'I/O soit en 16 bits ou en 32 bits. Tu dois maintenant savoir quelle commande hdparm taper pour que ton disque dur soit optimisé. Si ton disque dur se met par défault en DMA, tu n'as rien à faire, et tu n'as donc pas besoin de lire la suite.
  2. Ecrire le script Nous allons écrire un script shell appellé hdparm.sh que l'on mettra dans le répertoire /etc/init.d avec les droits d'exécution. En root, avec ton éditeur de texte préféré, tu vas créer le fichier /etc/init.d/hdparm.sh qui contiendra simplement les commandes de réglage des disques durs avec quelques commentaires en plus. Par exemple, si tu as un disque dur qui supporte le DMA et qu'il n'est pas activé par défault, tu devras mettre :
    #! /bin/sh
    # Optimisation de mon disque dur IDE avec hdparm
    
    /sbin/hdparm -d1 /dev/hda
    
    Puis on rajoute les droits d'éxécution :
    chmod 755 /etc/init.d/hdparm.sh
  3. Lancer le script à chaque démarrage Tout d'abord, il faut comprendre la notion de "runlevel". Quand le système boote, il commence par exécuter tout ce qui est dans le répertoire /etc/rcS.d. Dans ce répertoire, on trouve des liens symboliques vers des scripts du répertoire /etc/init.d. Ces liens ont une syntaxe bien précise : Le système, au moment du boot, va exécuter les scripts du répertoire /etc/rcS.d dans l'ordre des numéros et avec comme argument "start" si le lien commence par la lettre "S" ou "stop" si le lien commence par la lettre "K". Une fois cette tâche accomplie, il entre dans le runlevel numéro 2. C'est le runlevel "normal" dans lequel le système se trouve presque tout le temps. Entrer dans le runlevel 2 signifie exécuter tous les scripts dans /etc/rc2.d comme précédemment. Il existe 3 autres runlevels intéressants : Je ne sais pas trop à quoi correspondent les runlevels 3, 4, et 5... :-) Toute la configuration des runlevels se fait dans le fichier /etc/initab que je t'invite à lire. Dans notre cas, on veut exécuter le script /etc/init.d/hdparm.sh à chaque démarrage. Il va donc falloir placer un lien symbolique dans /etc/rcS.d. Ensuite, nous voulons que le script s'exécute tout au début, juste après le réglage du clavier. On va donc lui donner le numéro "7" par exemple. Enfin, on commence le nom du lien par la lettre "S"... même si le "start" qui sera donné en argument ne sert à rien car notre script ne prend pas d'arguements ! Pour créer le lien symbolique, il suffit de taper en root :
    ln -s /etc/init.d/hdparm.sh /etc/rcS.d/S7hdparm.sh


  Précédent   Index   Suivant