Code « machine à écrire »
/show
L'espace d'échange, aussi appelé par son terme anglais swap space 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) de votre ordinateur lorsque celle-ci arrive à saturation. 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 cet 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, votre système d'exploitation peut déplacer temporairement des pages mémoire vers l'espace d'échange défini dans votre disque dur afin de libérer des ressources mémoire. L'espace d'échange agit ainsi en tant qu'extension de votre mémoire vive physique : elle récupère, au besoin, des blocs mémoire en excès de votre mémoire vive physique.
Notez cependant que l'espace d'échange se situant dans votre disque dur, l'accès aux données contenues dans celui-ci est plus lent que celles contenues directement dans la RAM. De plus, l'utilisation de l'espace d'échange ralentit significativement le système et entraîne une activité permanente du disque dur (bruits de "grattements"), provoquant une usure prématurée du matériel. 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.
La plupart des systèmes d'exploitation – sinon tous – gèrent un espace d'échange. Avec les systèmes d'exploitation de type GNU/Linux, dont fait partie Ubuntu, cette zone d'échange se présente généralement sous la forme d'une partition de disque dur dédiée à cet effet. À titre comparatif, Microsoft® Windows® utilise un ou des fichiers dans chacun de ses volumes afin de jouer ce rôle. Il est aussi possible de créer et utiliser des fichiers assurant un espace d'échange.
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 :
Lire : https://www.howtogeek.com/449691/what-is-swapiness-on-linux-and-how-to-change-it/
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 copier une partie de la RAM dans la swap.
On peut le vérifier grâce à la commande :
cat /proc/sys/vm/swappiness
qui avec les réglages par défaut, répond "60".
L'application de cette procédure avec une valeur faible du swappiness n'est pas conseillée :
–> sur un poste multi-utilisateurs,
–> sur un ordinateur partageant une(des) ressource(s) au sein d'un réseau,
–> en cas d'utilisation d'applications demandant d'importantes ressources mémoire (cf §2.1),
La valeur de 60 définie par les concepteurs du système garantit un fonctionnement correct quelle que soit votre configuration. La valeur minimale conseillée par canonical [source ?] est swappiness=10. La valeur de 5 apporte un gain notable en vélocité, surtout sur les machines peu dotées en RAM. La valeur de zéro provoque le gel du système quand la RAM est utilisée à 100% et ne suffit plus.
Cette procédure crée un fichier 99-swappiness.conf qui stocke vos réglages les rendant actifs au prochain redémarrage.
echo vm.swappiness=5 | sudo tee /etc/sysctl.d/99-swappiness.conf
echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.d/99-swappiness.conf sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
Puis il faut demander une actualisation du service ( depuis une mise à jour du noyau 20.04)
sudo service procps restart
Il faut désactiver et réactiver l'utilisation du fichier d'échange pour que les réglages deviennent actifs immédiatement :
sudo swapoff -av sudo swapon -av
(Dans cet exemple, le réglage passe à 80% de RAM utilisée)
sudo sysctl vm.swappiness=20
Ensuite désactivez puis réactivez la swap pour que les changements deviennent actifs :
sudo swapoff -av sudo swapon -av
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 plusieurs systèmes simultanément (la dernière hibernation écrasera les données de la précédente).
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
Le terminal vous affiche le résultat de cette commande sous forme de tableau. Ce tableau retourne les informations suivantes :
Voici un exemple du retour de cette commande :
Commande : swapon -s
utilisateur@Nomdel'Ordinateur:~$ swapon -s Filename Type Size Used Priority /dev/sda3 partition 5241852 0 -1 /file.swap file 524284 0 -2
Terminal
NB : l'option "-s" est obsolète. Utiliser "--show" qui affiche un résultat mieux formaté. Exemple :
[user@host~} swapon --show NAME TYPE SIZE USED PRIO /dev/sda5 partition 2,3G 365,9M -2
Afin d'ajouter davantage d'espace d'échange utilisable par votre système Ubuntu, nous vous recommandons la création de fichiers d'échange ou bien si vous voulez tout simplement remplacer une partition swap par un fichier.
Les fichiers d'échange ont quelques avantages par rapport aux partitions d'échange.
Pour commencer, 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 à la modification à posteriori du système de partitions d'un disque dur. Par conséquent, 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.
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
/etc/fstab
et lui ajoutant : #Entry for /swapfile : /file.swap none swap sw 0 0
Et commentez la ligne qui concerne l'ancienne partition swap que vous pourrez désormais supprimer.
/etc/initramfs-tools/conf.d/resume
: #RESUME=UUID=1e1ebf39-2de7-4181-a504-4e317fd8db9c
/home
), créez le fichier swap sous le point de montage (par exemple /home/file.swap
) et assurez vous que dans le fichier /etc/fstab
, la ligne concernant le swapfile se trouve après la ligne qui indique le montage du disque HDD.
Pour supprimer un fichier d'échange :
swapoff
: sudo swapoff <nom du fichier>
file.swap
situé à la racine d'Ubuntu, on utilisera la commande suivante : sudo swapoff /file.swap
sudo rm /file.swap
#Entry for /swapfile : /file.swap none swap sw 0 0
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.
Les commandes swapon/swapoff permettent respectivement d'activer ou désactiver le swap sans redémarrage du système. Exemple :
sudo swapoff /dev/sda6
désactivera la partition d'échange présente sur /dev/sda6
sudo swapon /dev/sda6
activera la partition d'échange présente sur /dev/sda6
sudo swapoff -a
On peut ensuite réactiver le swap avec la commande :
sudo swapon -a
Ainsi le swap sera vidé mais toujours disponible en cas de besoin.
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
Vous pouvez ensuite activer la partition d'échange avec :
sudo swapon /dev/sda6
Pour rendre cette modification permanente vous devrez également modifier votre fichier /etc/fstab pour y modifier ou ajouter une ligne du type :
# /dev/sda6 UUID=db245df9-851d-695b-a3f7-d40f039a6cc6 none swap sw 0 0
Et afin que vos mises en veille et hibernations se produisent correctement, vous devrez de même modifier le fichier /etc/initramfs-tools/conf.d/resume pour y renseigner le bon UUID :
RESUME=UUID=db245df9-851d-695b-a3f7-d40f039a6cc6
et ensuite, le faire prendre en compte par le système :
sudo update-initramfs -u -k $(uname -r)
Il vaut mieux, après cela, redémarrer la machine.
sudo blkid /dev/sda6
sudo mkswap -U <l'UUID desirée> /dev/<votre partition>
GRUB_CMDLINE_LINUX="resume=UUID=<votre_uuid>"
Sur mon système (11.04 32 bits) j'ai dû modifier cette ligne (ainsi que /etc/initramfs-tools/conf.d/resume) et actualiser grub (comme indiqué dans la doc citée), avant de réactualiser initramfs, pour que l'hibernation fonctionne.
Petit détail cependant : mon deuxième sudo update-initramfs n'avait pas comme option -k $(uname -r), mais d'après man update-initramfs je pense que cela ne devrait pas être la source de la différence de comportement.
Puisque l'espace d'échange se trouve dans le disque dur, ceci peut causer quelques problèmes de performances dans un système l'utilisant massivement, car le système peut essayer de lire et écrire à la fois des pages mémoire dans l'espace d'échange et des fichiers situés ailleurs dans le disque dur. Une manière de réduire cet effet de compétition d'accès aux ressources du disque dur consiste à fractionner l'espace d'échange sur plusieurs disques durs physiques. Ainsi, l'espace d'échange étant partagé entre plusieurs périphériques, la compétition pour l'accès aux ressources est réduite – voire éliminée.
zRAM permet de compresser la RAM si besoin, afin d'éviter/retarder le swap disque (car le swap disque est de nos jours très lent par rapport à la vitesse de traitement en RAM, même sur les anciennes machines avec peu de RAM le bénéfice est généralement visible)
Il est possible d'encrypter sa partition swap. Il semblerait que cette option s'active automatiquement dès lors que l'utilisateur choisit de chiffrer sa partition home à l'installation, ce qui est recommandé.
$ sudo mkswap /dev/sdaX Setting up swapspace version 1, size = 4194300 KiB no label, UUID=9da9cf5e-2ac7-95b9-6156-a0ecffef2e99 $ sudo swapon /dev/sdaX
* Exécuter ensuite le script ecryptfs-setup-swap (inclus dans le paquet ecryptfs-utils) :
$ sudo ecryptfs-setup-swap WARNING: An encrypted swap is required to help ensure that encrypted files are not leaked to disk in an unencrypted format. HOWEVER, THE SWAP ENCRYPTION CONFIGURATION PRODUCED BY THIS PROGRAM WILL BREAK HIBERNATE/RESUME ON THIS SYSTEM! NOTE: Your suspend/resume capabilities will not be affected. Do you want to proceed with encrypting your swap? [y/N]: y INFO: Setting up swap: [/dev/sdaX] * Stopping remaining crypto disks... * cryptswap1 (stopped)... [ OK ] * Starting remaining crypto disks... * cryptswap1 (starting).. * cryptswap1 (started)... [ OK ] INFO: Successfully setup encrypted swap!
Le script effectue la modification automatique des fichiers crypttab and fstab.
* Pour vérifier le résultat :
$ grep -F "/dev/sdaX" /etc/crypttab cryptswap1 /dev/sdaX /dev/urandom swap,cipher=aes-cbc-essiv:sha256 $ grep -F "cryptswap1" /etc/fstab /dev/mapper/cryptswap1 none swap sw 0 0
Les lignes qui suivent permettent de basculer d'une swap normale à une swap cryptée, et vice-versa.
$ sudo ecryptfs-setup-swap
Difficile de faire plus simple.
La démarche est un peu plus complexe. Elle nécessite de désactiver la swap, de supprimer la couche ecryptfs, de reformater la partition en mode swap ordinaire puis de l'activer (pour mémoire fdisk -l ou blkid vous permettront de retrouver le numéro de la partition qui est du type /dev/sdaN; N étant le numéro de la partition).
$ sudo swapoff -a $ sudo cryptsetup remove /dev/mapper/cryptswap1 $ sudo vim /etc/crypttab
Dans votre éditeur de texte préféré, supprimer la ligne /dev/sdaN puis enregister.
sudo /sbin/mkswap /dev/sdaN sudo swapon /dev/sdaN sudo vim /etc/fstab
À nouveau dans votre éditeur de texte préféré, supprimer la ligne /dev/mapper/cryptswap1 avec /dev/sdaN puis enregistrer. Redémarrer pour activer la modification.
Contributeurs : foustala, laurentb, krop, huit_six, claudiux, SeTtHe, fnx, eagle08,
les contributeurs de la documentation d'Ubuntu