Ajouter un ficher d’échange (swap) à FreeBSD

Aujourd’hui nous allons nous attaquer à un mal qui ronge les plus anciens d’entre nous, les problèmes de mémoire disponible. Et oui nos bonnes vieilles machines sont comme nous, avec l’âge elles n’ont souvent plus assez de mémoire pour pouvoir rester dans le coup et ne pas se faire dépasser par les petit jeunes qui arrivent sur le circuit de la vie.

Donc pour aider notre bonne vieille machine sous FreeBSD à faire fonctionner correctement les jeunes dernières moutures de logiciels comme Zabbix (apportant autant de gourmandise en RAM que de nouveautés indispensables), nous ajoutons tout simplement de la mémoire vive et passons de 256Mo à 512Mo. Puis, satisfaits du devoir accompli, notre bonne vieille machine est redémarrée en se disant qu’elle devrait au moins se faire autant oublier qu’avant.

Mais c’est sans compter sur le padbolisme (qui est une variante de la loi de Murphy) et c’est avec effroi qu’un Lundi matin, encore bercé par la fraicheur automnale, nous découvrons cette chose horrible dans les logs de notre téméraire machine:

Nov  7 01:03:29 zabbix_box kernel: swap_pager_getswapspace(3): failed
Nov  7 01:03:30 zabbix_box Kernel: swap_pager_getswapspace(3): failed
Nov  7 01:03:30 zabbix_box kernel: swap_pager_getswapspace(5): failed
Nov  7 01:03:30 zabbix_box kernel: swap_pager_getswapspace(3): failed
Nov  7 01:03:36 zabbix_box kernel: swap_pager_getswapspace(3): failed
[...]
Nov  7 02:34:56 zabbix_box kernel: pid 17507 (mysqld), uid 88, was killed: out of swap space
Nov  7 02:34:56 zabbix_box kernel: pid 75212 (zabbix_server), uid 112, was killed: out of swap space

“Alors c’est ça ?” “On rajoute de la RAM pour que cette machine soit moins étouffée et voilà comment elle nous remercie ?”

Mais en y réfléchissant à deux fois, après le rite info-chamanique dit de “la tête entre les paumes des mains”, il apparait que bien que l’on ai augmenté la mémoire vive disponible, nous n’avons pas songé à augmenter le fichier d’échange en conséquence. Ce qui nous fait 512Mo de swap pour autant de RAM, et sur une machine chargée comme la notre, c’est un peu limite.

Oui mais comment faire pour ajouter de l’espace de pagination ? Car nous n’avons plus de place disponible pour ajouter un disque dur, ni prévu d’espace libre pour créer une deuxième partition de swap :/

Et la réponse viens du côté obscur de l’informatique: on va faire comme sous Windows… Enfin juste dans le principe, car nous allons en fait créer un “fichier” d’échange un peu comme le “pagefile.sys” de l’OS de Redmond.

Pour celà:

On crée un fichier d’échange d’1Gio rempli de zéros là on on a de la place:

# dd if=/dev/zero of=/var/tmp/swapfile bs=1024k count=1000

On crée un pseudo-périphérique se rattachant à notre fichier créé:

# mdconfig -a -t vnode -f /var/tmp/swapfile

La sortie standard vous donne le nom du pseudo-périphérique ainsi créé: md0 dans notre cas.

On active notre pseudo-périphérique comme espace de pagination:

# swapon /dev/md0

Et on vérifie que  le système reconnaît bien notre nouveau swap:

# swapinfo

Device          1K-blocks     Used    Avail Capacity
/dev/ad0s1b        524288        0   524288     0%
/dev/md0          1024000        0  1024000     0%
Total             1548288        0  1548288     0%

Nous avons bien notre /dev/md0 d’1Go sous la partition d’échange originale :) Notre bonne vieille machine dispose dorénavant de près 1.5Go de swap, de quoi voir venir…

“Oui mais alors, je vais devoir faire tout ça à chaque fois que le machine redémarre ?”

Et non, car, contrairement à ce qu’il y paraît dans mes billets, tout ceci n’est PAS un immonde bricolage. FreeBSD à même prévu une entrée dans rc.conf pour gérer tout ça. Il suffi de rajouter dans /etc/rc.conf:

swapfile=”/var/tmp/swapfile”

Et notre fichier d’échange sera initialisé à chaque démarrage.

Nov07

Leave a Reply

You must be logged in to post a comment.