L'espace d'échange, plus généralement appelée ou simplement swap, est une zone d'un disque dur faisant partie de la mémoire virtuelle1) de votre ordinateur. Il est utilisé pour décharger la mémoire vive physique (RAM) si elle se remplit trop.
L'espace d'échange, dans Ubuntu, se trouve généralement sous une forme de partition de disque dur – on parle alors de partition d'échange.
Il peut aussi se présenter sous forme de fichier – on parle alors de fichier d'échange.
Par défaut, Ubuntu calcule et s'attribue automatiquement un espace d'échange suffisant ou recommandé lors de son installation. Il n'est pas nécessaire d'effectuer des tâches supplémentaires pour assigner un espace d'échange minimum à Ubuntu. Cependant, évaluer ses besoins en espace d'échange peut mieux rationaliser vos ressources.
Le présent document se veut être une présentation succincte de ce qu'est l'espace d'échange dans Ubuntu et des méthodes pour créer, modifier et supprimer de l'espace d'échange.
La mémoire vive physique (RAM) de l'ordinateur est utilisée pour stocker des données en cours de traitement.
Si celle-ci se remplit presque entièrement mais que votre ordinateur a tout de même besoin de ressources pour procéder à des traitements, Linux décidera de déplacer des fichiers de la RAM dans la Swap.
L'espace d'échange agit ainsi en tant qu'extension de votre RAM, et contiendra les données peu utilisées.
Notez cependant deux inconvénients de la Swap :
De ce fait, l'espace d'échange ne doit pas être considéré comme un remplacement de votre mémoire vive physique, mais plutôt comme un mécanisme d'appoint.
Il n'y a pas à proprement parler qu'une seule règle définissant la quantité d'espace à allouer à la zone d'échange, qu'elle soit sous forme de partitions ou de fichiers. Beaucoup de conditions entrent dans les facteurs influençant ce choix. Cependant, compte tenu des capacités des ordinateurs modernes, on peut relever des recommandations généralement acceptées :
Il est possible d'utiliser la même partition SWAP pour plusieurs distributions Linux installées en multi-boot sur le même PC. Cependant dans ce cas, il ne sera pas possible d'hiberner (L'utilisation de la Swap supprimera les informations d'hibernation).
Plus d'un espace d'échange peuvent être affectés à votre système Ubuntu. De plus, chacun de ces espaces peut être utilisé de manière inégale. Pour connaître les espaces d'échange actuellement activés dans votre système Ubuntu et leur niveau d'utilisation, utilisez la commande swapon
de la façon suivante :
swapon -s
Elle vous ressortira quelque chose comme :
Filename Type Size Used Priority /dev/sda3 partition 5241852 0 -1 /file.swap file 524284 0 -2
Ce tableau retourne les informations suivantes :
Les commandes swapon/swapoff permettent respectivement d'activer ou désactiver le swap sans redémarrage du système.
sudo swapoff -a
sudo swapon -a
sudo swapon /dev/sda6
sudo swapoff /dev/sda6
Vous pouvez alors vider la Swap en lançant successivement :
sudo swapoff -a sudo swapon -a
Le déclenchement de la Swap est réglée sur la quantité de Ram libre. (En pourcentages)
Par défaut, Ubuntu est réglé de cette façon :
À partir de 40% d'utilisation de la RAM (donc 60% de libre), le noyau peut se délester sur la swap.
On peut le vérifier grâce à la commande :
cat /proc/sys/vm/swappiness
qui vous ressortira la valeur 60
.
Pour régler l'utilisation de la Swap à 20% de RAM libre, il suffit de lancer :
sudo sysctl vm.swappiness=20
Il faut désactiver puis réactiver la Swap pour appliquer les changements :
sudo swapoff -av
(Le a
sélectionne toutes les Swaps, le v
affiche plus de détails) ce qui donne par exemple :
swapoff sur /dev/ramzswap0 swapoff sur /dev/sda6
Puis
sudo swapon -av
Pour que ces changements deviennent permanents (à chaque démarrage), vous devez éditer le fichier /etc/sysctl.conf
et y ajouter la ligne suivante :
vm.swappiness=20
Les SSD sont sensibles aux fréquentes lectures/écritures sur de la Swap, il est donc conseillé de ne pas y mettre de Swap, ou de régler la swappiness à 0 (la Swap n'est alors jamais utilisée, et vous pouvez la conserver pour l'hibernation.)
Afin d'ajouter davantage d'espace d'échange utilisable par votre système Ubuntu, nous vous recommandons la création de fichiers d'échange.
Les fichiers d'échange ont quelques avantages par rapport aux partitions d'échange. D'abord, leur ajout ou suppression n'a pas d'impact sur la table des partitions du disque dur, ce qui limite les possibles pertes de données liées au repartitionnement d'un disque dur. De cette facilité, il est aisé d'attribuer à la volée plus ou moins d'espace d'échange selon les besoins, qu'ils soient temporaires ou non. Enfin, même s'ils sont stockés dans un système de fichiers, les fichiers d'échange sont exploités directement par le noyau Linux; l'utilisation d'un espace d'échange, sous forme de partition ou de fichier, devrait être identique quant aux performances.
Cependant, un fichier d'échange ne peut pas être utilisé dans le cadre d'une mise en veille prolongée (hibernation). Pour cette utilisation, il vous faudra attribuer l'espace d'échange sous forme de partitions.
Pour créer un fichier d'échange :
fallocate
pour réserver un bloc d'espace disque à attribuer à votre espace d'échange : sudo fallocate -l <taille du fichier en octets> <nom du fichier>
fallocate
reconnaît aussi quelques suffixes, tels m
et g
, pour préciser des tailles en mibi-octets ou gibioctets. Par exemple, pour réserver 512 Mio, indiquez 512m
; pour réservez 1 Gio, indiquer 1g
;file.swap
et situé à la racine d'Ubuntu, on utilisera la commande suivante : sudo fallocate -l 512m /file.swap
Consultez le manuel de fallocate
(man fallocate
) pour plus d'informations.
chmod
: sudo chmod 600 <nom du fichier>
<nom du fichier>
représente le nom du fichier qui vient d'être créé, avec son chemin absolu si nécessaire ;file.swap
situé à la racine d'Ubuntu, on utilisera la commande suivante : sudo chmod 600 /file.swap
mkswap
: sudo mkswap <nom du fichier>
file.swap
situé à la racine d'Ubuntu, on utilisera la commande suivante : sudo mkswap /file.swap
swapon
: sudo swapon <nom du fichier>
file.swap
situé à la racine d'Ubuntu, on utilisera la commande suivante : sudo swapon /file.swap
Vous pouvez utiliser les outils de partitionnement en mode graphique fournis avec Ubuntu : Gparted (Qtparted pour Kubuntu) pour créer/modifier/redimensionner vos partitions, à condition que celles-ci ne soient pas en cours d'utilisation par le système.
Si vous avez besoin de modifier une partition utilisée par le système en permanence, utilisez un live-cd.
Le live-cd utilise la partition swap du système (si elle existe). Pour pouvoir la modifier (ou modifier la partition étendue parente), il vous faudra désactiver le swap (dans gparted : Menu Partition > désactiver le swap).
Il existe plusieurs outils en ligne de commande pour gérer vos partitions, les plus connus étant fdisk et cfdisk. Ces outils s'utilisent avec les mêmes précautions et restrictions que celles indiquées ci-dessus pour gparted.
La commande mkswap
permet de définir une partition ou un fichier comme espace d'échange. Exemple pour définir la partition /dev/sda6 comme partition d'échange :
sudo mkswap /dev/sda6
Conservez pour la suite l'UUID retourné par cette commande.
Vous pouvez ensuite activer la partition d'échange avec :
sudo swapon /dev/sda6
Pour utiliser de façon permanente cette partition, vous devez modifier votre fichier /etc/fstab
pour y modifier ou ajouter une ligne du type :
# Partition de Swap sur /dev/sda6 UUID=db245df9-851d-695b-a3f7-d40f039a6cc6 none swap sw 0 0
En précisant votre UUID précédemment obtenu.
Il reste quelques manipulations à faire pour pouvoir utiliser votre partition de Swap pour l'hibernation :
/etc/initramfs-tools/conf.d/resume
pour y renseigner le bon UUID : RESUME=UUID=db245df9-851d-695b-a3f7-d40f039a6cc6
sudo update-initramfs -u -k $(uname -r)
/etc/default/grub
, rajoutez la ligne : GRUB_CMDLINE_LINUX="resume=UUID=<votre_uuid>"
sudo update-grub
Il vaut mieux, après cela, redémarrer la machine avant d'essayer d'hiberner.
sudo blkid /dev/sda6
https://help.ubuntu.com/community/SwapFaq#How_do_I_add_more_swap.3F
Contributeurs : foustala, laurentb, krop, huit_six, claudiux, SeTtHe, fnx, les contributeurs de la documentation d'Ubuntu