On peut se demander à quoi sert le SWAP aujourd’hui sur nos distributions Linux, sur des machines possédant souvent 1024Mo de RAM, voir beaucoup plus… Mais alors, le swap, qu’est-ce que c’est et à quoi ça sert ? et en a-t-on encore réellement besoin ? doit-on dire « le » ou « la » swap ? (pour cette dernière, j’en sais rien, je dirais « le » 😉 ), c’est au travers de ce billet que j’ai voulu apporter ma réponse.
Explications
Le swap sous Linux est nécessaire pour faire fonctionner son système de manière optimale, même avec beaucoup de mémoire. L’espace de swap permet au système d’y inscrire toutes les données temporaires nécessaires aux fonctionnement des programmes en cours d’exécution : en gros, on y trouve tout ce qui est utilisé pour la mémoire virtuelle.
L’ajout de SWAP peut être intéressant pour des systèmes sous Linux nécessitant d’avoir de fortes disponibilités en termes d’exécution de programmes particulièrement gourmands en ressources mémoires : serveur d’échange de fichiers, serveur de calculs, logiciels de traitement vidéos, 3D…
Par exemple, si un programme n’est pas utilisé pendant un certain temps (plusieurs heures ou plusieurs jours), Linux peut décider de le placer en espace « swap ». Ceci ayant pour avantage de libérer de l’espace en RAM et augmenter la taille du cache disque, et donc d’augmenter les performances des accès aux disques et ainsi accroître les performances globales du système.
Autre cas ou le swap a son importance : les fonctions d’hibernation. En cas de mise en hibernation, Linux copie les données contenues dans la mémoire vive sur le swap, et éteint l’ordinateur. A la remise en marche, il retrouve les données en swap dans l’état où il les a laissé, les programmes retrouvent toutes leurs données utilisées auparavant et reprennent le travail là où ils en étaient, d’où un gain de temps : en RAM (mémoire vive), toutes les données auraient été effacées et les applications auraient dues se réinitialiser.
Si l’utilisateur a de nouveau besoin de réutiliser le programme « passé » en swap, il ne faudra que quelques fractions de secondes pour que le tout repasse en RAM, d’où l’importance de bien tailler cet espace de swap.
Par convention, il est recommandé que la taille de SWAP fasse entre x1,5 à x2 de la mémoire RAM disponible sur la machine:
Ainsi, pour 1024 Mo (1Go) de RAM, il est recommandé de réserver 2048 Mo (2Go) de SWAP.
Bien sure, on peut se passer de swap mais si la mémoire physique (RAM) arrive à saturation, le système risque de se bloquer complètement.
Donc je vous conseille de toujours faire un petit swap. Mais alors comment faire lorsque l’on ne l’a pas prévu au départ lors de l’installation ou mal « taillé » ? pas de panique, avec Linux il est très simple d’ajouter ou redimensionner sa taille de swap, et cela directement au travers d’une console à l’aide de quelques lignes de commandes.
La pratique
Ici, on va voir comment rajouter de la swap directement à l’aide du shell. Évidemment, il existe des outils graphiques tel Gparted sous Ubuntu pour faire ce travail, mais je trouve qu’avec un peu d’habitude, il est plus rapide et sécuritaire de le faire en lignes de commandes.
Modifier les partitions après l’installation est toujours une opération risquée. Assurez-vous d’avoir sauvegardé toutes vos données sur un autre support au préalable.
Déjà, 2 solutions s’offrent à nous : soit une partition complète de swap, dîtes « partition d’échange », soit un fichier « swapfile » ou fichier d’échange.
En effet, on peut créer un swap sans pour autant avoir une partition dédiée. A la place, un simple fichier sur une partition traditionnelle (montée sur / par exemple) est suffisante. On peut même combiner une partition de swap et un « swapfile », si la première s’avère trop petite.
Il est préférable de se servir d’une partition d’échange plutôt que d’un fichier d’échange, pour des raisons que je ne détaillerais pas plus (notion de blocs disques contigus,…).
Cependant, on se retrouve souvent sur une machine déjà configurée avec des partitions spécifiques, et pas forcement avec encore suffisamment d’espace disque non-formaté disponible pour se créer une partition. C’est là que le swapfile devient intéressant, et c’est la solution que l’on va développer dans les lignes suivantes.
1. Préparation
Ouvrons tout d’abord une console afin d’entrer nos commandes en se connectant en super-administrateur avec un:
sudo su
Viennent quelques commandes qui vont être utiles pour connaitre la configuration actuelle du système (swap disponible, espace libre, etc…):
Connaitre l’espace de swap actuel:
more /proc/swaps
Connaitre les informations mémoire du système (CTRL+C pour sortir):
more /proc/meminfo
Connaitre l’espace disque disponible des différentes partitions:
df -ah
2. Créer un fichier
Pour créer ce fichier d’échange, il va falloir utiliser la commande dd pour convertir et copier des volumes de données.
Il va aussi falloir connaitre le nom, l’emplacement et la taille du fichier de swap que l’on va créer.
Placez-vous déjà dans votre espace utilisateur, aussi appelé « home directory » en entrant les commandes suivantes dans une console:
cd
pwd
Ensuite on va créer le fichier file.swap d’une taille de 512Mo à l’aide de la commande suivante:
sudo dd if=/dev/zero of=/file.swap bs=1024 count=512000
Explication : la commande dd crée et copie des zéros dans le fichier file.swap contenant 512000 blocs de 1024 octets chacun, soit un fichier approximatif de 512 Mo (voir 524 Mo).
Vous pouvez « flusher » le nouvel espace créé dans le système de fichier par la commande:
sync
3. créer le système de fichier pour le fichier d’échange
On utilise à présent « mkswap » pour formater le fichier en tant qu’espace d’échange ou de « swap »:
sudo mkswap /file.swap 512000
Il ne faut pas oublier de passer la taille du fichier à la commande mkswap, de la même taille que celle définie lors de la création du fichier.
4. activer ou désactiver le fichier d’échange à la volée
Il est à présent possible d’activer ou désactiver ce fichier d’échange à l’aide de 2 simples commandes.
La commande :
sudo swapon /file.swap
active la partition de swap et s’ajoute à l’existante si elle existe. la commande « more /proc/swaps » vue plus haut devrait vous montrer le nouvel espace de swap nommé file.swap.
La commande :
sudo swapoff /file.swap
désallouera l’espace utilisé par le fichier d’échange et celui-ci pourra être effacé en toute sécurité.
PS:
Je complèterai ce billet pour la gestion de partitions de swap ainsi que l’auto-montage dés que j’aurais un peu plus de temps.
Wow! J’ai consulté le site à plusieurs occasions et il m’a été d’un grand secours. J’ai particulièrement apprécié l’article « Ajouter du SWAP sous Linux ». Je vous remercie
merci de cet article. ayant un serveur(gentoo64) avec 2go RAM j’ai voulu ajouter un swap de 2go en ajout du swap disque de 1 Go de la config. J’ai suivi votre article et j’ai fait :
dd if=/dev/zero of=/home/monswap bs=2048M count=1
Le serveur s’est bloqué, aucun accés impossible d’arrêter cette commande avec ctrl C j’ai du rebooté
Qu’ai je fais comme erreur? ;-(
merci de votre aide
@Susan: merci Susan, content que ça ait pu t’aider.
@jaris: Tu ne peux pas rajouter 2048Mo en un bloc, ou plutôt ce n’est pas recommandé. il se peut que ta RAM n’ait pas assez d’espace pour créer ce fichier en un seul morceau, car tu auras peu de chance d’avoir 2048Mo de place contiguë pour créer un tel fichier. Il faut alors essayez de créer le fichier en plusieurs morceaux, par exemple en faisant :
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048000
Cette taille doit impérativement être un multiple de la taille d’un secteur du support physique de données, parce que les blocs ne peuvent contenir qu’un nombre entier de secteurs.
Pour un disque dur, la taille des secteurs est fixée à 512 octets, perso j’utilise 1024 octects pour Linux, donc la taille d’un bloc sera d’au moins 512 voir 1024 octets.
Ensuite, il faut que tu fixe le nombre d’inodes de ta partition. Le nombre total d’inodes utilisé sera alors calculé à partir de ce nombre d’octets et de la taille de la partition.
le nombre maximal d’inodes = nombre total de blocs, puisque tout fichier non vide requiert au moins un bloc et que chaque inode caractérise un fichier.
Si tu ne sais pas quelles valeurs prendre, tu peux utiliser des blocs de 1024 octets (2 secteurs), et un rapport de 4096 octets par inode (donc de 4 blocs de 1 Ko par inode).
voilà, j’espère que ça pourra t’aider 😉
merci pour cette réponse très instructive 😉
j’ai moi même 2 go et ta réponse ma bien aider 🙂
Merci pour ce merveilleux site, tu explique pas a pas les choses a faire, et c’est très appréciable.
bonne continuation a toi 😉
Merci pour cet article qui m’a également aidé plusieurs fois 🙂
merci infiniment pour ce site très instructif.
je fais mes premiers pas dans linux à travers le net
et je cherchais une explication fiable sur le swap,
je suis assez éclairé maintenant, je vous en suis très reconnaissant. merci pour le site.
Merci… Ça marche très bien, et ça permet beaucoup de flexibilité. J’ai une veille machine avec 1Go en DDR1, du coup difficile de pousser les performances en rajoutant des barrettes. Encore merci.
merci beaucoup pour cette info ! j ai un netbook a 1GO ca ma permi de le soulager 😉
merci pour le tuto
parcque je n’avais trouvé comment rajouter/ajuster le swap à l’installation du dvd
muchas gracias
Merci beaucoup pour ce tuto!!
Petite question : mon fichier swap se désactive à chaque fois que j’éteins l’ordinateur. Y a-t-il un moyen pour que ce fichier swap soit activé automatiquement au démarrage de linux?
Bonjour,
Tu dois pouvoir ajouter ton fichier de swap avec la commande:
echo '/mnt/file.swap swap swap defaults 0 0' | sudo tee -a /etc/fstab
Cela montera ton fichier de swap au boot (via le fichier /etc/fstab.
Pour plus d’information, tu peux consulter l’aide Ubuntu FAQ qui est beaucoup plus détaillée et maintenue que le blog actuel ;-):
Ubuntu Swap Faq
Quelques remarques cependant:
Dans le cas où tu as des fichiers systèmes sur un SSD, il est toujours mieux d’avoir le swap file sur un disque dur de préférence…
Notez aussi que tu ne pourras pas utiliser le swap file lors de l’hibernation (voir Ubuntu SwapFaq)
Enfin depuis Ubuntu >= 17.04: Un swap sur fichier /swapfile est créé par defaut lors d’une nouvelle installation (quand aucune partition swap n’est présente). Evidemment, tu pourras créer manuellement une partition swap par la suite si necessaire.
Bonjour,
J’ai 4Go de ram physique, j’aimerai passer mon swap au double au moins ou plus même si possible.
J’ai apparemment juste 2 Go de swap et c’est pas suffisant, j’ai énormément de freeze écran notamment.
N’étant pas un grand habité du teminal, quel serait exactement les lignes commandes pour agrandir ma swap?
Surtout dans les chiffres à rajouter car j’ai l’impression qu’il faut être précis?
En vous remerciant
merci bien.Tuto tres clair et pratique