Comment créer de la mémoire d'échange dans Linux

Pour créer un fichier d'échange dans Linux, préparez un fichier sur votre stockage, initialisez-le avec mkswap, puis activez-le avec swapon. L'échange aide à réduire la pression sur la mémoire, mais il est plus lent que la RAM et ne résout pas tous les problèmes de manque de mémoire ni ne garantit le fonctionnement normal des programmes.

Qu'est-ce que l'échange ?

Le swap est un espace qui permet de placer une partie des pages mémoire utilisées sur le stockage. Vous pouvez utiliser un fichier disque ou une partition séparée. Cet article explique comment ajouter un fichier, et les 2 GiB de l'exemple sont à des fins d'entraînement. La taille requise doit être déterminée en tenant compte de la RAM, de la charge de travail, de l'espace disponible et de l'utilisation de l'hibernation.

Le système peut déjà utiliser le swap. Vérifiez les éléments activés actuellement et l'état de la mémoire avec la commande suivante.

swapon --show
free -h

Vérifiez le nom, la taille et l'utilisation dans swapon --show, et regardez l'utilisation totale dans la ligne Swap de free -h. Même si vous augmentez le swap, les performances peuvent diminuer si l'accès au stockage est fréquent. Si la mémoire est constamment insuffisante, prenez également en compte la charge de travail et l'extension de la RAM.

Choses à vérifier avant de commencer

La procédure suivante est un exemple pour Linux utilisant les outils GNU et util-linux, où le système de fichiers racine est le commun ext4 et dispose d'un espace libre suffisant. Des privilèges administratifs sont requis. Les conteneurs ou serveurs gérés peuvent restreindre l'activation du swap, donc vérifiez d'abord les politiques d'exploitation.

findmnt -T / -o TARGET,FSTYPE,SOURCE,OPTIONS
df -h /

Vérifiez le type de système de fichiers et l'espace disponible. En plus du fichier de swap de 2 Gio, laissez suffisamment d'espace libre pour un fonctionnement normal. Ne pas utiliser le chemin d'exemple /swap-manualfactory si un fichier ou un lien symbolique existe déjà à cet endroit. Réinitialiser ou écraser un fichier swap existant peut provoquer une perte de données et des problèmes sur un système en fonctionnement.

Btrfs a des restrictions spécifiques liées à Copy-on-Write et aux instantanés, donc n'appliquez pas directement la procédure ext4 ci-dessous. Pour les méthodes et conditions de création spécifiques à Btrfs, consultez le document sur le fichier d'échange Btrfs . Les systèmes de fichiers réseau ou autres systèmes de fichiers peuvent également avoir des conditions de support différentes.

Création et activation d'un fichier d'échange

Ce qui suit est un exemple de création d'un fichier de 2 Gio lorsque /swap-manualfactory n'existe pas. Le conv=excl dans GNU dd échouera si la cible existe déjà, empêchant l'écrasement. Si cela échoue ou est interrompu, ne passez pas à l'étape suivante ; vérifiez la cause et le fichier généré.

sudo dd if=/dev/zero of=/swap-manualfactory bs=1M count=2048 conv=excl status=progress

Si la commande réussit, vérifiez la taille et le chemin du fichier, définissez-le de manière à ce que seul l'administrateur puisse le lire et l'écrire, puis initialisez-le comme espace d'échange. mkswap modifie le fichier spécifié, assurez-vous donc de vérifier que le chemin correspond bien au fichier que vous venez de créer.

sudo ls -lh /swap-manualfactory
sudo chmod 600 /swap-manualfactory
sudo mkswap /swap-manualfactory

N'exécutez l'étape suivante que si chaque étape précédente réussit. Après l'activation avec la commande ci-dessous, vérifiez que le nouveau chemin apparaît dans la liste.

sudo swapon /swap-manualfactory
swapon --show
free -h

La taille de fichier affichée peut ne pas correspondre exactement à la taille du fichier créé en raison de l'en-tête de swap et d'autres facteurs. Si swapon échoue, vérifiez l'erreur et ne l'ajoutez pas aux paramètres de démarrage. Un fichier d'échange ne doit pas avoir de trous et, selon le système de fichiers, un fichier créé avec fallocate peut ne pas être approprié. Le manuel util-linux swapon explique les contraintes pour chaque système de fichiers.

L'activer après le démarrage

N'ajoutez des éléments à /etc/fstab qu'après l'avoir activé avec succès. Puisque ce fichier contient également d'autres paramètres de montage, sauvegardez-le avant de le modifier et assurez-vous que les chemins ne dupliquent pas les entrées de swap existantes. Si le chemin de sauvegarde ci-dessous existe déjà, choisissez un nouveau nom différent.

sudo cp -a -n /etc/fstab /etc/fstab.before-swap
sudo nano /etc/fstab

Conservez le contenu existant dans l'éditeur et ajoutez la ligne ci-dessous, puis enregistrez. Si vous avez créé un chemin d'exemple sous un nom différent, utilisez le chemin réel.

/swap-manualfactory none swap defaults 0 0

Après enregistrement, vérifiez à nouveau le contenu du fichier et, sur les systèmes où cela est disponible, examinez les paramètres avec la commande suivante. Cette vérification ne garantit pas un redémarrage réussi.

sudo findmnt --verify --verbose
sudo systemctl daemon-reload

daemon-reload fait que les systèmes utilisant systemd rechargent les paramètres modifiés. S'il y a des erreurs de validation, corrigez-les et assurez-vous de ne pas avoir modifié accidentellement d'autres entrées. Redémarrez à un moment de maintenance approprié, puis confirmez avec swapon --show que le fichier a été réactivé. Vous pouvez également vérifier les procédures d'enregistrement et de validation dans Documentation de gestion du Swap Red Hat .

Désactiver et rétablir

Avant d’éteindre la mémoire d’échange, vérifiez l’utilisation et la mémoire disponible avec swapon --show et free -h. S’il n’y a pas assez d’espace pour déplacer les pages en cours d’utilisation vers une autre mémoire ou un autre swap, la désactivation peut échouer ou surcharger le système. Sur un système en fonctionnement, procédez après avoir sécurisé la capacité disponible et le temps de maintenance.

sudo swapoff /swap-manualfactory
swapon --show

Assurez-vous que l’élément cible n’est plus dans la liste active. Pour éviter qu’il ne soit réactivé au démarrage, supprimez uniquement la ligne ajoutée par cette opération dans /etc/fstab et, dans un environnement systemd, exécutez sudo systemctl daemon-reload. Pour supprimer le fichier de swap, confirmez d’abord que la désactivation a réussi et que la ligne de configuration ajoutée a été retirée, puis supprimez uniquement le fichier que vous avez créé. Laissez les autres éléments de swap ou les paramètres existants tels quels.