Woher weiß Linux, wo sich die Swap-Partition befindet?

13

Ich habe gelesen, dass Sie die Swap-Partition auf Festplatte anstatt SSD setzen müssen.

Meine Fragen sind folgende:

  • Wann und wie "überprüft" die Distribution (oder etwas anderes) ihre Swap-Partition?
  • Kommt es beim Booten vor?
  • Es prüft nur alle verfügbaren Festplatten und sucht nach einer Partition mit dem 'Swap'-Flag.
  • Was passiert, wenn es mehrere solche Partitionen gibt?
  • Wie viele Swap-Partitionen muss ich auch haben, wenn ich zum Beispiel zwei verschiedene Distributionen auf derselben Festplatte laufen lasse, sagen wir Fedora und Ubuntu?
Ne Nenne
quelle
17
Beachten Sie, dass ein SSD-Swap tatsächlich ein großartiger Swap wäre (macOS tut dies schon seit Ewigkeiten). Es wird jedoch zusätzlich Lese- / Schreibzugriff auf die SSD geben, was die Lebensdauer verkürzen könnte.
Nonyme
20
Wo hast du gelesen, dass Swap auf einer Festplatte sein sollte, nicht auf einer SSD? Wie alt war der Artikel oder Kommentar? Moderne SSDs sind wesentlich besser in der Lage, den Verschleiß auszugleichen, und versagen nicht nach wiederholten Schreibvorgängen, so wie sie es zu Zeiten neuer SSDs getan haben. Wenn Sie einen Computer haben, der nur über SSDs verfügt, haben Sie wirklich keine andere Wahl, als Swap überhaupt nicht zu verwenden
JDS
2
@ zakinster: Was ist, wenn Ihr 1-TB-Laufwerk immer voll ist? Der Speicherbedarf ist mit den Speichervorkehrungen gestiegen.
Leichtigkeit Rennen mit Monica
3
Mit anderen Worten : „Ja stimme ich zu , im Gegensatz zu meiner früheren Aussage der tatsächliche Größe der Scheibe ist irrelevant - es ist , wie viel davon Sie verwenden“
Leichtigkeit Rennen mit Monica
6
@DavidSchwartz Und wenn Sie "Swap in beträchtlichen Mengen verwenden", ist es die bessere Option, entweder mehr RAM zum System hinzuzufügen oder die virtuelle Leistung zu reduzieren, während eine SSD erheblich weniger wahrgenommene Systemleistungsverluste verursacht als eine Festplatte Der Speicherbedarf Ihrer Workload wird in gewisser Weise verringert, um die erhebliche Auslagerungsnutzung zu stoppen. Beachten Sie auch, dass es einen Unterschied gibt zwischen einem System mit langer Laufzeit, das den Swap mit fast nie verwendeten Daten gefüllt hat, und einem System, das aktiv den Swap durchführt und
scannt

Antworten:

24

Statisch konfigurierter Swap Space (der Typ, den so ziemlich jede Distribution verwendet) wird /etc/fstabgenau wie Dateisysteme konfiguriert .

Ein typischer Eintrag sieht ungefähr so ​​aus:

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

Möglicherweise wird auch eines der Felder discardoder die nofailAngabe im Feld flags (viertes Feld) angezeigt . Jede solche Linie entspricht einen Swap - Bereich (es nicht haben , um eine Partition zu sein, können Sie Swap - Dateien, oder sogar gesamte Swap - Festplatten).

In einigen wirklich spezifischen Fällen haben Sie möglicherweise stattdessen dynamisch konfigurierten Auslagerungsspeicher, obwohl dies eher selten ist, da dies zu einem problematischen Verhalten in Bezug auf die Speicherverwaltung führen kann. In diesem Fall wird die Konfiguration vollständig von einer Userspace-Komponente verwaltet, die bei Bedarf zur Laufzeit Auslagerungsdateien erstellt und aktiviert.

Was die Anzahl der benötigten Distributionen betrifft, ist dies eine komplizierte Frage. Die Anzahl der verschiedenen Linux-Distributionen, die Sie ausführen möchten, hat jedoch keine Auswirkung darauf, es sei denn, Sie möchten in der Lage sein, eine Distribution auszuführen, während sich eine andere im Ruhezustand befindet (und Sie wahrscheinlich möchten Sie dies nicht tun, da dies eine sehr einfache Möglichkeit ist, Ihr System zu vermasseln).

Wenn Sie das Installationsprogramm für fast alle wichtigen Distributionen (einschließlich Fedora, OpenSUSE, Linux Mint, Debian und Ubuntu) ausführen, erkennt es vorhandene Swap-Partitionen auf dem System und fügt diese der Konfiguration für die von Ihnen verwendete Distribution hinzu In den meisten Fällen führt dies dazu, dass das System auf vernünftige Weise konfiguriert wird.

Abgesehen davon würde ich persönlich empfehlen, die Verwendung mehrerer Swap-Partitionen zu vermeiden, es sei denn, es handelt sich um ein Serversystem mit vielen Festplatten, und selbst dann müssen Sie wirklich wissen, was Sie tun, um das System einzurichten, damit es eine gute Leistung erbringt .

Austin Hemmelgarn
quelle
Wenn Sie 2 Linux-Distributionen haben, haben Sie möglicherweise eine Swap-Partition für das System. Sie können also versuchen, in den Ruhezustand zu wechseln und fortzufahren. (Besser, Sie verwenden andere Benutzer, und Sie sollten auch andere /tmpPartitionen / Verzeichnisse benötigen .) Wahrscheinlich ist es in diesem Fall besser, virtuelle Maschinen zu haben ...
Hastur
Was also zu tun ist, wenn sie eine dedizierte Partition für den Austausch auf derselben SSD haben, auf der das Linux-Betriebssystem installiert ist, scheint jedoch keinen Austausch zu haben oder diese zu verwenden. Wenn ich renne, systemctl --all | grep swaperhalte ich zwei Ergebnisse zurück. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapund swap.targetbeide sind ACTIVE = inactive und SUB = dead . Wie bringe ich mein System dazu, den Swap-Bereich zu nutzen?
Rockin4Life33
21

Sagen wir Fedora und Ubuntu?

… Beides sind heutzutage system- und betriebssysteme.

Was passiert in systemd Betriebssystemen?

der native Mechanismus

Systemd verwendet verschiedene Arten von Einheiten. .mountUnit-Dateien weisen es an, Volumes zu mounten. .swapUnit-Dateien weisen ihn an, den Kernel über Swap-Partitionen zu informieren. ( .serviceUnit-Dateien weisen es an, wie Dienste ausgeführt werden. Und so weiter.) Dies sind die systemeigenen systemd-Mechanismen. Um sie zu aktivieren, leitet systemd selbst untergeordnete Prozesse ab, die die entsprechenden Systemaufrufe ausführen.

Wenn Sie den systemctlBefehl (mit --all) auf einem solchen Betriebssystem verwenden, werden Sie über die geladenen .swapEinheiten informiert . Beispielsweise:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap geladen aktiv aktiv / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap geladen active active / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b2b339
dev-sda5.swap geladen aktiv aktiv / dev / sda5

Außerdem erfahren Sie mehr über die .mountEinheiten.

Ein Systemadministrator kann schreiben tatsächlich solche .swapUnit - Dateien von Hand, wie xe schreiben kann .service, .socketund andere Unit - Dateien von Hand. systemd selbst sucht nur nach Unit-Dateien im Dateisystem. Sie sind sein ursprünglicher Mechanismus.

Man kann sich sogar von systemd anzeigen lassen, was sich in diesen Unit-Dateien befindet und wo sie im Dateisystem zu finden sind:

$ 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
# Wird automatisch vom systemd-fstab-generator generiert

[Einheit]
SourcePath = / etc / fstab
Dokumentation = man: fstab (5) man: systemd-fstab-generator (8)

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

automatisch generierte Unit-Dateien

Man kann sie von Hand schreiben. Normalerweise werden solche .mountund .swapUnit-Dateien jedoch automatisch von Programmen generiert, die als Generatoren bezeichnet werden . Zwei solche Generatoren sind systemd-fstab-generatorund systemd-gpt-auto-generator. Sie werden beide früh im Bootstrap-Prozess und als Antwort auf einen systemctl daemon-reloadBefehl ausgeführt und (wie Sie oben sehen können) generieren eine ganze Reihe von Unit-Dateien in einem undokumentierten Unterverzeichnis in /run/systemd/. systemd selbst verwendet nur diese generierten Unit-Dateien .

Der frühere Generator liest /etc/fstabund erkennt mehrere Systemerweiterungen für dieses Dateiformat. Wie ich bereits in einer Antwort Kommentar darauf hingewiesen, haben traditionell Swap - Partitionen den montiert von swund das ist , wie man , dass andere Betriebssysteme erkennen Swap - Datensätze in dieser Tabelle finden. Aber Linux-Software hat die Alternative gewählt, stattdessen den VFS-Typ zu erkennen und nach dem VFS-Typ zu suchen swap. systemd-fstab-generatorist hier keine Ausnahme, und so interpretiert es, /etc/fstabwenn es in die nativen Mechanismen konvertiert wird.

Der letztere Generator verarbeitet die EFI-Partitionstabelle, die sich auf demselben Datenträger befindet, auf dem sich die EFI-Systempartition befindet, und sucht nach EFI-Partitionstabelleneinträgen mit verschiedenen bekannten GUIDs für Partitionstypen . Eine dieser GUIDs ist die herkömmliche GUID, die Linux-Swap-Partitionen zugewiesen wird. und wenn systemd-gpt-auto-generatoreine Partition mit dieser GUID gefunden wird (die die im systemd doco angegebenen Kriterien erfüllt), wird eine .swapEinheit dafür erstellt; überhaupt nicht /etc/fstabbeteiligt .

Natürlich hat dieser Prozess viele Nebenwirkungen. Da beispielsweise /etc/fstabkein Primärschlüssel für die Tabelle vorhanden ist, können Datensätze doppelte Felder "spec" und "file" (dh "what" und "where") enthalten. Im systemeigenen Mechanismus ist das Feld "file" (dh "where") ein eindeutiger Schlüssel für .mountEinheiten, der in die Einheitennamen eingebettet ist. Keine zwei .mountEinheiten können es teilen. Für .swapEinheiten ist das Feld "spec" (dh "what") der eindeutige Schlüssel für Einheiten. Keine zwei .swapEinheiten können das teilen. Daher sind nicht alle Datensätze in /etc/fstabden systemeigenen Mechanismen konvertierbar und funktionieren auch, insbesondere wenn Benutzer beispielsweise denselben Mountpunkt für zwei verschiedene Zwecke auflisten oder dieselbe Swap-Partition auf zwei verschiedene Arten auflisten.

In ähnlicher Weise unterscheidet sich das Verhalten geringfügig von dem von Nicht-System-Betriebssystemen , da es /etc/fstabin den systemeigenen Mechanismus übersetzt wurde und der systemeigene Mechanismus andere Möglichkeiten zum Aktivieren von Einheiten bietet. .mountStandardmäßig wird eine Einheit auch nach dem Bootstrap automatisch aktiviertsystemd-udevd , wenn das eingebaute Speichergerät angezeigt wird. Oder es kann als Wants=oder Requires=von einigen .serviceoder .socketEinheiten aufgeführt werden, was bedeutet, dass es (wieder) aktiviert wird, wenn sie es sind. Es gibt sogar RequiresMountsFor=.

Installer-Programme und die systemd Weise

Üblicherweise haben Betriebssystem-Installationsprogramme und der Systemadministrator, der das System anschließend neu konfiguriert, swEinträge in geschrieben /etc/fstab. Auf diese Weise werden die Native .mountund die .swapUnits automatisch generiert. Das Installations- / Konfigurationsdienstprogramm "weiß", wo die Auslagerungsdatei abgelegt wurde, da der Systemadministrator in seiner Benutzeroberfläche eine Auswahl getroffen und eine /etc/fstabpassende Datei geschrieben hat . Manchmal müssen Sie mich im Rahmen der Installation zu einer Swap-Partition machen. ; manchmal ist es nur die Swap-Partition, die Sie bereits auf der CD gefunden haben. (Installer, die sich auch die Partitionstypen ansehen).

Aber die Systemleute haben diese Idee von Betriebssystemen, die sich automatisch aus einem weitgehend leeren /etcBaum heraus konfigurieren , sogenannten zustandslosen Systemen , und genau darum geht es bei Mechanismen wie dem Generator, der die EFI-Partitionstabelle liest. Im Plan der systemd people gibt es überhaupt keine /etc/fstabund keine persistenten Konfigurationsdaten /etc, und all diese Informationen werden aus dem Inhalt der Partitionstabelle auf der Festplatte , bei jedem Bootstrap und bei jedem abgeleitet systemctl daemon-reload. Sie fördern heutzutage Betriebssystem-Installationsprogramme, als nicht schreiben/etc/fstab .

Im herkömmlichen Schema kann natürlich jedes Betriebssystem über eine eigene private Swap-Partition verfügen, ohne dass sich die Swap-Partitionen gegenseitig berühren. Und in der Tat, wenn Sie den Ruhezustand verwenden, um über eine Swap-Partition eine Festplatte zu starten, und erwarten, dass Sie im Ruhezustand auf ein anderes Betriebssystem mehrfach booten können ( was eine sehr schlechte Idee ist, da es sehr leicht ist, auf diese Weise eine Beschädigung des Dateisystems zu verursachen ) notwendig.

Im systemd-Schema laufen die oben genannten Generatoren, auch wenn das Betriebssystem noch nicht so ist, wie die systemd-Leute es sich vorstellen, und "zustandslos" ist. und somit werden alle Swap-Partitionen (auf der ESP / Root-Platte) mit dem erforderlichen Partitionstyp automatisch von allen Betriebssystemen des Systems verwendet. Da alle automatisch erkannten Swap-Partitionen gemeinsam genutzt werden, muss nicht wirklich eine Swap-Partition pro installiertem Betriebssystem erstellt werden.

Weitere Lektüre

JdeBP
quelle
Sehr schön - danke für die Erklärung!
Andy Dalton
Es gibt einen Teil von mir, der Sie eigentlich nur dafür abstimmen möchte, dass Sie über systemd sprechen. Aber das ist natürlich unfair (und auch systemd oder no bedeutet nicht, dass Sie sich irren), und ich stimme normalerweise sowieso nicht ab, da es für mich nie der richtige Weg war, konstruktiv zu sein. Es ist jedoch eine nette Zusammenfassung, also habe ich, obwohl ich Verweise auf Lennart gesehen habe, für diese Antwort gestimmt. Wenn Sie nichts anderes tun, geben Sie sich Mühe, und es sollte gelobt werden. Ich habe kurz über den staatenlosen Müll gelesen und das ist etwas, das eher ... Ich bin mir nicht mal sicher, was es tut, also lasse ich es einfach dabei.
Pryftan
13

In der Vergangenheit wurde die Swap-Partition /etc/fstabmit einem Eintrag vom Typ angegeben swap. Beim Booten werden die Startprozesse diese Datei lesen und diese Konfiguration in den Kernel übertragen.

Ein Beispiel für den Eintrag in /etc/fstabist:

/dev/sdb    none    swap     sw      0  0

Ich systemdweiß nicht, wie Swap verwaltet wird, aber ich glaube, dass das Endergebnis dasselbe ist: Ein Userspace-Prozess weiß, welcher Speicherplatz für Swap zugewiesen ist, und der Userspace-Prozess informiert den Kernel.

Andy Dalton
quelle
Der Fragesteller fragte nach Linux, und dies ist für Linux nicht falsch. aber es ist eigenartig für Linux. Andere Betriebssysteme, wie zum Beispiel FreeBSD, erkennen Swap-Einträge eher /etc/fstaban ihrem swMount-Typ als an ihrem swapVFS-Typ.
JdeBP
1
Die Antwort spricht nicht alle Teile der Frage an.
Sergiy Kolodyazhnyy
Ich möchte auch darauf hinweisen, dass auch diese Antwort in der Welt der systemd-Betriebssysteme nicht mehr aktuell ist. Es wird nicht berücksichtigt systemd-gpt-auto-generator.
JdeBP
2
Was meinst du mit systemd verwendet nicht fstab? Natürlich tut es das!
Psusi
1
@psusi: systemd versteht, benötigt aber keine fstab.
MSalters
4

Alle anderen Antworten geben an, wie beim Booten auf ein Swap-Dateisystem verwiesen wird.

Es gibt jedoch einige Punkte, die zu den anderen Antworten hinzugefügt werden müssen:

  • Der Swap Space kann auch eine Datei sein.
  • Eine Swap Space-Partition ist normalerweise als Typ 0x82 gekennzeichnet.
  • Sie können jederzeit zur Laufzeit einen Swap- Space aktivieren .
  • Zum Markieren / Initialisieren einer Partition / Datei, damit diese später als Auslagerungsspeicher erkannt und verwendet / bereitgestellt werden kann, müssen Sie den Befehl verwenden mkswap.
  • Zum Aktivieren / Verwenden einer Swap-Partition / -Datei von Hand verwenden Sie den Befehl swapon;
  • ebenfalls zum abtauschen gehst du mit swapoff.
Rui F Ribeiro
quelle