ubuntuusers.de

ubuntuusers.deWikiSwap

Swap

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/hd.png Linux (wie auch so gut wie alle anderen Betriebssysteme) versucht, die Betriebssystemkomponenten, aktuell benötigte Programmdaten etc. möglichst komplett im RAM (Arbeitsspeicher) zu halten, da der Zugriff auf das RAM deutlich schneller ist als auf Datenträger wie Festplatte, CD, USB-Stick usw.

Nun kann es aber vorkommen, dass das komplette RAM voll ist, weil z.B. (sehr) viele Programme gleichzeitig geöffnet sind. An dieser Stelle beginnt der Linux-Kernel, RAM frei zu machen, indem er Teile der im RAM gespeicherten Daten auf die Festplatte schreibt. Werden die Daten wieder benötigt, so werden diese wieder ins RAM geladen und andere im Moment nicht benötigte Daten werden in den Swap geschrieben. In einem solchen Fall sagt man auch: „das System swappt“.

Nutzt ein System den Swap intensiv, so wird das System durch die häufigen Plattenzugriffe deutlich langsamer und fühlt sich „zäh“ an. Hat man allerdings keinen Swap und das RAM läuft voll, so beendet der Linux-Kernel nach eigenem Ermessen Programme, um RAM frei zu machen. Dies hat in der Regel Datenverlust zur Folge. Um genau dies zu verhindern, legt Ubuntu (so wie alle anderen Distributionen) bei der Installation standardmäßig eine Swap-Partition an.

Swapgröße

Auf modernen Computern mit mehreren Gigabyte RAM oder mehr lagern die Systeme kaum mehr aus (es sei denn, man bearbeitet sehr große Audiodateien, mehrere große Bilder mit GIMP oder hat andere extrem große Dokumente geöffnet etc.).

Die passende Speichergröße hängt von mehreren Faktoren ab und kann nicht im Allgemeinen angegeben werden. Je nach Systemnutzung reichen schon in etwa 512 MiB Swapspeicher bzw. für Suspend-to-Disk 512 MiB + RAM-Kapazität. Falls der Swapspeicher (und RAM) volllaufen, stürzt das System u.U. ab und alle nicht mit der Festplatte synchronisierten Daten sind verloren, weswegen auch ein großzügiger angelegter Swapbereich sinnvoll sein kann.

Swap anlegen

Wie oben bereits erwähnt, legt K|X|Ubuntu standardmäßig automatisch eine Swap-Partition an, d.h. man muss nichts weiter machen. Wie man eine neue Swap-Partition anlegt, wird im folgenden Abschnitt beschrieben. Es ist auch möglich, stattdessen eine Swap-Datei anzulegen, dies wird bei Swap als Datei beschrieben.

Swap-Partition nachträglich erstellen

Achtung!

Durch mkswap wird die angegebene Partition formatiert. Eine Wiederherstellung auf der Partition gespeicherter Daten ist nur schwer (oder gar nicht) möglich. Man sollte sich also sicher sein, dass man die richtige Partition angibt.

Falls man die Swap-Partition neu erstellen möchte und das bei der Installation vergessen hat, erstellt man eine Swap-Partition [3] und formatiert diese Mithilfe des Befehls mkswap:

sudo mkswap /dev/xxxx 

Anschließend kann die Partition eingebunden werden:

sudo swapon -U UUID 

Um die Partition dauerhaft einzubinden, öffnet man die Datei /etc/fstab mit Root-Rechten.[2] In der Datei fügt man folgende Zeile ein, welche entsprechend angepasst werden muss:

/dev/xxxx none swap sw 0 0

oder in neueren Ubuntu-Versionen:

UUID=.... none swap sw 0 0

Wenn man den Ruhezustand nutzen möchte (oder Probleme mit der Anzeige des Bootsplash hat), muss man zuerst die UUID herausfinden, das geht über folgenden Befehl im Terminal[1]:

ls -l /dev/disk/by-uuid 

Danach muss die Datei /etc/initramfs-tools/conf.d/resume mit Root-Rechten[2] editiert werden und folgende Zeile eingefügt und mit der eigenen <UUID> angepasst werden:

RESUME=UUID=<UUID>

Zuletzt muss das initrd-Image neu geschrieben werden, das geht über folgenden Terminalbefehl:

sudo update-initramfs -u 

Swap als Datei

Linux bietet auch die Möglichkeit, für den Swap anstelle einer Partition eine Datei zu nutzen (vergleichbar mit der Auslagerungsdatei von Windows). Um eine Auslagerungsdatei zu erstellen, ist ein Terminal[1] notwendig. Mit

sudo mkdir -p /var/cache/swap 

legt man den angegebenen Verzeichnispfad komplett an. Danach legt man die Auslagerungsdatei an:

sudo fallocate -l 8G /var/cache/swap/swap0 

Den Wert hinter -l sollte man natürlich anpassen. Er gibt die Größe der Auslagerungsdatei an (hier 8 GiB). Falls fallocate (aus dem vorinstallierten Paket util-linux) abbrechen sollte, kann man die Auslagerungsdatei auch mit folgendem Befehl (sehr viel langsamer als mit fallocate) anlegen:

sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=1M count=8192 

Der Wert hinter count= ist die Größe der Auslagerungsdatei in Megabyte.

Experten-Info:

Die Zeile besagt, dass eine Datei mit dem Namen swap0 mit 8192 MiB Größe angelegt wird. Die Größe ergibt sich aus 1M×8192 = 8192 MiB, wobei 1M = 1024×1024 Byte = 1 MiB entspricht. Es ist wichtig, dass die Datei so angelegt wird, da sie dann auf der Festplatte durchgehend nur durch leere Speicherstellen besteht und keine zufälligen Daten enthält. Mehr in den Manpages von Shell/dd und zero.

Um nicht jedem beliebigen Benutzer die Möglichkeit zu geben, den Swap auszulesen, sollte man

sudo chmod 0600 /var/cache/swap/swap0 

ausführen. Das setzt die Rechte für alle Benutzer außer root auf "kein Lesen, kein Schreiben, kein Ausführen".

Um den Speicher zu formatieren, gibt man folgendes ein:

sudo mkswap /var/cache/swap/swap0 

Die Warnung kann man dabei ignorieren. Damit das System über den Swap Bescheid weiß, gibt man einfach

sudo swapon /var/cache/swap/swap0 

ein. Ein Neustart ist nicht notwendig.

Sicher will man die Auslagerungsdatei auch nach einem Neustart wieder verwenden. Dazu einfach die Datei /etc/fstab in einem Editor mit Rootrechten[2] öffnen und dort diese Zeile anhängen:

/var/cache/swap/swap0    none    swap    sw      0 0

Dynamisch wachsender Swap

Man kann auch eine dynamische Auslagerungsdateiverwaltung installieren, die nach Bedarf mehrere kleinere Auslagerungsdateien in einem Ordner anlegt. Dazu wird das Programm Swapspace {en} benötigt:

  • swapspace (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install swapspace 

sudo aptitude install swapspace 

Die Grundkonfiguration von Swapspace braucht nicht weiter angepasst zu werden.

Swapnutzung einstellen

Es lässt sich festlegen, wann der Kernel Daten aus dem Arbeitsspeicher in die Swap-Partition bzw. Swap-Datei verschiebt. Die swappiness wird mit einem Wert von 0 bis 100 angegeben, wobei mit 0 nur dann ausgelagert wird, wenn es gar nicht mehr anders geht (Arbeitsspeicher voll) und mit 100 der Arbeitsspeicher kaum genutzt wird. Der Standardwert ist 60, der Kernel neigt also eher zum Auslagern. Pauschal lässt sich kein Wert empfehlen, da es auf das jeweilige System und das Benutzerverhalten ankommt. Dies zeigt auch diese Diskussion {en} bei welcher man sich praktisch nicht einigen konnte.

Verfügt das System beispielsweise mit mehr als 2 GiB über viel Arbeitsspeicher und hantieren die Benutzer nicht mit schwerfälligen Programmen (Bild-/Videobearbeitung, Datenkompression, aufwändig gestaltete Spiele o.ä.), könnte es von Nutzen sein, die swappiness klein zu halten. Andererseits sollte jedoch darauf geachtet werden, dass die Kapazität des Arbeitsspeichers nicht verschwendet wird. Wurde die Swappiness sehr niedrig gesetzt und laufen z.B. viele Programme parallel, kann es leicht passieren, dass der Arbeitsspeicher fast voll ist und genau dann ein Programm gestartet wird, das den Arbeitsspeicher besonders stark belastet. Nun ist der Speicher ausgeschöpft und das System muss nicht nur das ohnehin schwerfällige Programm laden, sondern gleichzeitig auch noch auslagern. Resultat ist ein völlig ausgelastetes System.

Mit folgendem Befehl lässt sich der aktuelle Wert der swappiness herausfinden:

sysctl vm.swappiness 

Das Ergebnis könnte so aussehen:

vm.swappiness = 60

Um die swappiness sofort zu ändern, bspw. auf 25 abzusenken, verwendet man diesen Befehl:

sudo sysctl vm.swappiness=25 

Diese Änderung wird vom System jedoch nach einem Neustart vergessen, wenn nicht folgendes in die Systemdatei /etc/sysctl.conf eingetragen wird[2]:

vm.swappiness=25

Swap überwachen

Mit

swapon -s 

kann man jederzeit den Zustand des Swap überprüfen. Dazu sind normalerweise auch keine Root-Rechte notwendig, d.h. auch unprivilegierte Benutzer können den Befehl ausführen. Der Befehl zeigt den Inhalt der Datei /proc/swaps an. Eine weitere Möglichkeit, die Swap-Nutzung kontinuierlich anzuzeigen, bietet der Befehl top.

Grafische Werkzeuge

Bei KDE 4 ist ein Systemmonitor im Menü in "Programme -> System -> Systemmonitor" zu finden, der Reiter "Systemlast" zeigt mitunter auch die Swapnutzung an.

Unter Xfce kann man sich die Belegung von Swap anzeigen lassen, in dem man das Programm "System -> Task Manager" startet. Oder in dem man das Plugin "Systemauslastung" zum Xfce Panel hinzufügt.

Swap leeren

Der Swap ist nach dem Starten des Systems unbenutzt. Möchte man den Swap im laufenden Betrieb leeren, muss der Swap zunächst de- und dann wieder aktiviert werden. Ist der Swap in der /etc/fstab eingetragen, lauten die Befehle hierfür:

sudo swapoff -a  ## Swap ausschalten
sudo swapon -a   ## Swap einschalten 

Zwischendurch kann man über ein weiteres Terminalfenster das Leeren des Swaps beobachten:

free -s 3 |grep Swap 

oder einfach

top 

Falls es nur um eine spezielle Swap-Partition gehen soll, z.B. sda2, lauten die Befehle entsprechend:

swapoff /dev/sda2
swapon /dev/sda2 

Diese Revision wurde am 28. August 2014 21:51 von Physikus erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System