[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Partitionierung: Partition einrichten] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/hd.png, 48, align=left)]] Linux (wie so gut wie alle anderen Betriebssysteme) versucht, die Betriebssystemkomponenten, aktuell benötigte Programmdaten u.a. im RAM (Arbeitsspeicher) zu halten, da der Zugriff auf das RAM deutlich schneller ist als auf Datenträger wie Festplatte, CD oder USB-Stick. 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 einen Swap-Bereich (= Auslagerungsbereich) an. Neuere Ubuntu-Versionen verwenden hierbei eine Swap-Datei. Verwendet man noch [:Xenial:] oder hat man von einer älteren Ubuntu-Version ein [:Upgrade:] durchgeführt, wird statt der Swap-Datei noch eine Swap-Partition verwendet. Dies hat in der Regel keinen Nachteil, es unterscheidet sich aber die Handhabung in manchen Details. = Swapgröße = 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. = Swap anlegen = Wie oben bereits erwähnt, legt K|X|Ubuntu standardmäßig automatisch einen Swap-Bereich an, d.h. man muss nichts weiter machen. Wie man einen neuen Swap-Bereich anlegt, wird im folgenden Abschnitt beschrieben. == Swap-Partition erstellen == {{{#!vorlage warnung Durch `mkswap` wird die angegebene Partition [:Formatieren: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 eine 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`: {{{#!vorlage Befehl sudo mkswap /dev/xxxx }}} Anschließend kann die Partition [:mount:eingebunden] werden. Dazu ermittelt man zunächst die [:UUID:] der Partition mit {{{#!vorlage Befehl ls -l /dev/disk/by-uuid }}} und bindet diese mit dem Befehl {{{#!vorlage Befehl sudo swapon -U UUID }}} ein. Um die Partition dauerhaft einzubinden, öffnet man die Datei [:fstab:/etc/fstab] mit Root-Rechten.[2] In der Datei fügt man folgende Zeile ein, welche entsprechend angepasst werden muss: {{{ UUID=.... none swap sw 0 0 }}} == Swap-Datei erstellen == Mit Hilfe des Programms [:Shell/dd:dd] kann eine Auslagerungsdatei erstellt werden. Im folgenden Beispiel ist diese 8 GiB groß (8192 Blöck mit einer Größe von 1 MiB): {{{#!vorlage Befehl sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 }}} {{{#!vorlage Experten Die Zeile besagt, dass eine Datei mit dem Namen '''swapfile''' im Dateisystem unter / mit 8192 MiB Größe angelegt wird. Die Größe ergibt sich aus 1M×8192 = 8192 MiB, wobei 1M im Befehl `dd` gleich 1024×1024 Byte = 1 MiB entspricht. Der Wert 8192 ist der `count` aus dem `dd`-Befehl. Siehe auch: [https://de.wikipedia.org/wiki/Byte Vergleichstabelle-Binärpräfixe gemäß IEC ] 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 [:man:Manpages] von [:Shell/dd:] und zero. }}} {{{#!vorlage Hinweis Grundsätzlich könnte man eine Auslagerungsdatei mit dem Programm `fallocate` erstellen. Dieses Vorgehen kann aber zu Problemen bei Dateisystemen wie ext4 (Standard bei Ubuntu), btrfs und XFS führen, weswegen von der Nutzung von `fallocate` abgeraten wird. In der Manpage von `mkswap` wird ebenfalls explizit von der Nutzung von `fallocate` abgeraten und die Nutzung von `dd` empfohlen. }}} Um nicht jedem beliebigen Benutzer die Möglichkeit zu geben, den Swap auszulesen, sollte man {{{#!vorlage Befehl sudo chmod 0600 /swapfile }}} 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: {{{#!vorlage Befehl sudo mkswap /swapfile }}} Die Warnung kann man dabei ignorieren. Damit das System über den Swap Bescheid weiß, gibt man einfach {{{#!vorlage Befehl sudo swapon /swapfile }}} ein. Ein Neustart ist nicht notwendig. Sicher will man die Auslagerungsdatei auch nach einem Neustart wieder verwenden. Dazu einfach die Datei [:fstab:/etc/fstab] in einem Editor[2] mit [:Root-Rechte:Root-Rechten] öffnen und dort diese Zeile anhängen: {{{ /swapfile 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 [http://pqxx.org/development/swapspace/ Swapspace] {en} benötigt: {{{#!vorlage Paketinstallation swapspace, universe }}} Die Grundkonfiguration von Swapspace braucht nicht weiter angepasst zu werden. {{{#!vorlage Hinweis Ein Ruhezustand (suspend-to-disk) ist damit nicht möglich, da hier der gesamte "resume"-Bereich am Stück vorliegen muss. }}} [[Anker(swappiness)]] = 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 nicht ausgelagert wird. Es besteht das Risiko, dass der Arbeitsspeicher bei speicherintensiven Anwendungen voll läuft und das System einfriert, während 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 [https://web.archive.org/web/20120705071005/http://kerneltrap.org/node/3000 diese Diskussion] {en} 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: {{{#!vorlage Befehl 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: {{{#!vorlage 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 {{{#!vorlage Befehl 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. Bleibt die Ausgabe leer, ist kein Swap-Bereich eingerichtet. Zeigt die Ausgabe einen Eintrag wie {{{ swapon -s Filename Type Size Used Priority /swapfile file 20971516 1272716 -2 }}} ist eine Swap-Datei definiert. Der Befehl zeigt den Inhalt der Datei '''/proc/swaps''' an. Weitere Möglichkeiten, die Swap-Nutzung anzuzeigen, bieten die Befehle [:free:] oder auch [:top:]. Letzterer aktualisiert die Anzeige kontinuierlich. == Grafische Werkzeuge == Bei KDE 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: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: {{{#!vorlage Befehl sudo swapoff -a ## Swap ausschalten sudo swapon -a ## Swap einschalten }}} Zwischendurch kann man über ein weiteres Terminalfenster das Leeren des Swaps beobachten: {{{#!vorlage Befehl free -s 3 |grep Swap }}} oder einfach {{{#!vorlage Befehl top }}} Falls es nur um eine spezielle Swap-Partition gehen soll, z.B. '''sda2''', lauten die Befehle entsprechend: {{{#!vorlage Befehl swapoff /dev/sda2 swapon /dev/sda2 }}} = Swap deaktivieren = Erst die zuständige [:systemd/#Units:systemd-Unit] ermitteln: {{{#!vorlage Befehl sudo systemctl --type swap }}} Anschließend sollte das Auslagern beendet werden: {{{#!vorlage Befehl sudo swapoff -a }}} ...und [:systemd/Units/#Laden-von-Units-komplett-verhindern:maskieren], damit sie beim Systemstart nicht mehr geladen wird: {{{#!vorlage Befehl sudo systemctl mask "UNIT_DATEI" }}} (Auf die Anführungszeichen kann man verzichten, wenn der Name der Unit-Datei keine Leer- oder sonstige Sonderzeichen wie z.B. \ enthält.) Abschließend muss der Eintrag der Swap-Datei/-Partition in der [:fstab:] gelöscht oder zumindest durch eine voran gestellte '''#''' auskommentiert werden. Zu erkennen ist der Eintrag an der Typenbezeichnung ''swap'' in der Spalte ''''. {{{#!code sh # UUID=03b77228-ed4c-4218-910e-11b9f77c4b46 / ext4 defaults 0 1 # UUID=8883dbc8-80f8-49b8-8c5f-13a32baefe98 none swap sw 0 0 }}} Eine Swap-Datei kann dann schlicht mit [:Root-Rechte:Root-Rechten] gelöscht werden. Nach dem Entfernen einer Swap-Partition will man anschließend wahrscheinlich eine andere vergrößern, siehe dazu [:Partitionierung:]. = Links = == Intern == * [:zRam:] - zusätzlichen Swap im Arbeitsspeicher (RAM) anlegen * [:Skripte/UUID_anpassen_mit_uuid2swap:] - Fehlerhafte UUID der Swap-Partition schnell korrigieren == Extern == * [ubuntu_doc:community/SwapFaq:Swap FAQ] {en} * [https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s2-diskpartrecommend-ppc.html#id4394007 Recommended Partitioning Scheme] {en} # tag: System, Datenträger