Wie richte ich Swap Space ein?

114

Raspberry Pi hat nur 256 MB RAM, daher möchte ich Swap-Speicher verwenden (entweder auf SD-Karte oder angeschlossenem USB-Speicher). Wie richte ich es ein?


quelle
10
Das Tauschen auf dem Pi (und ähnlichen Geräten) kann schmerzhaft langsam sein, und alles, was tatsächlich ausgiebig Swap verwendet, wird das System praktisch zum Stillstand bringen. Vorsichtig!
MattJ
1
Sie wissen, was gut wäre, ist ein USB-RAM-Laufwerk (kein Flash- oder SSD-Laufwerk, sondern ein flüchtiger RAM-Chip mit USB-Geschwindigkeit). Für einen solchen Swap wäre das gut.
Piotr Kula
3
@Tibor Die Frage lautet "Wie richte ich den Swap Space ein?" Meiner Meinung nach sollte eine korrekte Antwort die Vorgehensweise beschreiben, auf einige Fallstricke aufmerksam machen und vor Missbrauch warnen. Ihre Antwort nicht nur , dass während der „beliebtesten“ Antwort , die Sie nur erzählt , warum Sie sollten niemals „tun dies überhaupt“ (was dumm ist, weil es eine richtige Art und Weise ist , es zu benutzen, und es tatsächlich ist nützlich).
Andrew Larsson
1
Es gibt ungefähr eine Million Warnungen vor der Verwendung von Swap mit einem Himbeer-Pi auf dieser Seite, aber wenn Sie etwas einmal erstellen müssen, ist dies unvermeidlich.
Archonic
1
@Archonic - +1 . Ich habe gelegentlich nicht mehr genügend Speicher, um Dateien zu kompilieren . Eine kleine Auslagerungsdatei mit einer geringen Auslagerungsrate ist eine Verbesserung gegenüber der aktuellen Situation.
Jww

Antworten:

134

Raspbian verwendet dphys-swapfile , eine auf Swap-Dateien basierende Lösung anstelle der auf Swap-Partitionen basierenden Standardlösung. Es ist viel einfacher, die Größe des Swap zu ändern.

Die Konfigurationsdatei lautet:

/etc/dphys-swapfile 

Der Inhalt ist sehr einfach. Standardmäßig hat mein Raspbian 100 MB Swap:

CONF_SWAPSIZE=100

Wenn Sie die Größe ändern möchten, müssen Sie die Nummer ändern und dphys-swapfile neu starten:

/etc/init.d/dphys-swapfile restart

Bearbeiten: Unter Raspbian ist der Standardspeicherort / var / swap, der sich (natürlich) auf der SD-Karte befindet. Ich denke, es ist eine schlechte Idee, daher möchte ich darauf hinweisen, dass die / etc / dphys-Swap-Datei auch die folgende Option haben kann: CONF_SWAPFILE = / media / btsync / swapfile

Ich habe nur problem damit, der usb speicher ist automounted, also ein mögliches rennen hier (automount vs. swapon)

asalamon74
quelle
2
Das ist die richtige Antwort. Keine der anderen Antworten erwähnte die Dphys-Swap-Datei.
Kenji Noguchi
1
Ich habe diese Antwort als richtig bewertet. Ich habe das erst vor kurzem gelernt, aber Ihre Antwort kann mir viel Zeit sparen. ;-)
Drachenfels
Können Sie erklären, warum die Verwendung /var/swapeine schlechte Idee ist?
Andrey Portnoy
Zum Installieren von R-Paketen, die zuvor aufgrund von "Systemaufruf fehlgeschlagen, Speicher kann nicht zugewiesen werden" fehlgeschlagen sind: Setzen Sie CONF_SWAPSIZE = 1024. Weniger ist nicht genug.
Vertikalist
36

Sie können ganz einfach Swap Space einrichten. Wenn es sich beispielsweise um ein USB-Laufwerk handelt /dev/sdx, würden Sie Folgendes verwenden (hierfür müssen Sie root sein):

$ mkswap /dev/sdx
$ swapon /dev/sdx

Beachten Sie, dass dies das gesamte Gerät verwenden würde und Sie wahrscheinlich alle vorhandenen Daten auf dem Gerät verlieren werden.

Sie können eine Auslagerungsdatei auch wie folgt erstellen (mithilfe eines loopGeräts):

$ dd if=/dev/zero of=/path/to/swapfile bs=1M count=1024 # For 1GB swap file
$ mkswap /path/to/swapfile
$ swapon /path/to/swapfile

Wenn Sie die Auslagerungsdatei nicht mehr benötigen (wenn Sie beispielsweise das USB-Laufwerk auswerfen möchten), müssen Sie verwenden swapoff <device>. Andernfalls kommt es wahrscheinlich zu einem Systemabsturz.

Sie sollten jedoch vorsichtig sein . SD-Karten haben begrenzte Lese- / Schreibbeschränkungen und verkürzen ihre Lebensdauer. Wenn Sie eine externe Festplatte verwenden, sollten Sie in Ordnung sein, aber es wird sehr langsam sein.

Andrew Larsson
quelle
2
Warum den Loopback hinzufügen? Das ist doch nicht nötig?
Popey
Du hast recht, ist es nicht. Ich habe die Antwort bearbeitet, um das zu reflektieren.
2
Ich denke, Sie sollten dies ändern, um zu vermeiden, dass Benutzer kopieren und einfügen und versehentlich mkswapauf ihrer Root-Partition ausgeführt werden. Ich denke, das sdxist eine gute Konvention.
Jivings
3
Benutzer, die SWAP aktivieren, könnten daran interessiert sein, die Kernel- Austauschbarkeit anzupassen .
ErdeMeLon
@earthmelon Raspbian Jessie hat standardmäßig Swappiness 1.
Kaay
32

Mach das überhaupt nicht.

Sie sollten Swap auf dem Raspberry Pi nicht aktivieren.

Obwohl es möglich ist, ist es nicht nützlich. Selbst auf einer SDHC-Karte der Klasse 10 ist sie einfach zu langsam. Außerdem verkürzen Sie die Lebensdauer der SD-Karte.

Auf jedem Flash-basierten Speichergerät (SD-Karte, SDD, USB-Stick) werden wahrscheinlich auch systemweite Pausen angezeigt, während eine große Gruppe von Flash-Blöcken gelöscht wird.

Mögliche Ausnahmen:

  • Wenn Sie eine (magnetische) Festplatte anschließen (über einen USB-SATA- oder USB-IDE-Adapter)
  • Wenn Sie ZRAM oder ähnliches verwenden
finnw
quelle
3
Zweifellos wird das Austauschen eines USB-Sticks Ihren Schlüssel sehr schnell töten. Das Austauschen der SD-Karte ist auch gefährlich, selbst wenn neuere SD-Karten (Klasse 10) dies besser unterstützen könnten. ZRAM ist eindeutig der richtige Weg, wenn Sie mehr RAM benötigen
neofutur
1
Sie würden denken, dass mit der ReadyBoost-Technologie in Windows jemand ein USB-Laufwerk herstellen würde (oder eSata, nicht sicher, ob ReadyBoost das verwenden kann, würde Himbeer-Pi nicht nützen, wäre aber interessant), das den tatsächlichen Arbeitsspeicher verwendet, so dass Sie könnten Steigern Sie die Leistung Ihres Computers. Obwohl es wahrscheinlich einfacher und billiger wäre, nur ein neues Motherboard zu kaufen, das die benötigte RAM-Größe unterstützt.
Kibbee
33
Warum hat diese Antwort so viele positive Stimmen? Es gibt viele Gründe, Swap zu verwenden. Ich habe eine Auslagerungsdatei auf einem externen Laufwerk verwendet, um innerhalb weniger Tage eine große Bibliothek zu kompilieren. Es ist langsam wie tote Affen, die in Melasse schwimmen, aber das bedeutet nicht, dass Sie "das überhaupt nicht tun sollten".
Andrew Larsson
10
Ihre Warnung ist zwar gut gemeint, aber viel zu stark. Finden Sie heraus, warum nicht und warum genau das ist, wofür der Raspberry Pi gedacht ist: Probieren Sie aus, was Sie wollen, und LERNEN Sie. Es gibt auch einige gute Gründe, ein externes Laufwerk für den Austausch zu verwenden, z. B. das Erfüllen eines Spitzenarbeitsspeicherbedarfs für eine einmalige Bibliothekskompilierung. Die Suche, die mich hierher brachte. Die Zeiten, in denen ich am meisten gelernt habe, waren, als ich etwas Kleineres vermasselt und begriffen habe, warum. Tut mir leid, dass Sie nicht so hilfreich sind, wie Sie denken.
Chris Hatton
2
Viel zu stark. "am besten nicht", vielleicht, aber "schlecht, verschwenderisch, schädlich und nutzlos" ist irreführend. Alles trägt mit Einsatz, bedenkt Sauerstoff ist giftig, und Raspbian tut eine Swap - Datei verwenden. Eine Verlangsamung ist in der Regel besser als ein Absturz und lässt Sie alle paar Monate riesige Dinge kompilieren. Stellen Sie einfach eine niedrige Swappiness ein und Sie sind gut.
Kaay
4

Mit Raspbmc wird /etc/init/swap.confder Austausch über / swap-Datei konfiguriert. Es prüft zunächst auf Vorhandensein von /home/pi/.enable_swap.

Wenn Sie löschen, /home/pi/.enable_swapwird die Auslagerungsdatei nicht erstellt, und erstellen Sie sie einfach mit neu, touch /home/pi/.enable_swapwenn der Auslagerungsmodus aktiviert und ein Neustart erforderlich ist.

valentt
quelle
4

Es ist schade, dass die Raspberry Pis kein GigaBit-Ethernet haben, aber es ist zumindest theoretisch möglich , Swap-Speicher auf einem Netzwerkgerät zu haben - das Linux-Terminal-Server-Projekt kann es den Clients gemäß diesem Punkt in ihrem Wiki vom Server anbieten .

Ich fand ein Foundation Forum-Thema "Tipp: Swap over nfs" , das zeigt, wie jemand, der bereits einige NFS-Mounts hatte, eine Swap- Datei auf einer von ihnen verwendete und diese über einen Loop-Mount mountete (möglicherweise erforderlich, weil Linux ein nicht zulässt) NFS-Mount zur direkten Verwendung). Da die Remote - Swap-Datei wird Daten halten , die das Betriebssystem nicht verlieren darf ich würde nur das prüfen , für ein verkabeltes Ethernet - Netzwerk - eine drahtlose Verbindung wäre zu zerbrechlich IMHO. Natürlich dürfen Sie auch nicht zulassen, dass der Remote-Server heruntergefahren wird, ohne den Swap auszuschalten und erst vollständig zu entleeren!

SlySven
quelle
RPi würde aufgrund der begrenzten Bandbreite zwischen dem Broadcom-Chip und dem Ethernet-Controller überhaupt nicht von GB-Ethernet profitieren.
Dmitry Grigoryev
1
... und den Ethernet-Controller als Add-On zum USB-Chip ! Ja, aber wir können träumen von einem hypothetischen RPi Design , bei dem die Netzwerkhardware Teil der SoC Kerneinrichtung war. 8-P
SlySven
Ethernet-Controller sind häufig externe Chips, aber USB als Inter-Chip-Bus ist in der Tat sowohl für die Geschwindigkeit als auch für den Stromverbrauch schlecht.
Dmitry Grigoryev