Comment créer un fichier d'échange sous Linux
Optimisez l'utilisation de votre système Linux en ajoutant ou en étendant l'espace d'échange, sans vous soucier de la complexité des partitions. Voici la méthode la plus simple pour personnaliser votre espace de swap.
Gestion des fichiers d'échange et des partitions
Il existe de nombreuses raisons pour lesquelles vous pourriez souhaiter augmenter l'espace d'échange existant ou en créer un nouveau sur votre système Linux.
Votre espace de swap pourrait atteindre fréquemment sa limite ou être surchargé. Une erreur lors de l'installation peut vous amener à omettre l'ajout d'un espace d'échange. Vous avez peut-être initialement estimé que votre quantité de mémoire vive (RAM) était suffisante et que vous n'aviez pas besoin de swap, mais vous avez changé d'avis. Ou peut-être que vous administrez un système dépourvu d'espace d'échange, sans en connaître la raison.
La solution la plus simple consiste à ajouter un fichier d'échange sur votre ordinateur. Ce fichier spécial, pré-alloué et réservé, est utilisé comme espace de swap. Un fichier d'échange fonctionne en complément de tout espace d'échange existant, qu'il s'agisse d'un autre fichier ou d'une partition dédiée.
Il fut un temps où l'utilisation d'un fichier d'échange, par rapport à une partition d'échange, avait un impact négatif sur les performances. Ce n'est plus le cas grâce aux améliorations des disques durs mécaniques (rotatifs) et à l'efficacité des fonctions d'échange au sein du système d'exploitation Linux. D'ailleurs, certaines distributions Linux optent désormais pour la création de fichiers d'échange par défaut au lieu de partitions d'échange.
Le swap ne sert pas uniquement à libérer de la RAM lorsque la mémoire est insuffisante. Il est essentiel au bon fonctionnement du système. Sans espace d'échange, le noyau a plus de difficultés à gérer la mémoire de manière optimale. Voyons comment ajouter facilement de l'espace d'échange.
Considérations préliminaires : Btrfs et SSD
Deux points nécessitent une brève discussion.
Le système de fichiers BTRFS présente certaines particularités concernant les fichiers d'échange. Auparavant, il y avait une incompatibilité entre la nature de copie sur écriture de Btrfs et la manière dont les fichiers d'échange devaient fonctionner. Certaines fonctions indispensables aux fichiers d'échange n'étaient pas implémentées, et certaines hypothèses concernant la numérotation des blocs dans ces fichiers étaient invalides avec Btrfs. Par conséquent, les fichiers d'échange n'étaient pas pris en charge.
Depuis le noyau 5.0, les fichiers d'échange sont possibles dans les systèmes de fichiers Btrfs s'ils sont configurés selon les exigences suivantes :
- Pas de copie sur écriture (NOCOW).
- Non compressés.
- Ne pas chevaucher différents disques durs.
La plupart des utilisateurs utilisent le système de fichiers ext4 par défaut, ce qui ne posera pas de problème.
À l'arrivée des SSD (Solid State Drives), l'utilisation de ces derniers dans des situations avec de fréquentes écritures système était une source d'inquiétude. Il était déconseillé d'installer l'espace d'échange sur des SSD, et même d'éviter la journalisation du système.
Ces préoccupations sont moins importantes aujourd'hui, et de nombreux SSD disponibles ont une durée de vie supérieure à celle de la plupart des PC. Un fichier d'échange sur un SSD offrira de meilleures performances qu'une partition d'échange sur un disque dur mécanique.
Vérification de l'espace de swap existant
Avant d'agir, vérifions l'espace de swap disponible sur votre ordinateur. Nous utiliserons deux méthodes différentes. La commande "free" affiche la mémoire utilisée et libre. L'option "-h" (lisible par l'homme) permet d'afficher les valeurs de mémoire dans des unités appropriées.
free -h
La sortie de "free" indique qu'aucun espace d'échange n'est configuré sur cette machine.
L'espace d'échange est toujours lié à la RAM et à la RAM libre. Il convient donc de noter que la RAM libre est de 237 Mo. Cela ne correspond pas à la RAM totale disponible. Cette valeur est indiquée par le chiffre "disponible", qui est de 881 Mo.
Linux utilise de la RAM libre à des fins propres, comme la mise en cache de fichiers et les tampons du noyau. La quantité de RAM dédiée à cet usage est le chiffre "buf/cache", qui est de 871 Mo. Cependant, cette mémoire est toujours considérée comme "disponible". Le contenu de la RAM "buf/cache" peut être immédiatement libéré et utilisé par toute application nécessitant de la mémoire.
Une autre manière de vérifier la disponibilité de l'espace d'échange est la commande "swapon". L'option "--show" ne modifie pas le swap de votre ordinateur. Elle ne fournit que des statistiques.
swapon --show

Si cette commande ne retourne aucune sortie, c'est qu'aucun espace d'échange n'est configuré.
Si ces commandes avaient révélé qu'un espace d'échange était déjà configuré, sa taille doit être prise en compte lors du choix de la taille du nouveau fichier d'échange.
Quelle quantité d'espace d'échange est nécessaire ?
La réponse traditionnelle était "deux fois la quantité de RAM dont vous disposez". Cette règle date de l'époque où les ordinateurs avaient une RAM très limitée. La RAM étant devenue plus abordable et les programmes et jeux plus gourmands en mémoire, les spécifications des PC se sont adaptées. Il n'est pas rare de nos jours d'avoir des ordinateurs personnels avec 32 Go de RAM. Il serait excessif d'allouer 64 Go d'espace disque pour le swap si vous avez 32 Go de RAM.
La quantité de swap nécessaire est un sujet de débat passionné, comparable à "quel est le meilleur éditeur de texte ?". L'une des discussions les plus éclairées que nous ayons vues sur ce sujet se trouve dans la FAQ sur le swap d'Ubuntu. Ils proposent une approche courte et raisonnable (bien que, comme beaucoup, ils comprennent mal le fonctionnement du swap sous Linux). Un tableau pratique indique la quantité d'espace de swap recommandée en fonction de la quantité de RAM de votre système et selon que vous mettiez ou non votre ordinateur en veille prolongée.
La bonne nouvelle est que la valeur que vous choisirez importe peu. Nous pouvons toujours supprimer un fichier d'échange et le remplacer par un fichier plus grand ou plus petit. Ou vous pouvez simplement ajouter un autre fichier d'échange.
Choisissez une taille de fichier d'échange à partir du tableau et utilisez-la pendant un certain temps. Surveillez l'utilisation de l'espace d'échange par votre système. Si un ajustement est nécessaire, des modifications peuvent être apportées facilement. Avec les fichiers d'échange, cela prend deux minutes. Comparez cela à l'ajustement des partitions sur un ordinateur Linux en cours d'exécution.
Création du fichier d'échange
Vous ne devriez pas utiliser la commande "fallocate" pour créer votre fichier d'échange. Voici ce qui est indiqué sur la page de manuel de "swapon" :
La mise en œuvre du fichier d'échange dans le noyau s'attend à pouvoir écrire directement dans le fichier, sans l'assistance du système de fichiers. Ceci pose problème pour les fichiers avec des trous ou pour les fichiers en copie sur écriture sur des systèmes de fichiers tels que Btrfs. Les commandes telles que cp(1) ou truncate(1) créent des fichiers avec des trous. Ces fichiers seront rejetés par swapon. Les fichiers pré-alloués créés par fallocate(1) peuvent également être interprétés comme des fichiers avec des trous, selon le système de fichiers. Les fichiers d'échange pré-alloués sont pris en charge sur XFS depuis Linux 4.18. La solution la plus portable pour créer un fichier d'échange est d'utiliser dd(1) et /dev/zero.
Bien que "fallocate" soit plus rapide, nous utiliserons "dd" pour créer le fichier d'échange. La machine utilisée pour cet article possède 2 Go de RAM. Nous allons créer un fichier d'échange de 1 Go.
Voici les options :
- if : le fichier d'entrée. Dans cet exemple, nous utilisons /dev/zero qui fournira un flux d'octets nuls.
- of : le fichier de sortie. Nous allons créer un fichier dans le répertoire racine, appelé swapfile.
- bs : la taille du bloc en octets. Cela spécifie le nombre d'octets à lire à partir du fichier d'entrée et à écrire dans le fichier de sortie.
- count : le nombre de blocs à lire et à écrire. Multipliez ce nombre par la valeur "bs" pour obtenir la taille du fichier.
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Des statistiques sont fournies lors de la création du fichier.

Nous pouvons voir le nombre de blocs (enregistrements) écrits dans le fichier, la taille du fichier, le temps nécessaire à sa création et le taux de transfert de données effectif.
Utilisez la commande "ls" pour afficher le fichier dans le répertoire racine :
ls /

Préparation du fichier d'échange
Avant de pouvoir l'utiliser, nous devons préparer le fichier d'échange avec la commande "mkswap". Nous n'avons pas besoin de fournir de paramètres à "mkswap" autres que le chemin et le nom du fichier :
sudo mkswap /swapfile

Le fichier est préparé pour être utilisé comme fichier d'échange. Notez l'avertissement concernant les autorisations de fichier. Nous devrons les modifier afin que seul l'utilisateur root puisse lire et écrire dans le fichier d'échange.
Utilisation du fichier d'échange
Les autorisations par défaut sont trop permissives. Nous devons les restreindre afin que seul root puisse utiliser le fichier d'échange. Utilisez "chmod" pour modifier les autorisations du fichier :
sudo chmod 600 /swapfile

Cela supprime toutes les autorisations pour les membres du groupe de fichiers et autres, mais permet au propriétaire du fichier, root, de lire et d'écrire dans le fichier.
Nous devons utiliser la commande "swapon" pour indiquer à Linux qu'un nouveau fichier d'échange est disponible. Il suffit de fournir le chemin et le nom du fichier :
sudo swapon /swapfile

Le fichier d'échange est maintenant actif.
Ajout du fichier d'échange à fstab
Pour vous assurer que votre fichier d'échange est disponible après un redémarrage, ajoutez-le au fichier /etc/fstab. Vous pouvez utiliser l'éditeur de texte de votre choix, mais nous illustrerons le processus avec l'éditeur de texte graphique Gedit.
sudo gedit /etc/fstab

La ligne à ajouter à la fin du fichier est :
/swapfile none swap sw 0 0

Les champs sont les suivants :
- Système de fichiers : chemin et nom du fichier d'échange.
- Point de montage : le fichier n'étant pas monté comme un système de fichiers, l'entrée est "none".
- Type : il s'agit de "swap".
- Options : au démarrage, "swapon -a" (démarrer tous les périphériques marqués comme swap) est appelé à partir d'un script de démarrage. Cette option indique à Linux de considérer cette entrée comme une ressource d'échange qui doit être gérée par cette commande "swapon -a". On observe souvent des "defaults" utilisés ici, en raison d'une croyance erronée selon laquelle ce champ est ignoré. Comme nous allons le voir, ce n'est pas le cas. Il est donc logique d'utiliser la bonne option.
- Dump : peut être mis à zéro. Ce n'est pas pertinent ici.
- Pass : peut être mis à zéro. Ce n'est pas pertinent ici.
Enregistrez les modifications et fermez l'éditeur.
Vérification de l'utilisation du swap
Pour voir si votre espace d'échange est utilisé, utilisez la commande "swapon" avec l'option "--show" :
swapon --show

Les colonnes sont les suivantes :
- Nom : nom de la partition ou du fichier d'échange.
- Type : le type de périphérique d'échange.
- Taille : la taille de la ressource d'échange.
- Utilisé : la quantité d'espace de swap utilisé.
- Prio : la priorité de cet espace d'échange.
Priorité de l'espace d'échange
Chaque espace d'échange se voit attribuer une priorité. Si vous n'en indiquez pas, une priorité est attribuée automatiquement. Les priorités attribuées automatiquement sont toujours négatives. La plage de priorités pouvant être attribuée manuellement est comprise entre 0 et 32767. Les ressources d'échange ayant une priorité plus élevée sont utilisées en premier.
Si plusieurs espaces d'échange ont la même priorité, ils sont utilisés en alternance jusqu'à ce qu'ils soient tous les deux pleins, puis le système recherche l'espace d'échange ayant la priorité inférieure suivante. Si vous n'avez qu'un seul espace d'échange, la priorité n'a bien sûr pas d'importance. Nous allons modifier la priorité du fichier d'échange que nous avons créé pour illustrer la procédure.
Pour définir une priorité, ajoutez l'option "pri=(priorité)" à l'entrée /etc/fstab. Modifiez la ligne que vous avez ajoutée à /etc/fstab pour qu'elle ressemble à ceci :
/swapfile none swap sw,pri=10 0 0
Autrement dit, ajoutez "pri=10" dans le champ d'options, séparé du "sw" par une virgule. Ne laissez pas d'espace entre "sw", la virgule et "pri=10". Redémarrez votre ordinateur et utilisez la commande "swapon --show" :
swapon --show

La priorité de cet espace d'échange est passée à 10. Cela prouve que le champ d'options de l'entrée /etc/fstab n'est pas ignoré.
L'espace d'échange simplifié
Après ces explications, nous pouvons créer un nouveau fichier d'échange aussi facilement et rapidement que ceci :
sudo dd if=/dev/zero /of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2
Et vérifions que cela a fonctionné :
swapon --show

Pour rendre cet ajout permanent, intégrez-le dans votre fichier /etc/fstab.
Voilà. Travail accompli.