Meilleur moyen de désactiver le swap sous Linux

54

J'utilise un noyau 3.18.9 compilé personnalisé et je me demande quel est le meilleur moyen de désactiver le swap sur le système. J'utilise aussi init si cela fait une différence.

Est-il suffisant de commenter ou de supprimer la ligne de swap /etc/fstabpour empêcher le swap de fonctionner / monter au démarrage ou dois-je recompiler le noyau sans Support for paging of anonymous memory (swap)être sûr à 100% qu'il n'est pas activé?

Je lance des partitions chiffrées et je veux éviter les fuites accidentelles sur le disque dur. Les spécifications de mon système sont également suffisamment importantes pour que je puisse survivre dans un environnement sans échange.

utilisateur283167
la source
Pourquoi votre échange n'est-il pas crypté?
Michael Hampton
@ MichaelHampton Je n'ai pas vu un besoin au moment où j'ai réalisé ce qui allait arriver. De plus, mon système n’atteint pas le point d’être utilisé à un moment quelconque de la permutation; je me sens donc libre de l’enlever.
user283167
Je supprimerais alors la fonctionnalité du noyau. Sinon, quelqu'un peut brancher une clé USB et recommencer à l'échanger.
ott--
@ott L'utilisateur n'a-t-il pas besoin d'un accès superutilisateur pour utiliser l'exécutable swapon / swapoff? Je pourrais le désactiver à nouveau au cas où, mais je ne suis pas certain qu'un utilisateur non privilégié puisse créer des fichiers d'échange.
user283167
En effet, il a besoin d'un accès super utilisateur, ce qu'il pourrait faire avec un exploit, par exemple. Mais regardez-vous votre serveur 24h / 24?
ott--

Réponses:

76
  1. Identifiez les périphériques et fichiers d'échange configurés avec cat /proc/swaps.
  2. Désactivez tous les périphériques et fichiers d'échange avec swapoff -a.
  3. Supprimez toute référence correspondante trouvée dans /etc/fstab.
  4. Facultatif: Détruisez les périphériques de swap ou les fichiers trouvés à l'étape 1 pour empêcher leur réutilisation. En raison de vos préoccupations concernant la divulgation d'informations sensibles, vous pouvez envisager d'effectuer une sorte d'effacement sécurisé.

homme swapoff

Aaron Copley
la source
Sur certains systèmes, vous devez également reconstruire l' initrdarchive, par exemple avec dracut --regenerate-all --forceou mkinitrd, sinon le système ne démarrera pas. Merci à JO Aho et Carlos ER pour alt.os.linux.suse.
Ant_222
10

Si vous êtes vraiment sûr de vouloir désactiver le swapping (remarque: ceci n'est pas recommandé, même si vous êtes presque sûr que la RAM physique est amplement suffisante), procédez comme suit:

  1. run swapoff -a: cela désactivera immédiatement le swap
  2. supprimer toute entrée d'échange de /etc/fstab
  3. rebootle système. Si l'échange est parti, bien. Si, pour une raison quelconque, il est toujours là, vous devez supprimer la partition de swap. Répétez les étapes 1 et 2, puis utilisez fdiskou partedpour supprimer la partition de swap (maintenant inutilisée). Faites très attention ici: supprimer la mauvaise partition aura des effets désastreux!
  4. reboot
Shodanshok
la source
1
Pourquoi n'est-il pas recommandé de désactiver le swap même si vous avez suffisamment de RAM?
Rolf
1
Parce que Linux utilise de manière proactive la partition de swap pour libérer plus de mémoire pour la mise en cache. Cela peut améliorer les performances. Quoi qu'il en soit, c'est un paramètre ajustable. Pour plus d'informations, lisez ici . En outre, une augmentation imprévue de l’allocation de mémoire dans un système swapless peut déclencher la destruction du MOO par le noyau.
Shodanshok
1
Merci, c'est raisonnable. Néanmoins, je pensais que si "assez de RAM" (par exemple: 8 ou 16 Go) est plein, il s'agit probablement d'une sorte de situation exceptionnelle (application avec une fuite de mémoire ou un autre problème de fuite, attaque DDOS, etc.) dans laquelle même l’échange finira par être dépassé de toute façon. Peut-être que je ne fais pas un argument très convaincant, mais cela ne devrait pas arriver dans une utilisation de bureau légère.
Rolf
9

Auparavant, seules les partitions swap /etc/fstabétaient utilisées automatiquement. Cependant, systemd peut changer cela légèrement. Vous pourriez avoir besoin de faire:

systemctl mask dev-sdXX.swap

(changez sdXX) sur votre vraie partition swap formatée, ce qui soulève la question de savoir pourquoi vous avez une partition swap si vous ne voulez pas qu'elle soit utilisée ...

Si vous n'utilisez pas systemd, supprimer les entrées de swap /etc/fstabdevrait suffire (pour autant que je sache).

Peut-être que la vraie solution consiste à supprimer les partitions d'échange afin qu'elles ne soient pas utilisées accidentellement. Pour supprimer les partitions de swap, j'utiliserais fdisk pour changer le type de partition de swap en quelque chose d'autre, puis reformater la partition ou utiliser: dd if=/dev/zero of=/dev/old-swap-partitionafin de la mettre à zéro et d'empêcher son utilisation.

Voir aussi Configuration de l'utilisation d'une partition d'échange avec systemd .

Gregor
la source
J'utilise toujours init via openRC, j'ai délibérément purgé systemd de l'installation. Et en ce qui concerne la question de l’échange, j’étais en train d’effectuer une installation régulière jusqu’à ce que j’ai pris la décision d’utiliser cryptsetup / luks pour monter des fichiers chiffrés au format ext4 par-dessus mon système de fichiers. Si vous pouviez avoir la gentillesse de parler de la façon de désactiver le swap lorsque vous utilisez init, je vous en serais reconnaissant.
user283167
0

Lorsque je consulte le fichier / etc / fstab sur Raspbian, un commentaire s'affiche:

a swapfile is not a swap partition, no line here
  use dphys-swapfile swap[on|off] for that

Mais pour désactiver complètement le fichier d'échange préconfiguré, cela fonctionne parfaitement:

swapoff -a
chmod -x /etc/init.d/dphys-swapfile
reboot

Cette solution me semble un peu rapide et sale, cependant, vous pouvez simplement la réactiver avec:

chmod +x /etc/init.d/dphys-swapfile
reboot
Fabian31415
la source