Auslagerungsdatei in Linux

Die gebräuchlichste Variante zur Bereitstellung von Speicher zur Auslagerung ist eine Swap-Partition. Linux kennt allerdings auch die Herangehensweise, die bei Windows üblich ist: die Auslagerungsdatei (Swap-File). Das kann in einigen Fällen sinnvoll sein, da die Datei schneller und einfacher an geänderte Rahmenbedingungen anzupassen ist – z.B. nach einer Änderung der Größe des Arbeitsspeichers im System.

Wer Auslagerungsdateien nutzt, sollte diese (genau wie Swap-Partitionen) auf der schnellsten verfügbaren Festplatte ablegen, also sofern verfügbar z.B. auf einer SSD-Platte. Wer mehrere Festplatten hat, erstellt im Optimalfall nicht eine große Auslagerungsdatei verteilt sie in gleich großen „Stücken“ auf die einzelnen Festplatten.

Die Gesamtgröße des Auslagerungsspeichers sollte immer der Gesamtgröße des im System verbauten Arbeitsspeichers entsprechen.

Einrichtung

Schritt 1: Datei erstellen

Zuerst muss die Datei erstellt werden. Um eine Fragmentierung zu verhindern, wird sie gleich zu Beginn in voller Größe erstellt. Im Beispiel erstelle ich eine 1 GB große Auslagerungsdatei.

# dd if=/dev/zero of=/swapfile1 bs=1024 count=1048576

Schritt 2: Sicherheitseinstellungen

Natürlich muss die neu erstellte Datei mit Sicherheitsberechtigungen versehen werden, die ungewünschte Zugriffe verhindern. Immerhin liegen in der Datei Teile des Arbeitsspeichers und somit auch Informationen, die niemanden etwas angehen.

# chown root:root /swapfile1
# chmod 0600 /swapfile1

Schritt 3: Speicher formatieren

Wie jedes andere Speichergerät muss auch dieser virtuelle Speicher formatiert werden bevor er genutzt werden kann.

# mkswap /swapfile1

Schritt 4a: Auto-Mount

Damit der neue Auslagerungsspeicher genutzt werden kann, muss er bei jedem Systemstart ins System eingebunden werden. Das geschieht über einen Eintrag in die Datei /etc/fstab:

/swapfile1 none swap sw 0 0

Schritt 4b: Mount ohne Neustart

Windows würde uns nun einen Neustart abverlangen. Bei Linux reicht ein einfacher Befehl um den neuen Speicher auch ohne Neustart zu aktivieren:

# swapon /swapfile

Überprüfung

Zur Überprüfung ob alles funktioniert hat gereicht folgendes Kommando:

# free -m

Die Ausgabe sieht in etwa so aus:

             total       used       free     shared    buffers     cached Mem:          1876       1798         77          0        119       1440 -/+ buffers/cache:        237       1638
Swap: 4607 0 4607

Natürlich gibt es auch unzählige andere Möglichkeiten, die je nach System entweder von Haus aus vorhanden sind oder über den Paketmanager der Distribution nachinstalliert werden müssen. Einige davon sind:

# swapon -s
# less /proc/meminfo
# grep -i --color swap /proc/meminfo
# top
# atop
# htop

Deaktivierung

Wer die Auslagerungsdatei deaktivieren möchte (z.B. um sie zu vergrößern oder zu verkleinern), kann das jederzeit im laufenden System tun – vorausgesetzt er hat genügend Arbeitsspeicher um den verlorenen Auslagerungsspeicher zu kompensieren. Evtl. müssen vor dieser Prozedur Prozesse beendet werden.

# swapoff /swapfile1

Danach kann die Datei nach der oben beschriebenen Anleitung neu erstellt werden so in beliebiger Größe dimensioniert werden. Natürlich kann man sie nun auch einfach löschen falls sie nicht mehr benötigt wird. Man sollte allerdings nicht vergessen, den entsprechenden Eintrag aus der Datei /etc/fstab zu löschen.

Auslagerung („swapiness“) konfigurieren

In aller Regel kann der Linux-Kernel sehr gut selbst entscheiden was er auslagert und wann er das tut. Wer meint, er könne es besser, dem stellen die Entwickler eine entsprechende Konfigurationsmöglichkeit bereit:

# sysctl vm.swappiness=60 

oder

# echo 60 > /proc/sys/vm/swapiness

Der Standardwert beträgt 60. Höhere zahlen führen zu einer stärkeren Nutzung des Auslagerungsspeichers, kleinere Zahlen reduzieren die Nutzung.

Auch dieser Wert muss natürlich nach jedem Neustart gesetzt werden. Das passiert über einen Eintrag in die Datei /etc/sysctl.conf:

vm.swappiness=30

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.