Menu Fermer

Créer un fichier swap sous Linux

Dernière mise à jour le 09/03/2023 à 11:08 am

Certains fournisseurs VPS ne mettent pas en place de partition swap sur leurs machines et même si cela ne pose en général aucun problème il peut arriver que vous utilisiez trop de RAM. Dans ce cas le processus OOM Killer prend le relais et tuera des processus afin de libérer de la mémoire et stabiliser le système. Dans ce cas vous avez trois possibilités :

  • Utiliser moins de RAM (pas cool si le besoin est la)
  • Payer un peu plus cher le VPS pour avoir un peu plus de RAM (Solution fiable mais qui peut se montrer onéreuse sur les grosses infrastructures doté de nombreux VPS)
  • Ajouter un fichier swapfile (Il faut de l’espace sur le disque, donc sur les très petits VPS peux ne pas être une solution)

Cette procédure va être réalisée sous Debian 11 mais reste valable pour beaucoup d’usage.

Vérification préliminaires

On va commencer par vérifier qu’aucun SWAP n’est déjà présent, il est en effet possible de n’avoir qu’un seul swap à la fois. Pour ce faire on va utiliser les commandes swapon -s et free -m :

ShellScript
swapon -s
free -m
ShellScript
root@vps:~# swapon -s
root@vps:~# free -m
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:            1937         337          69           0        1530        1435
Partition d'échange:          0           0           0

On peux voir ci dessus qu’il n’y à pas de swap (aucun retour de la commande swapon), l’utilisation RAM est bonne sur ce VPS (<25%), et le processus OOM Killer n’a jamais tué le moindre processus, le fichier swap ne sera donc pas forcément utile, cela est juste un exemple.

Pensez a bien vérifier la volumétrie libre sur votre VPS avant de passer à la suite via la commande df -h par exemple.

ShellScript
df -h
ShellScript
root@vps:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               960M       0  960M   0% /dev
tmpfs              194M    776K  193M   1% /run
/dev/sda1           20G    9,8G  9,1G  52% /
tmpfs              969M       0  969M   0% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
/dev/loop2         117M    117M     0 100% /snap/core/14447
/dev/loop5          64M     64M     0 100% /snap/core20/1822
/dev/loop3          44M     44M     0 100% /snap/certbot/2772
/dev/loop0         117M    117M     0 100% /snap/core/14784
/dev/loop6          64M     64M     0 100% /snap/core20/1828
/dev/loop4          44M     44M     0 100% /snap/certbot/2836
tmpfs              194M    4,0K  194M   1% /run/user/1001

Création du fichier swap

Ici le besoin étant faible le fichier swap qui sera créé sera de 1Go. On commence par créer le fichier

ShellScript
fallocate -l 1G /swapfile
ls -lah /swapfile
ShellScript
root@vps:~# fallocate -l 1G /swapfile
root@vps:~# ls -lah /swapfile
-rw-r--r-- 1 root root 1,0G  9 mars  10:40 /swapfile

Le fichier swapfile a bien été créé à la racine du linux, si la création du fichier échoue avec fallocate il reste possible de créer le fichier via dd directement (Pour un swap plus grand que 1G c’est le count qu’il faut modifier) :

ShellScript
dd if=/dev/zero of=/swapfile bs=1G count=1 status=progress
ls -lah /swapfile
ShellScript
root@vps:~# dd if=/dev/zero of=/swapfile bs=1G count=1 status=progress
1073741824 octets (1,1 GB, 1,0 GiB) copiés, 2 s, 505 MB/s
1+0 enregistrements lus
1+0 enregistrements écrits
1073741824 octets (1,1 GB, 1,0 GiB) copiés, 2,15198 s, 499 MB/s
root@vps:~# ls -lah /swapfile
-rw-r--r-- 1 root root 1,0G  9 mars  10:43 /swapfile

Activation du swap

Le fichier swap doit être en lecture écriture par uniquement l’utilisateur root, pour ce faire la commande chmod va être utilisée

ShellScript
chmod 600 /swapfile
ls -lah /swapfile
ShellScript
root@vps:~# chmod 600 /swapfile
root@vps:~# ls -lah /swapfile
-rw------- 1 root root 1,0G  9 mars  10:43 /swapfile

On va désormais faire du swapfile un vrai fichier swap

ShellScript
mkswap /swapfile
ShellScript
root@vps:~# mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=0157371f-7e22-4171-ac38-d1d7fe120ed6

On peut désormais activer le fichier swap et valider celui ci

ShellScript
swapon /swapfile
swapon -s
ShellScript
root@vps:~# swapon -s
root@vps:~# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048572 0       -2
root@smtp:~#

Rendre le swap persistant au redémarrage

Pour rendre persistant le tout, se rendre dans le fichier fstab et y ajouter la ligne suivante en fin de fichier

ShellScript
/swapfile none swap sw 0 0

Pour le faire sans avoir a éditer le fichier, on peut utiliser la commande suivante, elle réaliser la sauvegarde du fichier fstab puis injecte la ligne en fin de fichier

ShellScript
cp /etc/fstab /etc/fstab.bak && echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab

On peux ensuite valider que la commande s’est bien déroulée :

ShellScript
root@vps:~# cat /etc/fstab
# /etc/fstab: static file system information.
UUID=f5cf0f50-2c77-4d02-8d10-b2e58ac73414       /       ext4    errors=remount-ro       0       1

/swapfile none swap sw 0 0

Bonus, la compil des commandes

Si vous avez besoin de réaliser cela sur de nombreux serveurs vous pouvez coller le bloc de commande ci dessous. Veilliez juste a faire les vérifications préliminaires avant :

ShellScript
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon -s
cp /etc/fstab /etc/fstab.bak && echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
ShellScript
root@vps:~# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048572 0       -2
root@vps:~# free -m
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:            1937         326         994           0         615        1443
Partition d'échange:       1023           0        1023
root@smtp:~#

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.