diff --git a/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml index 18b558f5b7..b90e5b9a7f 100644 --- a/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml +++ b/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml @@ -1,1459 +1,1922 @@ Chern Lee Ecrit par Mike Smith Basé sur un guide rédigé par Matt Dillon Egalement basé sur la page de manuel tuning(7) écrite par Configuration et optimisation &trans.a.fonvieille; Synopsis configuration/optimisation du système La configuration correcte d'un système peut sensiblement réduire la quantité de travail impliquée dans la maintenance et la mise à jour. Ce chapitre décrit certains des aspects de la configuration des systèmes FreeBSD. Ce chapitre décrira également certains paramètres qui peuvent être modifiés pour configurer un système FreeBSD pour des performances optimales. Après la lecture de ce chapitre, vous saurez: Pourquoi et comment dimensionner, organiser, et positionner efficacement les partitions des systèmes de fichiers et de pagination sur votre disque dur. Les bases de la configuration du fichier rc.conf et des fichiers de démarrage /usr/local/etc/rc.d. Comment configurer des hôtes virtuels sur vos périphériques réseau. Comment utiliser les divers fichiers de configuration du répertoire /etc. Comment optimiser FreeBSD en utilisant les variables sysctl. Comment optimiser les performances des disques et modifier les limitations du noyau. Avant de lire ce chapitre, vous devrez: Comprendre les fondements d'Unix et de FreeBSD (). Etre familier avec la mise à jour des sources (), et les bases de la configuration et la compilation du noyau (). Configuration initiale Organisation des partitions Organisation des partitions /etc /var /usr Partitions de base Quand vous organisez votre système de fichiers à l'aide de &man.disklabel.8; ou &man.sysinstall.8;, il est important de se rappeler que les disques durs peuvent transférer des données plus rapidement depuis les pistes externes que depuis celles à l'intérieur. En sachant cela, vous devriez placer vos systèmes de fichiers les plus petits, auxquels on accède le plus souvent, comme la racine et l'espace de pagination, proche de la partie externe du disque, alors que les grandes partitions, comme /usr, devraient être plus à l'intérieur. Pour faire cela, c'est une bonne idée de créer les partitions dans l'ordre suivant: racine, pagination, /var, /usr. La taille de votre partition /var reflète l'utilisation prévue de votre machine. /var est principalement utilisée pour héberger les boîtes aux lettres, les fichiers de traces, les queues d'impression. Les boîtes aux lettres et les fichiers de traces, en particulier, peuvent croître dans des tailles inattendues en fonction du nombre d'utilisateurs de votre système et de combien de temps sont conservés les fichiers de traces. Si vous avez l'intention de faire fonctionner un serveur de courrier électronique, une partition /var de plus d'un gigaoctet pourra convenir. De plus, /var/tmp doit être assez grand pour contenir tout logiciel pré-compilé que vous pourrez vouloir ajouter. La partition /usr contient la majeure partie des fichiers nécessaires au système et un sous-répertoire appelé /usr/local qui lui héberge la plupart des fichiers installés par le catalogue des logiciels portés. Si vous n'employez pas vraiment les logiciels portés et que vous n'avez pas l'intention de conserver les sources du système sur la machine (/usr/src), vous pouvez utiliser une partition /usr d'un gigaoctet. Cependant, si vous installez beaucoup de logiciels portés (tout particulièrement des gestionnaires de fenêtres et des binaires Linux), nous recommandons au moins un /usr de deux gigaoctets et si vous avez également l'intention d'avoir les sources du système sur la machine nous recommandons un /usr de trois gigaoctets. Ne sous-estimez pas la quantité d'espace dont vous aurez besoin sur cette partition, vous risquez d'être surpris! Quand vous dimensionnez vos partitions, gardez à l'esprit les besoins en espace pour permettre à votre système de se développer. Manquer d'espace sur une partition alors qu'il y en a plein sur les autres peut être très frustrant. Certains utilisateurs qui ont employé l'option Auto-defaults de l'outil de partitionnement de &man.sysinstall.8; ont trouvé plus tard que leurs partitions racine et /var étaient trop petites. Partitionnez généreusement et avec sagesse. Partition de pagination dimensionnement de l'espace de pagination partition de pagination Par principe, votre espace de pagination devrait typiquement avoir une taille double de la quantité de mémoire principale. Par exemple, si la machine possède 128 mégaoctets de mémoire, le fichier de pagination devrait être de 256 mégaoctets. Les systèmes avec peu de mémoire pourront avoir de meilleures performances avec beaucoup plus d'espace de pagination. Il n'est pas recommandé d'avoir moins de 256 mégaoctets d'espace de pagination sur un système et vous devriez garder à l'esprit les futures extensions de mémoire quand vous dimensionnez votre partition de pagination. Les algorithmes de pagination du noyau sont optimisés pour une meilleure efficacité avec une partition de pagination d'au moins deux fois la taille de la mémoire principale. Configurer trop peu d'espace de pagination peut conduire à une certaine inefficacité du code de pagination de la mémoire virtuelle comme à l'apparition de problèmes ultérieurement si vous ajoutez plus de mémoire à votre machine. Et enfin, sur des systèmes importants avec de multiples disques SCSI (ou de multiples disques IDE fonctionnant sur différents contrôleurs), il est vivement recommandé que vous configuriez un espace de pagination sur chaque disque (jusqu'à quatre disques). Les partitions de pagination sur les différents disques devront avoir approximativement la même taille. Le noyau peut gérer des tailles arbitraires mais les structures de données internes sont dimensionnées pour 4 fois la taille de la plus grande partition de pagination. Garder la taille des partitions de pagination proche permettra au noyau de répartir de manière optimale l'espace de pagination entre les disques. Ne vous inquiétez pas trop si vous les surdimensionnez, l'espace de pagination est un des avantages d'Unix. Même si vous n'utilisez normalement pas beaucoup de cet espace, il peut vous permettre d'avoir plus temps pour récupérer face à programme incontrôlable avant d'être forcé à relancer la machine. Pourquoi des Partitions? Pourquoi des partitions? Pourquoi ne pas créer une seule grande partition racine? Ainsi je n'aurais pas à me soucier d'avoir sous-dimensionné certaines choses! Pour plusieurs raisons cela n'est pas une bonne idée. Tout d'abord, chaque partition a différentes caractéristiques d'utilisation et les séparer autorise le système de fichiers à s'optimiser lui-même pour ces caractéristiques. Par exemple, les partitions racine et /usr sont surtout lues, et rarement utilisées en écriture, alors que de nombreuses opérations de lecture et écriture pourront avoir lieu sur /var et /var/tmp. En partitionnant correctement votre système, la fragmentation introduite sur les partitions plus petites et plus chargées en écriture ne s'étendra pas sur les partitions principalement utilisées en lecture. De plus, avoir les partitions principalement utilisées en écriture proche du bord du disque, par exemple avant la grande partition au lieu qu'après dans la table des partitions, augmentera les performances d'E/S sur les partitions qui le demandent le plus. Maintenant il est également vrai que vous avez besoin de performances d'E/S sur les grandes partitions, mais elles sont si grandes que les déplacer plus vers l'extérieur du disque ne donnera pas lieu à une augmentation significative des performances alors que le déplacement de /var vers le bord peut avoir un sérieux impact. Et enfin, il y a également des raisons de sécurité. Avoir une partition racine petite et ordonnée qui est essentiellement en lecture seule lui donne plus de chance de rester intacte après un crash sévère. Configuration principale fichiers rc rc.conf L'emplacement principal pour les données de configuration du système est le fichier /etc/rc.conf. Ce fichier contient une large gamme d'informations de configuration, principalement utilisées au démarrage du système pour configurer ce dernier. Son nom le sous-entend; c'est l'information de configuration pour les fichiers rc*. Un administrateur devrait ajouter des entrées dans le fichier rc.conf pour remplacer les valeurs par défaut du fichier /etc/defaults/rc.conf. Les fichiers de valeurs par défaut ne devraient pas être copiés directement tels quels dans /etc - ils contiennent des valeurs par défaut, et non pas des exemples. Tout changement spécifique au système devrait être fait dans le fichier rc.conf. Un certain nombre de stratégies peuvent être appliquées dans le cas d'applications en grappe pour séparer la configuration d'un site de celle d'un système afin de réduire le travail d'administration. L'approche recommandée est de placer la configuration propre au site dans un autre fichier comme /etc/rc.conf.site, puis ensuite inclure ce fichier dans /etc/rc.conf, qui ne contiendra seulement que les informations spécifiques au système. Comme rc.conf est lu par &man.sh.1; il est assez trivial d'effectuer cela. Par exemple: rc.conf: . rc.conf.site hostname="node15.example.com" network_interfaces="fxp0 lo0" ifconfig_fxp0="inet 10.1.1.1" rc.conf.site: defaultrouter="10.1.1.254" saver="daemon" blanktime="100" Le fichier rc.conf.site peut être distribué à l'ensemble des systèmes en utilisant rsync ou un programme semblable, tandis que le fichier rc.conf reste unique. Mettre à jour le système en employant &man.sysinstall.8; ou make world n'écrasera pas le fichier rc.conf, les informations de configuration du système ne seront donc pas perdues. Configuration des applications Généralement, les applications installées ont leurs propres fichiers de configuration, avec leur propre syntaxe, etc... Il est important que ces fichiers soient séparés du système de base, de sorte qu'ils soient facilement localisables et gérables par les outils de gestion des logiciels installés. /usr/local/etc Ces fichiers sont généralement installés dans le répertoire /usr/local/etc. Dans le cas où une application possède un grand nombre de fichiers de configuration, un sous-répertoire sera créé pour les héberger. Normalement, quand un logiciel porté ou pré-compilé est installé, des exemples de fichiers de configuration sont également installés. Ces derniers sont généralement identifiés par un suffixe “.default”. Si aucun fichier de configuration n'existe pour l'application, on les créera en copiant les fichiers .default. Par exemple, considérez le contenu du répertoire /usr/local/etc/apache: -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default La différence de taille des fichiers indique que seul le fichier srm.conf a été modifié. Une mise à jour, plus tard, du logiciel apache ne devrait pas écraser le fichier modifié. Démarrer des services services Il est assez courant qu'un système héberge un certain nombre de services. Ces derniers peuvent être démarrés de différentes façons, chacune ayant différents avantages. /usr/local/etc/rc.d Un logiciel installé à partir du catalogue des logiciels portés ou depuis une version pré-compilée placera souvent une procédure dans /usr/local/etc/rc.d qui sera invoquée au démarrage du système avec un argument , et à l'arrêt du système avec l'argument . C'est la méthode recommandée pour démarrer des services sur le système qui doivent fonctionner avec les privilèges de root, ou s'attendent à fonctionner avec ces privilèges. Ces procédures font partie de l'installation du logiciel, et seront effacées quand le logiciel sera désinstallé. Une procédure générique de démarrage dans /usr/local/etc/rc.d ressemble à: #!/bin/sh echo -n ' FooBar' case "$1" in start) /usr/local/bin/foobar ;; stop) kill -9 `cat /var/run/foobar.pid` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Les procédures de démarrage de FreeBSD rechercheront dans /usr/local/etc/rc.d les procédures qui ont une extension .sh et qui sont exécutables par root. Les procédures trouvées seront lancées avec une option au démarrage, et à l'arrêt pour leur permettre de faire ce qu'elles ont à faire. Donc si vous aviez voulu que la procédure précédente soit exécutée au moment voulu pendant le démarrage du système, vous auriez dû la sauver dans un fichier appelé FooBar.sh dans le répertoire /usr/local/etc/rc.d et en vérifiant qu'elle soit exécutable. Vous pouvez rendre une procédure d'interpréteur de commandes exécutable avec la commande &man.chmod.1; comme montré ci-dessous: &prompt.root; chmod 755 FooBar.sh Certains services s'attendent à être invoqué par &man.inetd.8; quand une demande de connexion est reçue sur le bon port. Ceci est courant pour les serveurs de récupération du courrier (POP et IMAP, etc...). Ces services sont activés en éditant le fichier /etc/inetd.conf. Voir la page de manuel &man.inetd.8; pour plus de détails sur l'édition de ce fichier. Certains services systèmes additionnels ne peuvent pas être couverts par les options de /etc/rc.conf. Ils sont traditionnellement activés en plaçant la/les commande(s) pour les invoquer dans le fichier /etc/rc.local. Depuis FreeBSD 3.1 il n'y a pas de fichier /etc/rc.local par défaut; s'il est créé par l'administrateur il sera utilisé par le système de façon habituelle. Notez que /etc/rc.local est généralement vu comme l'emplacement de dernier recours; s'il y a un meilleur emplacement pour démarrer un service, utilisez-le. Ne placez aucune commande dans /etc/rc.conf. Pour démarrer des “daemons”, ou lancer tout autre commande au démarrage, placez une procédure dans /usr/local/etc/rc.d à la place. Il est également possible d'utiliser le “daemon” &man.cron.8; pour démarrer des services système. Cette approche présente un certain nombre d'avantages, et non des moindres parce que &man.cron.8; exécute ces procédures sous les privilèges du propriétaire de la table crontab, les services pourront être démarrés et maintenus par des utilisateurs non-root. Cela peut utiliser avantageusement une des caractéristiques de &man.cron.8;: la spécification de la date d'exécution peut être remplacée par @reboot, qui provoquera l'exécution de la tâche quand &man.cron.8; est lancé, peu de temps après le démarrage du système. + + + + + Marc + Fonvieille + Contribution de + + + + + + Configuration des cartes réseaux + + Configuration des cartes réseaux + + De nos jours il est impossible de penser à un ordinateur + sans penser connexion à un réseau. Installer et configurer + une carte réseau est une tâche classique pour tout + administrateur FreeBSD. + + + Déterminer le bon pilote de + périphérique + + + Configuration des cartes réseaux + Déterminer le pilote de + périphérique + + + Avant de commencer, vous devez connaître le modèle + de la carte dont vous disposez, le circuit qu'elle + utilise, et si c'est une carte PCI ou ISA. FreeBSD supporte + une large variété de cartes PCI et ISA. Consultez la liste de + compatibilité matérielle pour votre version de FreeBSD afin de + voir si votre carte est supportée. + + Une fois que vous êtes sûrs que votre carte + est supportée, vous devez déterminer le bon pilote de + périphérique pour la carte. Le fichier + /usr/src/sys/i386/conf/LINT vous donnera + la liste des pilotes de périphériques pour cartes + réseaux avec des informations sur les cartes/circuits + supportés. Si vous avez des doutes au sujet du bon pilote, + lisez la page de manuel du pilote. La page de manuel vous + donnera plus d'information sur le matériel supporté et + même les éventuels problèmes qui pourront + apparaître. + + Si vous possédez une carte courante, la plupart du temps + vous n'aurez pas à chercher trop loin pour trouver un pilote. + Les pilotes pour les cartes réseaux courantes sont + présents dans le noyau GENERIC, aussi + votre carte devrait apparaître au démarrage, comme + suit: + +dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 +000ff irq 15 at device 11.0 on pci0 +dc0: Ethernet address: 00:a0:cc:da:da:da +miibus0: <MII bus> on dc0 +ukphy0: <Generic IEEE 802.3u media interface> on miibus0 +ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto +dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 +000ff irq 11 at device 12.0 on pci0 +dc1: Ethernet address: 00:a0:cc:da:da:db +miibus1: <MII bus> on dc1 +ukphy1: <Generic IEEE 802.3u media interface> on miibus1 +ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto + + Dans cet exemple, nous voyons que deux cartes utilisant le + pilote de périphérique &man.dc.4; sont présentes + sur le système. + + Pour utiliser votre carte réseau, vous devrez charger + le pilote de périphérique correct. Cela peut + être accompli de deux façons. La plus simple est de charger + le module pour votre carte réseau avec &man.kldload.8;. + Un module n'est pas disponible pour toutes les cartes réseaux + (les cartes ISA ou celles utilisant le pilote &man.ed.4;, par + exemple). Alternativement, vous pouvez compiler en statique + le support pour votre carte dans votre noyau. Consultez + /usr/src/sys/i386/conf/LINT et la page + de manuel du pilote de périphérique pour savoir ce qu'il + faut ajouter à votre fichier de configuration de votre noyau. + Pour plus d'information sur la recompilation de votre noyau, + veuillez lire le . Si votre + carte a été détectée au démarrage par + votre noyau (GENERIC) vous n'avez pas + a compiler un nouveau noyau. + + + + Configuration de la carte réseau + + + Configuration des cartes réseaux + configuration + + + Une fois le bon pilote de périphérique + pour la carte réseau est chargé, la carte doit + être configurée. Comme beaucoup d'autres choses, la carte + aura pût être configurée à + l'installation par sysinstall. + + Pour afficher la configuration des interfaces réseaux + de votre système, entrée la commande suivante: + +&prompt.user; ifconfig +dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 + ether 00:a0:cc:da:da:da + media: Ethernet autoselect (100baseTX <full-duplex>) + status: active +dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 + ether 00:a0:cc:da:da:db + media: Ethernet 10baseT/UTP + status: no carrier +lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 +lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 + inet 127.0.0.1 netmask 0xff000000 +tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 + + + D'anciennes versions de FreeBSD pourront nécessiter + l'option après &man.ifconfig.8;, + pour plus de détails au sujet de la syntaxe d'&man.ifconfig.8;, + veuillez vous référer à la page de manuel. + Notez également que les entrées concernant l'IPv6 + (inet6 etc...) ont été omises + dans cet exemple. + + + Dans cet exemple, les périphériques suivants + ont été affichés: + + + + dc0: La première + interface Ethernet + + + + dc1: La seconde + interface Ethernet + + + + lp0: L'interface du port + parallèle + + + + lo0: L'interface + “en boucle” (“loopback”) + + + + tun0: L'interface + “tunnel” utilisée par + ppp + + + + FreeBSD utilise le nom du pilote de périphérique + suivi par un chiffre représentant l'ordre dans lequel + la carte est détectée au démarrage du noyau pour nommer la + carte. Par exemple sis2 serait la + troisième carte sur le système utilisant le pilote de + périphérique &man.sis.4;. + + Dans cet exemple, le périphérique + dc0 est actif et en fonctionnement. + Les indicateurs importants sont: + + + + UP signifit que la carte est + configurée est prête. + + + + La carte possède une adresse Internet + (inet) (dans ce cas-ci + 192.168.1.3). + + + + Elle a un masque de sous-réseau valide + (netmask; + 0xffffff00 est équivalent + à 255.255.255.0). + + + + Elle a une adresse de diffusion valide (dans ce cas-ci + 192.168.1.255). + + + + L'adresse MAC de la carte (ether) + est 00:a0:cc:da:da:da + + + + La sélection du média est sur le mode + d'autosélection (media: Ethernet autoselect + (100baseTX <full-duplex>)). Nous voyons + que dc1 a été configurée + pour utiliser un matériel de type + 10baseT/UTP. Pour plus d'information + sur le type de matériel disponible pour un pilote de + périphérique, référez-vous à + sa page de manuel. + + + + La liaison (status) + est active, i.e. la porteuse est + détectée. Pour dc1, nous lisons + status: no carrier. Cela est normal + lorsqu'aucun câble n'est branché à + la carte. + + + + Si le résultat de la commande &man.ifconfig.8; est + similaire à: + +dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 + ether 00:a0:cc:da:da:da + + cela indiquerait que la carte n'a pas été + configurée. + + Pour configurer votre carte, vous avez besoin des + privilèges de l'utilisateur root. + La configuration de la carte réseau peut être + faite à partir de la ligne de commande avec &man.ifconfig.8; + mais vous aurez à répéter cette + opération à chaque redémarrage du système. + Le fichier /etc/rc.conf est l'endroit où + ajouter la configuration de la carte réseau. + + Ouvrez le fichier /etc/rc.conf + dans votre éditeur favori. Vous devez ajouter une ligne + pour chaque carte réseau présente sur le système, par exemple + dans notre cas, nous avons ajouté ces lignes: + +ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" +ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" + + Vous devez remplacer dc0, + dc1, et ainsi de suite, avec + le périphérique correspondant pour vos cartes, et les adresses + avec celles désirées. Vous devriez lire les pages de manuel + du pilote de périphérique et d'&man.ifconfig.8; pour + plus de détails sur les options autorisées et + également la page de manuel de &man.rc.conf.5; pour plus + d'information sur la syntaxe de + /etc/rc.conf. + + Si vous avez configuré le réseau à + l'installation, des lignes concernant la/les carte(s) + réseau pourront être déjà présentes. + Contrôler à deux fois le fichier + /etc/rc.conf avant d'y ajouter des + lignes. + + Vous devrez également editer le fichier + /etc/hosts pour ajouter les noms et les + adresses IP des diverses machines du réseau local, si elles + ne sont pas déjà présentes. Pour plus + d'information référez-vous à la page de manuel &man.hosts.5; + et au fichier + /usr/share/examples/etc/hosts. + + + + Test et dépannage + + Once you have made the necessary changes in + /etc/rc.conf, you should reboot your + system. This will allow the change(s) to the interface(s) to + be applied, and verify that the system restarts without any + configuration errors. + + Once the system has been rebooted, you should test the + network interfaces. + + + Tester la carte Ethernet + + + Configuration des cartes réseaux + Test de la carte + + + Pour vérifier qu'une carte Ethernet est + configurée correctement, vous devez essayer deux choses. + Premièrement, “pinguer” l'interface, puis une + autre machine sur le réseau local. + + Tout d'abord testons l'interface: + +&prompt.user; ping -c5 192.168.1.3 +PING 192.168.1.3 (192.168.1.3): 56 data bytes +64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms +64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms +64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms +64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms +64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms + +--- 192.168.1.3 ping statistics --- +5 packets transmitted, 5 packets received, 0% packet loss +round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms + + Nous devons maintenant “pinguer” une + autre machine sur le réseau: + +&prompt.user; ping -c5 192.168.1.2 +PING 192.168.1.2 (192.168.1.2): 56 data bytes +64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms +64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms +64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms +64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms +64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms + +--- 192.168.1.2 ping statistics --- +5 packets transmitted, 5 packets received, 0% packet loss +round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms + + Vous pourrez utiliser le noms de la machine à + la place de 192.168.1.2 + si vous avez configuré le fichier + /etc/hosts. + + + + Dépannage + + + Configuration des cartes réseaux + Dépannage + + + + + + Où puis-je trouver de l'information au sujet des + possibles problèmes que je peux rencontrer avec ma + carte réseau. + + + + La page de manuel du pilote de périphérique + est la première documentation à lire. Les archives + des listes de diffusion peuvent également + être utiles. + + + + + + Quand j'essaye un “ping” vers une + machine du réseau, j'obtiens le message suivant: + ping: sendto: Permission denied. + + + + Cela signifie que vous n'avez pas la permission + d'envoyer des paquets ICMP. Contrôlez si un coupe-feu + tourne sur la machine et s'il y a des règles bloquant + l'ICMP. + + + + + + Je vois beaucoup de messages + watchdog timeout dans les + fichiers de trace du système, et quand je tente un + “ping” vers une autre machine sur le + réseau local, j'obtiens ce message: + ping: sendto: No route to host. + + + + La première chose à contrôler + est votre câble réseau. De nombreuses cartes + réseaux demandent un slot PCI supportant + le “Bus Mastering”. Sur certaines cartes + mères anciennes, seul un slot PCI le permet (la + plupart du temps le slot 0). Consultez la + documentation de la carte réseau et de la carte mère + pour déterminer si cela peut être à + l'origine du problème. + + + + + + Je vois beaucoup de messages + device timeout dans les + fichiers de trace du système, et ma carte réseau + ne fonctionne pas. + + + + Avoir un ou deux de ces messages est parfois + normal avec certaines cartes. Cependant s'ils + persistent et que le réseau n'est pas utilisable, + assurez-vous que le câble réseau est + branché et qu'il n'y a aucun conflit d'IRQ entre la + carte réseau et un autre périphérique (ou + périphériques) sur le système. + + + + + + Les performances de la carte sont mauvaises, que + puis-je faire? + + + + Il est difficile de répondre à cette + question. Quelle est votre définition de + “mauvaises performances”? Revérifiez + l'ensemble de votre configuration, lisez la page + de manuel &man.tuning.7;, et essayez d'éviter les + cartes réseaux bon marché. De nombreux utilisateurs + ont remarqué que positionner la sélection du média + dans le mode autoselect peut + être à l'origine de mauvaises performances sur + certains matériels. + + + + + + Y-a-t-il des cartes réseaux recommandées ou des + cartes que je devrait éviter? + + + + Vous devriez éviter les cartes bon marché pour une + utilisation sérieuse. Les cartes bon marché utilisent + souvent des circuits bogués, et la plupart du temps ne + peuvent fournir de bonnes performances. De nombreux + utilisateurs de FreeBSD apprécient les cartes + utilisant le circuit &man.fxp.4;, cependant, cela ne + veut pas dire que les autres circuits sont + mauvais. + + + + + + + Hôtes virtuels hôtes virtuels alias IP Une utilisation très courante de FreeBSD est l'hébergement de sites virtuels, où un serveur apparaît pour le réseau comme étant plusieurs serveurs différents. Ceci est possible en assignant plusieurs adresses réseau à une interface. Une interface réseau donnée possède une adresse “réelle”, et peut avoir n'importe quel nombre d'adresses “alias”. Ces alias sont normalement ajoutés en plaçant les entrées correspondantes dans le fichier /etc/rc.conf. Une entrée d'alias pour l'interface fxp0 ressemble à: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" Notez que les entrées d'alias doivent commencer avec alias0 et continuer en ordre croissant, (par exemple, _alias1, _alias2, et ainsi de suite). Le processus de configuration s'arrêtera au premier nombre absent. Le calcul des masques de réseau est important, mais heureusement assez simple. Pour une interface donnée, il doit y avoir une adresse qui représente correctement le masque de réseau de votre réseau. Tout autre adresse appartenant à ce réseau devra avoir un masque de réseau avec chaque bit à 1. Par exemple, considérez le cas où l'interface fxp0 est connectée à - deux réseaux, le réseau 10.1.1.0 avec un masque de + deux réseaux, le réseau 10.1.1.0 avec un masque de réseau de - 255.255.255.0 et le réseau 202.0.75.16 avec un masque de - 255.255.255.240. Nous voulons que le système apparaisse de - 10.1.1.1 jusqu'à 10.1.1.5 et à 202.0.75.17 jusqu'à - 202.0.75.20. + 255.255.255.0 et le réseau 202.0.75.16 avec un masque de + 255.255.255.240. Nous voulons que le système apparaisse de + 10.1.1.1 jusqu'à 10.1.1.5 et à 202.0.75.17 jusqu'à + 202.0.75.20. Les entrées suivantes configurent la carte correctement pour cet arrangement: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" Fichiers de configuration Organisation du répertoire <filename>/etc</filename> Il existe un certain nombre de répertoires dans lesquels se trouvent les informations de configuration. Ceux-ci incluent: /etc Information de configuration générique du système; les données ici sont spécifiques au système. /etc/defaults Version par défaut des fichiers de configuration du système. /etc/mail Configuration de &man.sendmail.8;, et autres fichiers de configuration d'agent de transmission du courrier électronique. /etc/ppp Configuration pour les programmes PPP utilisateur et intégré au noyau. /etc/namedb Emplacement par défaut pour les données de &man.named.8;. Normalement named.conf et les fichiers de zone sont stockés dans ce répertoire. /usr/local/etc Fichiers de configuration pour les applications installées. Peut contenir des sous-répertoires pour chaque application. /usr/local/etc/rc.d Procédures de lancement/d'arrêt pour les applications installées. /var/db Fichiers de bases de données automatiquement générés, spécifiques au système, comme la base de données des logiciels installés, la base de données de localisation des fichiers, et ainsi de suite. Nom d'hôtes nom d'hôte DNS <filename>/etc/resolv.conf</filename> resolv.conf /etc/resolv.conf gère comment le résolveur de FreeBSD accède au système de nom de domaine d'Internet (DNS). Les entrées la plus classiques du fichier resolv.conf sont: nameserver L'adresse IP du serveur de noms auquel le résolveur devrait envoyer ses requêtes. Les serveurs sont sollicités dans l'ordre listé avec un maximum de trois. search Liste de recherche pour la résolution de nom de machine. Ceci est normalement déterminé par le domaine de l'hôte local. domain Le nom du domaine local. Un fichier resolv.conf typique: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 Seule une des options search et domain devrait être utilisée. Si vous utilisez DHCP, &man.dhclient.8; réécrit habituellement resolv.conf avec l'information reçu du serveur DHCP. <filename>/etc/hosts</filename> hosts /etc/hosts est une simple base de données texte, une réminiscence des débuts d'Internet. Il travaille en conjonction avec les serveurs DNS et NIS pour fournir les correspondances nom vers adresse IP. Les ordinateurs locaux reliés par l'intermédiaire d'un réseau local peuvent être ajoutés dans ce fichier pour une résolution de noms simple plutôt que de configurer un serveur &man.named.8;. De plus /etc/hosts peut être utilisé pour fournir un enregistrement local de correspondances de nom, réduisant ainsi le besoin de requêtes vers l'extérieur pour les noms auxquels on accède couramment. # $FreeBSD$ # # Host Database # This file should contain the addresses and aliases # for local hosts that share this file. # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. PLEASE PLEASE PLEASE do not try # to invent your own network numbers but instead get one from your # network provider (if any) or from the Internet Registry (ftp to # rs.internic.net, directory `/templates'). # /etc/hosts suit le format simple suivant: [Internet address] [official hostname] [alias1] [alias2] ... Par exemple: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 Consultez la page de manuel &man.hosts.5; pour plus d'informations. Configuration des fichiers de trace fichiers de trace <filename>syslog.conf</filename> syslog.conf syslog.conf est le fichier de configuration du programme &man.syslogd.8;. Il indique quel type de messages syslog sera enregistré dans des fichiers de traces particuliers. # $FreeBSD$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manual page. *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log #*.* /var/log/all.log # uncomment this to enable logging to a remote log host named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log Consultez la page de manuel &man.syslog.conf.5; pour plus d'informations. <filename>newsyslog.conf</filename> newsyslog.conf newsyslog.conf est le fichier de configuration de &man.newsyslog.8;, un programme qui est normalement programmé &man.cron.8; pour s'exécuter périodiquement. &man.newsyslog.8; détermine quand les fichiers de traces doivent être archivés ou réorganisés. logfile devient logfile.0, logfile.0 devient à son tour logfile.1, et ainsi de suite. D'autre part, les fichiers de traces peuvent être archivés dans le format &man.gzip.1;, ils se nommeront alors: logfile.0.gz, logfile.1.gz, et ainsi de suite. newsyslog.conf indique quels fichiers de traces doivent être gérés, combien doivent être conservés, et quand ils doivent être modifiés. Les fichiers de traces peuvent être réorganisés et/ou archivés quand ils ont soit atteint une certaine taille, soit à une certaine période/date. # configuration file for newsyslog # $FreeBSD$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z Consultez la page de manuel &man.newsyslog.8; pour plus d'informations. <filename>sysctl.conf</filename> sysctl.conf sysctl sysctl.conf ressemble à rc.conf. Les valeurs sont fixées sous la forme variable=value. Les valeurs spécifiées sont positionnées après que le système soit passé dans le mode multi-utilisateurs. Toutes les variables ne sont pas paramétrables dans ce mode. Un exemple de sysctl.conf désactivant la trace signaux fatals de fin de processus et faisant savoir aux programmes Linux qu'ils tournent sous FreeBSD. kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11) compat.linux.osname=FreeBSD compat.linux.osrelease=4.3-STABLE Optimisation avec sysctl sysctl optimisation avec sysctl &man.sysctl.8; est une interface qui vous permet d'effectuer des changements de paramétrage sur un système FreeBSD en fonctionnement. Cela comprend de nombreuses options avancées de la pile TCP/IP et du système de mémoire virtuelle qui peuvent améliorer dramatiquement les performances pour un administrateur système expérimenté. Plus de cinq cent variables système peuvent être lues et modifiées grâce à &man.sysctl.8;. &man.sysctl.8; remplit deux fonctions: lire et modifier les paramétrages du système. Pour afficher toutes les variables lisibles: &prompt.user; sysctl -a Pour lire une variable particulière, par exemple, kern.maxproc: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Pour fixer une variable particulière, utilisez la syntaxe intuitive variable=valeur : &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Les valeurs des variables sysctl sont généralement des chaînes de caractères, des nombres, ou des booléens (un variable booléenne étant 1 pour oui ou un 0 pour non). Optimiser les disques Les variables sysctl <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable La variable sysctl vfs.vmiodirenable peut être positionnée soit à 0 (désactivée) soit à 1 (activée); elle est a 1 par défaut. Cette variable spécifie comment les répertoires sont cachés par le système. La plupart des répertoires sont petits, utilisant juste un simple fragment du système de fichiers (typiquement 1KO) et moins dans le cache en mémoire (typiquement 512 octets). Cependant, quand on fonctionne dans le mode par défaut le cache en mémoire ne cachera qu'un nombre fixe de répertoires même si vous disposez d'une grande quantité de mémoire. Activer cette variable sysctl permet au cache en mémoire d'utiliser le cache des pages de mémoire virtuelle pour cacher les répertoires, rendant toute la mémoire disponible pour cacher les répertoires. Cependant, la taille minimale de l'élément mémoire utilisé pour cacher un répertoire est une page physique (typiquement 4KO) plutôt que 512 octets. Nous recommandons l'activation de cette option si vous faites fonctionner des services qui manipulent un grand nombre de fichiers. De tels services peuvent être des caches web, d'importants systèmes de courrier électronique, et des systèmes serveurs de groupe de discussion. Activer cette option ne réduira généralement pas les performances même avec la mémoire gaspillée mais vous devriez faire des expériences pour le déterminer. <varname>hw.ata.wc</varname> hw.ata.wc FreeBSD 4.3 a flirté avec la désactivation du cache en écriture des disques IDE. Cela réduisit la bande passante en écriture des disques IDE mais fut considéré comme nécessaire en raison de sérieux problèmes de cohérence de données introduits par les fabricants de disques durs. Le problème est que les disques IDE mentent sur le moment où une écriture est réellement terminée. Avec le cache en écriture IDE activé, les disques durs IDE non seulement n'écriront pas les données dans l'ordre, mais parfois retarderont l'écriture de certains blocs indéfiniment sous une charge disque importante. Un crash ou une coupure secteur pourra être à l'origine de sérieuses corruptions du système de fichiers. Par précaution le paramétrage par défaut de FreeBSD fut modifié. Malheureusement, le résultat fut une telle perte de performances que nous avons réactivé le cache en écriture après cette version de FreeBSD. Vous devriez contrôler la valeur par défaut sur votre système en examinant la variable sysctl hw.ata.wc. Si le cache en écriture des disques IDE est désactivé, vous pouvez le réactiver en positionnant la variable à 1. Cela doit être fait à partir du chargeur au démarrage. Tenter de le faire après le démarrage du noyau n'aura aucun effet. Pour plus d'informations, veuillez consulter la page de manuel &man.ata.4;. Les “Soft Updates” Soft Updates tunefs Le programme &man.tunefs.8; peut être utilisé pour régler finement un système de fichiers. Ce programme dispose de nombreuses options différentes, mais pour l'instant nous nous intéresserons uniquement à l'activation et la désactivation des “Soft Updates”, ce qui fait avec: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Un système de fichiers ne peut être modifié avec &man.tunefs.8; tant qu'il est monté. Un bon moment pour activer les “Soft Updates” est avant que les partitions ne soient montées en mode mono-utilisateur. Depuis FreeBSD 4.5, il est possible d'activer les “Soft Updates” au moment de la création du système de fichiers, avec l'utilisation de l'option -U de la commande &man.newfs.8;. Les “Soft Updates” améliorent de façon drastique les performances sur les méta-données, principalement la création et la suppression de fichier, par l'utilisation d'un cache mémoire. Nous recommandons d'activer les “Soft Updates” sur tous vos systèmes de fichiers. Il y a deux inconvénients aux “Soft Updates” que vous devez connaître: tout d'abord, les “Soft Updates” garantissent la cohérence du système de fichiers en cas de crash mais pourront facilement être en retard de quelques secondes (voir même une minute!) dans la mise à jour du disque. Si votre système plante il se peut que vous perdiez plus de travail que dans d'autres cas. Deuxièmement, les “Soft Updates” retardent la libération des blocs du système de fichiers. Si vous avez un système de fichiers (comme le système de fichiers racine) qui est presque plein, effectuer une mise à jour majeure, comme un make installworld, peut mener à un manque d'espace sur le système de fichiers et faire échouer la mise à jour. Plus de détails à propos des “Soft Updates” Soft Updates (Détails) Il y a deux approches traditionnelles pour écrire les méta-données d'un système de fichiers sur le disque (mise à jour des méta-données et mise à jour des éléments sans données comme les inodes ou les répertoires). Historiquement, le comportement par défaut était d'écrire les mises à jour des méta-données de façon synchrone. Si un répertoire a été modifié, le système attendait jusqu'à ce que le changement soit effectivement écrit sur le disque. Les tampons des données de fichier (contenu du fichier) passaient par le cache mémoire et étaient copiés sur le disque plus tard de façon asynchrone. L'avantage de cette implémentation est qu'elle est effectuée sans risque. S'il y a un problème durant une mise à jour, les méta-données sont toujours dans un état consistant. Un fichier est soit créé complètement soit pas du tout. Si les blocs de données d'un fichier n'ont pas trouvé leur chemin du cache mémoire vers le disque au moment du crash, &man.fsck.8; est capable de s'en apercevoir et de réparer le système de fichiers en fixant la taille du fichier à 0. De plus, l'implémentation est claire et simple. L'inconvénient est que la modification des méta-données est lente. Un rm -r, par exemple, touche à tous les fichiers dans un répertoire séquentiellement, mais chaque modification du répertoire (effacement d'un fichier) sera écrite de façon synchrone sur le disque. Cela comprend les mises à jour du répertoire lui-même, de la table des inodes, et éventuellement celles sur des blocs indirects alloués par le fichier. Des considérations semblables s'applique à la création d'importantes hiérarchies ((tar -x). Le deuxième cas est la mise à jour asynchrone des méta-données. C'est le comportement par défaut de Linux/ext2fs et de l'usage de mount -o async pour l'UFS des systèmes BSD. Toutes les mises à jour des méta-données passent également par l'intermédiaire d'un cache mémoire, c'est à dire, qu'elles seront mélangées aux mises à jour des données du contenu du fichier. L'avantage de cette implémentation est qu'il n'y a pas besoin d'attendre jusqu'à l'écriture sur le disque de chaque mise à jour de méta-données, donc toutes les opérations qui sont à l'origine d'une grande quantité de mise à jour de méta-données fonctionnent bien plus rapidement que dans le cas synchrone. De plus, l'implémentation est toujours claire et simple, il y a donc peu de risque qu'un bogue se cache dans le code. L'inconvénient est qu'il n'y a aucune garantie du tout sur la cohérence du système de fichiers. S'il y a un problème durant une opération qui met à jour une grande quantité de méta-données (comme une coupure secteur, ou quelqu'un appuyant sur le bouton reset), le système de fichiers sera laissé dans un état imprévisible. Il n'y a aucune opportunité d'examiner l'état du système de fichiers quand le système est a nouveau relancé; les blocs de données d'un fichier pourraient déjà avoir été inscrit sur le disque alors que la mise à jour de la table des inodes ou du répertoire associé n'a pas été faite. Il est en fait impossible d'implémenter un fsck qui est capable de nettoyer le chaos résultant (parce que l'information nécessaire n'est pas disponible sur le disque). Si le système de fichiers a été endommagé irrémédiablement, le seul choix est - de le recréer avec newfs et de + de le recréer avec &man.newfs.8; et de récupérer les données à partir de sauvegardes. La solution commune pour ce problème fut d'implémenter une région de trace, dont on fait souvent référence sous le terme de journalisation, bien que ce terme ne soit pas toujours utilisé de façon cohérente et est occasionnellement utilisé pour d'autres formes de transaction avec trace. Les mises à jour des méta-données sous toujours écrites de façon synchrone, mais seulement sur une petite région du disque. Elles seront plus tard déplacées vers leur emplacement correct. Parce que la région de trace est une petite région contiguë sur le disque, il n'y a pas de grandes distances de déplacement pour les têtes des disques, même durant les opérations importantes, donc ces opérations sont plus rapides que les mises à jour synchrones. De plus la complexité de l'implémentation est relativement limitée, donc le risque de présence de bogues est faible. Un inconvénient est que toutes les méta-données sont écrites deux fois (une fois dans la région de trace et une fois sur l'emplacement correct) donc pour un fonctionnement normal, une baisse des performances pourra en résulter. D'autre part, dans le cas d'un crash, toutes les opérations sur les méta-données en attente peuvent rapidement être annulées ou complétées à partir de la zone de trace après le redémarrage du système, ayant pour résultat un démarrage rapide du système de fichiers. Kirk McKusick, le développeur du FFS de Berkeley, a résolu le problème avec les “Soft Updates”: toutes les mises à jour des méta-données sont conservées en mémoire et inscrites sur le disque selon une séquence ordonnée (“mise à jour ordonnée des méta-données”). Ceci a pour effet, dans le cas d'un nombre d'opérations sur les méta-données important, que les dernières mises à jour sur un élément “attrapent” les premières si ces dernières sont encore en mémoire et n'ont pas encore été inscrites sur le disque. Donc toutes les opérations sur, par exemple, un répertoire sont généralement effectuées en mémoire avant que la mise à jour ne soit écrite sur le disque (les blocs de données sont ordonnés en fonction de leur position de sorte à ce qu'ils ne soient pas sur le disque avant leur méta-données). Si le système crash, cela provoque un “retour dans les traces” implicite: toutes les opérations qui n'ont pas trouvé leur chemin vers le disque apparaissent comme si elles n'avaient jamais existé. Un état cohérent du système de fichiers est maintenu et apparaît comme étant celui de 30 ou 60 secondes plus tôt. L'algorithme utilisé garantie que toutes les ressources utilisées soient marquées avec leur bons “bitmaps”: blocs et inodes. Après un crash, les seules erreurs d'allocation de ressources qui apparaissent sont les ressources qui ont été marquées comme “utilisées” et qui sont en fait ”libre”. &man.fsck.8; reconnaît cette situation, et libère les ressources qui ne sont plus utilisées. On peut ignorer sans risque l'état “sale” d'un système de fichiers après un crash en forçant sont montage avec mount -f. Afin de libérer les ressources qui peuvent être inutilisées, &man.fsck.8; doit être exécuté plus tard. C'est l'idée qu'il y a derrière le “background fsck” (fsck en tâche de fond): au démarrage du système, seule un “snapshot” (photographie) du système de fichiers est prise. La commande fsck peut être exécutée plus tard sur ce système de fichiers. Tous les systèmes de fichiers peuvent être montés “sales”, donc le système passe en mode multi-utilisateurs. Ensuite, les fsck en tâche de fond seront programmés pour tous les systèmes de fichiers pour lesquels c'est nécessaire, pour libérer les ressources qui peuvent être inutilisées (les systèmes qui n'utilisent pas les ‘Soft Updates” ont toujours besoin du fsck en avant plan). L'avantage est que les opérations sur les méta-données sont presque aussi rapides que les mises à jour asynchrones (i.e. plus rapide qu'avec le “logging” - traçage, qui doit écrire les méta-données deux fois). Les inconvénients sont la complexité du code (impliquant un haut risque de bogues dans une zone qui est hautement sensible en raison de risque perte de données utilisateur), et une plus grande consommation en mémoire. De plus il y a quelques particularités que l'on peut rencontrer lors de l'utilisation. Après un crash, l'état du système apparaît être en quelque sorte “plus vieux”. Dans des situations où l'approche synchrone classique aurait donné lieu à des fichiers de taille nulle restant après le fsck, ces fichiers n'existent pas du tout avec un système de fichiers utilisant les “Soft Updates” parce que ni les méta-données ni les contenus de fichiers n'ont jamais été inscrits sur le disque. L'espace disque n'est pas rendu tant que les mises à jour n'ont pas été inscrites sur le disque, ce qui peut se produire quelques temps après l'exécution de rm. Cela peut être à l'origine de problèmes quand on installe une grande quantité de données sur un système de fichiers qui ne dispose pas de suffisamment d'espace pour contenir tous les fichiers deux fois. Paramétrer les limitations du noyau Paramétrer les limitations du noyau Limitations sur les fichiers et les processus <varname>kern.maxfiles</varname> kern.maxfiles Le paramètre kern.maxfiles peut être augmenté ou diminué en fonction des besoins du système. Cette variable indique le nombre maximal de descripteurs de fichier sur votre système. Quand la table de descripteurs de fichier est pleine, le message file: table is full s'affichera régulièrement dans le tampon des messages système, qui peut être visualisé avec la commande dmesg. Chaque fichier ouvert, chaque “socket”, ou chaque emplacement en pile utilise un descripteur de fichier. Un serveur important peut facilement demander plusieurs milliers de descripteurs de fichiers, en fonction du type et du nombre de services s'exécutant en même temps. La valeur par défaut de kern.maxfile est fixée par l'option dans votre fichier de configuration du noyau. kern.maxfiles augmente proportionnellement avec la valeur de . Quand vous compilez un noyau sur mesure, il est bon de paramétrer cette option en fonction de l'utilisation de votre système. Ce nombre fixe la plupart des limites pré-définies du noyau. Même si une machine de production pourra ne pas avoir en réalité 256 utilisateurs connectés simultanément, les ressources requises pourront être semblables pour un serveur web important. A partir de FreeBSD 4.5, positionner à 0 dans votre fichier de configuration du noyau, le système choisira une valeur raisonnable par défaut basée sur la quantité de mémoire présente sur votre système. Limitations réseau L'option du noyau fixe la quantité de “mbuf”s disponibles pour le système. Un serveur à fort trafic avec un nombre faible de “mbuf”s sous-emploiera les capacités de FreeBSD. Chaque “cluster” représente approximativement 2KO de mémoire, donc une valeur de 1024 représente 2 mégaoctets de mémoire noyau réservée pour les tampons réseau. Un simple calcul peut être fait pour déterminer combien sont nécessaires. Si vous avez un serveur web qui culmine à 1000 connexions simultanées, et que chaque connexion consomme un tampon de réception de 16KO et un tampon d'émission de 16KO, vous avez approximativement besoin de 32MO de tampon réseau pour couvrir les besoin du serveur web. Un bon principe est de multiplier ce nombre par 2, soit 2x32 MO / 2KO = 64MO / 2KO =32768. Ajouter de l'espace de pagination Peu importe comment vous l'avez pensé, parfois un système ne fonctionne pas comme prévu. Si vous trouvez que vous avez besoin de plus d'espace de pagination, il est assez simple d'en rajouter. Vous avez trois manières d'augmenter votre espace de pagination: ajouter un nouveau disque dur, activer la pagination sur NFS, et créer un fichier de pagination sur une partition existante. Espace de pagination sur un nouveau disque dur La meilleur façon d'ajouter de l'espace de pagination, bien sûr, est d'utiliser ceci comme excuse pour ajouter un autre disque dur. Vous pouvez toujours utiliser un autre disque après tout. Si vous pouvez faire cela, allez relire la discussion sur l'espace de pagination dans la section Configuration initiale du Manuel pour des suggestions sur la meilleure façon d'arranger votre espace de pagination. Espace de pagination sur NFS L'espace de pagination sur NFS n'est recommandé que si vous n'avez pas de disque dur local sur lequel avoir l'espace de pagination. Avoir son espace de pagination sur NFS sera lent et inefficace sur les versions de FreeBSD antérieures à la branche 4.X. c'est raisonnablement rapide et efficace sur 4.0-RELEASE et suivante. Même avec une version récente de FreeBSD, la pagination sur NFS sera limitée par la bande passante du réseau et sera un fardeau supplémentaire pour le serveur NFS. Fichiers de pagination Vous pouvez créer un fichier d'une taille spécifique pour l'utiliser comme fichier de pagination. Dans notre exemple nous utiliserons un fichier de 64MO appelé /usr/swap0. Vous pouvez, bien sûr, utiliser le nom de votre choix. Créer un fichier de pagination Soyez sûr que votre configuration de noyau inclut le pilote vnode. Ce n'est pas le cas dans les versions récentes de GENERIC. pseudo-device vn 1 #Vnode driver (turns a file into a device) Créez un périphérique vn: &prompt.root; cd /dev &prompt.root; sh MAKEDEV vn0 Créez un fichier de pagination (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Fixez les bonnes permissions sur /usr/swap0: &prompt.root; chmod 0600 /usr/swap0 Activez le fichier de pagination dans /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Redémarrez la machine ou activez directement le fichier de pagination: &prompt.root; vnconfig -e /dev/vn0b /usr/swap0 swap