Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Linux (wie so gut wie alle anderen Betriebssysteme) versucht, die Betriebssystemkomponenten, aktuell benötigte Programmdaten, usw. 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 (= Auslagerungspartition) an.
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 man hat andere extrem große Dokumente geöffnet, usw.).
Die passende Speichergröße hängt von mehreren Faktoren ab und kann nicht im Allgemeinen angegeben werden. Je nach Systemnutzung reichen schon in etwa 1 GB Swapspeicher bzw. für Suspend-to-Disk 1 GB + RAM-Kapazität. Falls der Swapspeicher (und RAM) volllaufen, stürzt das System unter Umständen ab und alle nicht mit der Festplatte synchronisierten Daten sind verloren, weswegen auch ein großzügiger angelegter Swapbereich sinnvoll sein kann.
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.
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 mit Hilfe 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
Der Ruhezustand kann aktuell (Stand Oktober 2016) nur mit einer Swap-Partition verwendet werden. Infos: https://help.ubuntu.com/community/SwapFaq
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.
Die Zeile besagt, dass eine Datei mit dem Namen swap0 mit 8192 MiB Größe angelegt wird. Die Größe ergibt sich aus 1024M×8 = 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
Man kann auch eine dynamische Auslagerungsdateiverwaltung installieren, die nach Bedarf mehrere kleinere Auslagerungsdateien in einem Ordner anlegt. Dazu wird das Programm Swapspace benötigt:
swapspace (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install swapspace
sudo aptitude install swapspace
Die Grundkonfiguration von Swapspace braucht nicht weiter angepasst zu werden.
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 bei welcher man sich praktisch nicht einigen konnte.
Hat das System mehr als 2 GiB 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
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.
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.
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
zRam - zusätzlichen Swap im Arbeitsspeicher (RAM) anlegen
Skripte/UUID anpassen mit uuid2swap - Fehlerhafte UUID der Swap-Partition schnell korrigieren
Diese Revision wurde am 25. Oktober 2016 09:36 von darkmasta erstellt.