Comment Linux sait-il où se trouve sa partition de swap?

13

J'ai lu que vous devez mettre la partition d'échange sur le disque dur plutôt que sur le SSD.

Mes questions sont les suivantes:

  • Quand et comment la "vérification" est-elle effectuée par la distribution (ou autre chose) pour trouver sa partition Swap?
  • Cela se produit-il au démarrage?
  • Il vérifie simplement tous les disques disponibles et recherche une partition avec l'indicateur «swap»?
  • Que se passe-t-il s'il y a plusieurs partitions comme ça?
  • De plus, combien de partitions de swap dois-je avoir si j'exécute, par exemple, deux distributions différentes sur le même disque, disons Fedora et Ubuntu?
Ne Nenne
la source
17
Notez qu'un échange sur SSD serait en fait un très bon échange (macOS le fait depuis des lustres). Il va cependant faire des lectures / écritures supplémentaires sur le SSD, ce qui pourrait réduire sa durée de vie.
Nonyme
20
Où avez-vous lu que l'échange devrait se faire sur un disque dur et non sur un SSD? De plus, quel âge avait l'article ou le commentaire? Les SSD modernes sont bien meilleurs pour le nivellement de l'usure et n'échouent pas après des écritures répétées comme ils le faisaient lorsque les SSD étaient nouveaux. De plus, si vous avez un ordinateur qui n'a que des SSD, alors vous n'avez vraiment pas beaucoup de choix, à part ne pas utiliser du tout de swap
JDS
2
@zakinster: Qu'en est-il lorsque votre lecteur de 1 To est toujours plein? Les besoins de stockage ont augmenté avec les dispositions de stockage.
Courses de légèreté avec Monica
3
En d'autres termes, "oui, je suis d'accord, contrairement à ma déclaration précédente, la taille réelle du disque n'a pas d'importance - c'est la quantité que vous utilisez"
Lightness Races avec Monica
6
@DavidSchwartz Et, si vous "utilisez le swap en quantités importantes", alors qu'un SSD produira considérablement moins de perte de performances du système qu'un disque dur, la meilleure option restera soit d'ajouter plus de RAM au système, soit de réduire le virtuel l'empreinte mémoire de votre charge de travail d'une manière ou d'une autre pour arrêter l'utilisation significative du swap. Notez également qu'il y a une différence entre un système de longue durée qui a rempli le swap avec des données presque jamais utilisées et un système qui échange et scanne activement ...
twalberg

Réponses:

24

L'espace de swap configuré de manière statique (le type que presque toutes les distributions utilisent) est configuré /etc/fstabcomme les systèmes de fichiers.

Une entrée typique ressemble à quelque chose comme:

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

Vous pouvez également voir soit discardou nofailspécifié dans le champ drapeaux (le quatrième champ). Chaque ligne correspond à une zone de swap (il ne doit pas nécessairement s'agir d'une partition, vous pouvez avoir des fichiers de swap, ou même des disques de swap entiers).

Dans certains cas vraiment spécifiques, il se peut que vous ayez à la place un espace d'échange configuré dynamiquement, bien que cela soit plutôt rare car cela peut entraîner un comportement problématique lié à la gestion de la mémoire. Dans ce cas, la configuration est entièrement gérée par un composant de l'espace utilisateur qui crée et active les fichiers d'échange au besoin au moment de l'exécution.

En ce qui concerne le nombre dont vous avez besoin, c'est une question compliquée à répondre, mais le nombre de distributions Linux différentes que vous prévoyez d'exécuter n'a aucun impact sur cela, sauf si vous voulez pouvoir exécuter une distribution pendant que vous en avez une autre en hibernation (et vous vous ne voulez probablement pas faire cela, car c'est un moyen très simple de visser votre système).

Lorsque vous exécutez le programme d'installation pour presque toutes les distributions majeures (y compris Fedora, OpenSUSE, Linux Mint, Debian et Ubuntu), il détecte toutes les partitions d'échange existantes sur le système et les ajoute à la configuration de la distribution que vous utilisez. l'installation (sauf éventuellement si vous sélectionnez le partitionnement manuel), et dans la plupart des cas, le système sera configuré de manière sensée.

Même en dehors de cela, je suggérerais personnellement d'éviter d'avoir plusieurs partitions de swap à moins que vous ne parliez d'un système serveur avec beaucoup de disques, et même alors, vous devez vraiment savoir ce que vous faites pour vous installer afin qu'il fonctionne bien .

Austin Hemmelgarn
la source
Si vous avez 2 distributions Linux, vous pouvez avoir une partition de swap pour le système ... vous pouvez donc essayer d'hiberner et reprendre ... (mieux utiliser différents utilisateurs BTW et vous devriez aussi avoir besoin de différentes /tmppartitions / répertoires). Probablement dans ce cas, il vaut mieux avoir des machines virtuelles ...
Hastur
Donc, ce qu'il est suggéré de faire s'ils ont une partition dédiée pour swap sur le même SSD sur lequel le système d'exploitation Linux est installé, cependant, ne semble pas avoir de swap ou être utilisé. Si je cours, systemctl --all | grep swapje récupère deux résultats. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapet swap.targetqui sont tous les deux ACTIF = inactif et SUB = mort . Comment puis-je faire en sorte que mon système utilise la zone d'échange?
Rockin4Life33
21

disons Fedora et Ubuntu?

… Qui sont tous deux aujourd'hui des systèmes d'exploitation systemd.

Que se passe-t-il dans les systèmes d'exploitation systemd

le mécanisme natif

Systemd utilise différents types d'unités. .mountles fichiers d'unité lui demandent de monter des volumes. .swaples fichiers d'unité lui demandent d'indiquer au noyau les partitions de swap. (Les .servicefichiers unitaires lui expliquent comment exécuter les services. Et ainsi de suite.) Ce sont les mécanismes natifs de systemd. Pour les appliquer, systemd lui-même supprime les processus enfants qui effectuent les appels système appropriés.

Si vous utilisez la systemctlcommande (avec --all) sur un tel système d'exploitation systemd, elle vous indiquera les .swapunités chargées . Par exemple:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap chargé actif actif / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap chargé actif actif / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4
dev-sda5.swap chargé actif actif / dev / sda5

Il vous indiquera également les .mountunités.

Un administrateur système peut effectivement écrire des .swapfichiers unitaires à la main, tout comme peut écrire xe .service, .socketet d' autres fichiers de l' unité à la main. systemd lui-même recherche simplement les fichiers d'unité dans le système de fichiers. Ils sont son mécanisme natif.

On peut même demander à systemd de vous montrer ce qu'il y a dans ces fichiers unitaires et où dans le système de fichiers ils peuvent être trouvés:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap 
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# Généré automatiquement par systemd-fstab-generator

[Unité]
SourcePath = / etc / fstab
Documentation = man: fstab (5) man: systemd-fstab-generator (8)

[Échanger]
What = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Options = sw
$ 

fichiers d'unité générés automatiquement

On peut les écrire à la main. En général , cependant ces .mountet les .swapfichiers unitaires sont générés automatiquement par des programmes appelés générateurs . Deux de ces générateurs sont systemd-fstab-generatoret systemd-gpt-auto-generator. Ils s'exécutent tous les deux au début du processus d'amorçage et en réponse à une systemctl daemon-reloadcommande, et (comme vous pouvez le voir ci-dessus), ils génèrent une charge entière de fichiers d'unité dans un sous-répertoire non documenté dans /run/systemd/. systemd lui- même utilise simplement ces fichiers d'unité générés .

L'ancien générateur lit /etc/fstab, reconnaissant plusieurs extensions systemd à ce format de fichier. Comme je l'ai souligné dans un commentaire de réponse, les partitions de swap ont traditionnellement le type de montage de swet c'est ainsi que l'on trouvera que d'autres systèmes d'exploitation reconnaissent les enregistrements de swap dans ce tableau. Mais les logiciels Linux ont pris la voie alternative de reconnaître le type VFS à la place, en le recherchant swapcomme type VFS. systemd-fstab-generatorne fait pas exception ici, et c'est ainsi qu'il interprète /etc/fstablors de sa conversion en mécanismes natifs.

Ce dernier générateur traite la table de partition EFI qui se trouve sur le même disque que celui contenant la partition système EFI, à la recherche des entrées de table de partition EFI qui ont divers GUID de type de partition bien connus . L'un de ces GUID est le GUID conventionnel attribué aux partitions d'échange Linux; et si systemd-gpt-auto-generatortrouve une partition avec ce GUID (qui satisfait les critères donnés dans le docu systemd) il en fera une .swapunité; pas du tout /etc/fstabimpliqué .

Bien sûr, ce processus a beaucoup d'effets secondaires. Par exemple, comme /etc/fstabil n'y a pas de clé primaire dans la table, les enregistrements peuvent avoir des champs "spéc" et "fichier" (c'est-à-dire "quoi" et "où") en double. Dans le mécanisme natif de systemd, cependant, le champ "fichier" (c'est-à-dire "où") est une clé unique pour les .mountunités, incorporée dans les noms des unités. Deux .mountunités ne peuvent pas le partager. Pour les .swapunités, le champ "spec" (c'est-à-dire "quoi") est la clé unique pour les unités. Deux .swapunités ne peuvent pas partager cela. Donc, tous les enregistrements ne /etc/fstabsont pas nécessairement convertibles en mécanismes natifs et fonctionneront, surtout si les gens font des choses comme lister le même point de montage à deux fins différentes ou lister la même partition de swap de deux manières différentes.

De même, parce qu'il s'est traduit /etc/fstabpar le mécanisme natif et que le mécanisme natif de systemd a d'autres moyens d'activer les unités , le comportement est subtilement différent de celui des systèmes d'exploitation non-systemd. Une .mountunité sera, par défaut, automatiquement activée parsystemd-udevd , même après l'amorçage, en réponse à l'apparition du périphérique de stockage monté. Ou il peut être répertorié comme un Wants=ou Requires=d'une partie .serviceou d'une .socketunité, ce qui signifie qu'il sera (réactivé) lorsqu'ils le seront. Il y en a même RequiresMountsFor=.

programmes d'installation et la manière systemd

Traditionnellement, les programmes d'installation du système d'exploitation et l'administrateur systemd reconfigurant ensuite le système ont des swentrées écrites dans /etc/fstab. Et c'est ainsi que le natif .mountet les .swapunités finissent par être générés automatiquement. L'utilitaire d'installation / configuration "sait" où le fichier d'échange a été placé, car dans son interface utilisateur, l'administrateur système a fait une sorte de choix et écrit un /etc/fstabpour correspondre. Parfois, ce choix est que j'ai besoin de vous pour me faire une partition d'échange dans le cadre de l'installation. ; Parfois, il suffit d'utiliser la partition de swap que vous avez déjà trouvée sur le disque. (les installateurs examinent également les types de partitions).

Mais les gens de systemd ont cette idée de systèmes d'exploitation qui se configurent automatiquement à partir d'une /etcarborescence largement vide , les systèmes dits sans état , et c'est à cela que servent des mécanismes comme le générateur qui lit la table de partition EFI. Dans le plan des gens de systemd, il n'y a pas /etc/fstab, et en fait aucune donnée de configuration persistante sous /etc, et tout cela est déduit du contenu de la table de partition sur le disque , à chaque démarrage et à chaque systemctl daemon-reload. De nos jours, ils font la promotion de programmes d'installation de système d'exploitation que n'en écrivent pas/etc/fstab .

Dans le schéma traditionnel, bien sûr, vous pouvez en effet avoir chaque système d'exploitation a sa propre partition de swap privée, et ne pas les faire toucher les partitions de swap les uns des autres. Et en effet, si vous utilisez la mise en veille prolongée sur un disque via une partition de swap et que vous vous attendez à pouvoir démarrer plusieurs fois sur un autre système d'exploitation en veille prolongée ( ce qui est une très mauvaise idée car il est très facile de provoquer une corruption du système de fichiers de cette façon ), ce sera nécessaire.

Dans le schéma systemd, même si le système d'exploitation n'est pas encore comme les gens systemd l'envisagent et "sans état", les générateurs susmentionnés fonctionnent; et ainsi toutes les partitions de swap (sur le disque ESP / root) avec le type de partition requis sont automatiquement utilisées par tous les systèmes d'exploitation systemd. Puisqu'ils partageront toutes les partitions d'échange découvertes automatiquement, il n'est vraiment pas nécessaire de créer une partition d'échange par système d'exploitation installé.

Lectures complémentaires

JdeBP
la source
Très bien - merci pour l'explication!
Andy Dalton
Il y a une partie de moi qui veut voter contre vous juste pour avoir parlé de systemd. Mais bien sûr, c'est injuste (et aussi systémique ou non ne signifie pas que vous avez tort) et je ne vote généralement pas de toute façon car cela ne m'a jamais semblé être la manière appropriée d'être constructif. C'est cependant une belle écriture, donc malgré les références à Lennart, j'ai voté pour cette réponse. Si vous ne faites rien d'autre, vous devez y faire des efforts et il faut en faire l'éloge. J'ai lu brièvement sur les ordures apatrides et c'est quelque chose qui plutôt ... Je ne suis même pas sûr de ce qu'il fait alors je vais en rester là.
Pryftan
13

Historiquement, la partition de swap est spécifiée dans /etc/fstabavec une entrée de type swap. Au démarrage, les processus de démarrage liront ce fichier et pousseront cette configuration dans le noyau.

Un exemple de l'entrée dans /etc/fstabest:

/dev/sdb    none    swap     sw      0  0

Je ne sais pas comment systemdgère le swap, mais je pense que le résultat final est le même: un processus de l'espace utilisateur est conscient de l'espace alloué pour le swap et le processus de l'espace utilisateur informe le noyau.

Andy Dalton
la source
Le questionneur a posé des questions sur Linux, et ce n'est pas faux pour Linux; mais c'est propre à Linux. D'autres systèmes d'exploitation, comme FreeBSD par exemple, reconnaissent les enregistrements de swap à /etc/fstabpartir de leur swtype de montage plutôt que de leur swaptype VFS.
JdeBP
1
La réponse n'aborde pas toutes les parties de la question.
Sergiy Kolodyazhnyy
Je dois également souligner que cette réponse est également dépassée dans le monde des systèmes d'exploitation systemd. Il ne tient pas compte systemd-gpt-auto-generator.
JdeBP
2
Que voulez-vous dire que systemd n'utilise pas fstab? Bien sûr que oui!
psusi
1
@psusi: systemd comprend, mais ne nécessite pas fstab.
MSalters
4

Toutes les autres réponses mentionnent comment pointer vers un système de fichiers d'échange au démarrage.

Cependant, plusieurs points à ajouter aux autres réponses:

  • l'espace de swap peut également être un fichier;
  • une partition d'espace de swap est généralement marquée comme type 0x82;
  • vous pouvez monter un espace de swap à tout moment de l'exécution;
  • pour marquer / initialiser une partition / fichier, pour qu'il soit reconnu et utilisé / monté plus tard comme espace de swap, vous devez utiliser la commande mkswap;
  • pour activer / utiliser une partition / fichier d'échange à la main, vous utilisez la commande swapon;
  • de même pour l'échanger, vous allez avec swapoff.
Rui F Ribeiro
la source