Ein Blog über Code, Hardware und Co

Allgemein, Technik und Hardware

Den SWAP bzw. die Auslagerungsdatei unter Linux vergrößern

Zuletzt aktualisiert am 2. April 2024.

Ein Swap-File oder eine Swap-Partition ist bei Linux-Systemen das Pendant zur Auslagerungsdatei unter Windows. Wenn der RAM ausgereizt ist, beginnt das System Daten im SWAP zwischen zu speichern. Unter Umständen kann auch dieser Swap voll sein. Das Ergebnis ist, dass das System nicht mehr reagiert.

Sollte der Swap zu klein sein und eng werden, sollte man ihn daher erhöhen.

Zwei Möglichkeiten, den Swap zu vergrößern

Möglichkeit 1: Swap Partition vergrößern

Jedes Linux-System hat von Beginn an eine Swap-Partition. Nun kann es je nach Workload natürlich so sein, dass diese Partition zu klein dimensioniert ist.
Natürlich kann man diese Partition nachträglich einfach vergrößern.
Wie man Partitionen unter Linux vergrößert, habe ich hier erklärt.

Möglichkeit 2: Zusätzliches Swap-File anlegen

Meine präferierte Variante – aufgrund der Einfachheit – ist es, einfach ein zusätzliches Swapfile zu erstellen. Das ist im Prinzip nichts anderes als eine Datei auf der Festplatte, die als “Swapfile” markiert wird. In dieser Datei werden dann Daten zwischengespeichert, wenn der RAM belegt ist.

Ein Swapfile erzeugen. So gehts!

1. Swap-Datei erzeugen

Zunächst erzeugen wir eine einfache Datei auf dem Volume:

dd if=/dev/zero of=swapfile bs=1024k count=4000

Der Inhalt dieser Datei sind einfach nur “Nullen”, reservieren aber den Platz für im späteren Swap zwischengespeicherte Daten.
Der obige Befehl erzeugt eine Datei namens “swapfile” mit einer Größe von ca. 4000MB.

2. Zugriffsrechte der Datei anpasen

Da außer dem Systemuser root Niemand etwas in unserem Swap-File zu suchen hat, machen wir es mit dem folgenden Befehl nur für den Root-User nutzbar:
chmod 600 swapfile

3. File in Swapfile umwandeln

Die erstellte Datei wandeln wir nun in ein Swapfile um:
mkswap swapfile

4. Swapfile einbinden

Jetzt müssen wir das erstellte Swapfile noch für das System, zur Verfügung stellen:
swapon swapfile
Das Swapfile ist damit direkt aktiv und steht dem System zur Verfügung.

5. Swap reboot-sicher machen.

Das erstelle Swapfile ist nun eingebunden. Bei einem Neustart des Systems wird es aber nicht automatisch eingebunden und stünde damit nicht mehr zu Verfügung. Damit das Swapfile nach einem Neustart direkt wieder eingebunden wird, müssen wir einen Eintrag in der /etc/fstab des Systems hinterlegen:

/Pfad/File swap swap defaults 0 0

Achtung: Egal ob nun Swapfile oder Swap-Partition, die Daten liegen auf der langsamen HDD oder der noch immer langsamen SSD. Im Vergleich zu regulärem RAM-Speicher liegen hier Welten in der Performance dazwischen. Swap sollte daher nur für den Notfall vorhanden sein, ein System, welches durchgängig swappt ist merklich langsamer.

Sonderfall Copy-on-Write Filesysteme wie BTRFS und Holes in Files (z.B. Synology)

Einen Sonderfall in der Erstellung eines Swapfiles stellen Copy on Write Filesysteme, wie beispielsweise BTRFS dar. Unter diese Kategorie fällt auch das Standard-Dateisystem auf Synology NAS.
Hier wird das Einbinden eines Swapfiles mittels “swapon swapfile” oftmals mit einer Fehlermeldung quittiert:
swapon failed: Invalid argument

Das liegt daran, dass der Kernel zusammenhängende Files auf dem Datenträger erwartet, die direkt beschrieben werden können. Dies ist bei Copy on Write Dateisystemen häufig nicht der Fall.

Die Lösung ist es hier, den Speicher für das Swapfile zunächst freizuräumen, dann zu reservieren und letztlich für das File an einem Stück zu nuzten:

truncate -s 0 swapfile
chattr +C swapfile
dd if=/dev/zero of=swapfile bs=1024k count=5000
chmod 0600 swapfile
mkswap swapfile
swapon swapfile

Die Geister scheiden sich, ob nun eine zusätzliche oder vergrößerte Swap-Partition performanter ist, oder ein zusätzliches/vergrößertes Swap-File. Selbst wenn es hier einen Performanceunterschied gibt, ist er jedoch so gering, dass er allenfalls im messbaren, nicht jedoch im spürbaren Bereich liegen sollte.

Schreibe eine Antwort