Wie kann ich den RAM-Speicher für das Verzeichnis / tmp verwenden und wie kann ich die maximale RAM-Auslastung festlegen?

92

Nachdem der Kommentar von Anonymous zur Frage Wie wird das / tmp-Verzeichnis aufgeräumt? Ich fand, dass es eine großartige Idee wäre, es auf meinem System zu implementieren, da ich 16 GB RAM habe und nie alles verwendet habe.

Meine temporären Dateien werden nie auf die Festplatte geschrieben. Sie werden auf eine RAM-Disk geschrieben. Ich habe tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab eingegeben.

Meine Frage ist:

Kann ich einen Maximalwert für die RAM-Nutzung festlegen /tmp? Und in diesem Fall, was würde passieren, wenn die maximale Menge überschritten würde, würde es auf die Festplatte schreiben?

Ich habe eine Lösung gelesen, die besagt:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

Nach meinem Verständnis wird dies jedoch keine dauerhafte Lösung sein. Wenn es dauerhaft sein soll, muss es der /etc/fstabKonfigurationsdatei hinzugefügt werden.

Wenn dies die richtige Lösung ist, wie kann ich diesen Mount-Befehl in einen Line-In-Befehl umwandeln /etc/fstab?

Dan
quelle
Dies ist auch eine gute Idee, wenn Sie und SSD haben, wie Sie es nicht mit nicht nützlichen Schriften "verbrauchen" ...
Postadelmaga
Ha ha genau die gleiche Frage hat mich hierher gebracht: D
Teddy Markov

Antworten:

80

Du liegst absolut richtig. Der entsprechende fstab-Eintrag würde folgendermaßen aussehen:

tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0

Bitte beachten Sie:

Wenn der tmpfsSpeicher voll ist, verhält es sich wie eine physische Festplatte, wenn der Fehler "Nicht genügend Speicherplatz" ausgegeben wird. Während ein Neustart (und damit das Leeren des Cache) dieses Problem behebt, kann es zu Problemen kommen, wenn ein einzelner Vorgang zunächst mehr Speicherplatz beansprucht als verfügbar ist tmpfs. In diesem Fall beginnt Ihr Computer, vom RAM auf die Festplatte zu wechseln, wodurch Ihr System zum Stillstand kommt, vorausgesetzt, Sie haben zu Beginn eine Swap-Partition.

In Anbetracht dessen könnte eine Größe von 512 MB heutzutage viel zu gering sein, da in modernen Maschinen viel mehr RAM vorhanden ist und es viel billiger geworden ist. Da Sie bereits 16 GB RAM haben, sollte die Verwendung des Standardwerts der Hälfte Ihres RAM tmpfsfür fast alle Szenarien mehr als ausreichen. Um den Standardwert zu verwenden, lassen Sie einfach den size=512MEintrag in Ihrer /etc/fstabDatei weg .

Ein weiterer Hinweis:

Sie können auch ganz einfach andere Systemordner in die Ramdisk einbinden, z

/var/cache

/var/games

/var/log/apt(nur defaults,noatimeohne mode=oder verwenden nosuid)

Aber Vorsicht: Es gelten die gleichen Regeln wie oben, da Platzmangel zu großen Problemen führen kann. Stellen Sie sich vor, der Speicherplatz für / var / log / apt wird knapp und Sie können keine Programme mehr installieren! /var/logWenn Sie Ordner auf die Ramdisk laden, werden alle Ihre Protokolldateien beim Neustart gelöscht, sodass Sie Ihr System nicht debuggen können, wenn etwas Unerwartetes passiert. Verwenden Sie diese Einstellungen also auf eigenes Risiko!

Anmerkung der Redaktion: Ich habe die Option /runin tmpfsmount entfernt , da dieser Ordner und seine Unterordner tmpfsstandardmäßig bereits aktiviert sind.

FuzzyQ
quelle
11
Wenn ich mich nicht irre, dient / var / tmp / dazu, Dateien nach dem Neustart zu behalten. Das ist der Hauptunterschied zwischen diesem und / tmp /, daher sollten SIE / var / tmp nicht nach ram verschieben.
3
Wenn Ubuntu keine 4 GB tmpfs mehr hat, wird meine 20 GB SWAP-Partition verwendet?
Loostro
3
Ja, das muss ich auch hinzufügen. Sobald tmpfs seine Grenzen überschreitet, wird es auf Swap-Partitionen ausgeweitet (sofern es eine gibt).
FuzzyQ
5
Bedeutet die Zuweisung der Hälfte Ihres Arbeitsspeichers, dass die Hälfte Ihres Arbeitsspeichers für RAMDISK reserviert ist, oder handelt es sich nur um eine Beschränkung dessen, was RAMDISK verbraucht, und was nicht verwendet wird, ist freier Arbeitsspeicher, der dem Programm zugewiesen wird, das RAM benötigt?
Matt
6
@matt Es ist nur eine Kappe.
FuzzyQ
35

Auf Systemen mit systemdhaben Sie die Möglichkeit, anstelle von fstab eine systemd-Unit-Datei zu verwenden, um das Ziel der Verwendung tmpfszum Mounten zu erreichen tmp. Auf meinem Ubuntu 16.04-System lief:

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount

Die Datei /usr/share/systemd/tmp.mountsieht folgendermaßen aus:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
[Unit]
Description=Temporary Directory
Documentation=man:hier(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime

[Install]
WantedBy=local-fs.target

Mit dem fstab-Ansatz von FuzzyQ übersetzt systemd Ihre fstab-Einträge dynamisch in Mount-Einheiten. Ich denke nicht, dass irgendein Ansatz besser ist.

Um die maximale Grenze für den Arbeitsspeicher wie gewünscht festzulegen, müsste size=512Mdie OptionsZeile durch ein Komma getrennt hinzugefügt werden .

Rick Ramstetter
quelle
2
Sie müssen systemctl enable tmp.mountnach cp sonst Systemctl wird mit der Meldung " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude
4
@Rick, es ist noch besser, das zu benutzen systemctl edit tmp.mount, wäre distro-neutral. Dadurch werden Ihre Änderungen in die Datei override.conf übernommen, sodass Sie die Standardeinstellung tmp.mount nicht ändern und die Datei override.conf einfach löschen können, um zur Standardkonfiguration zurückzukehren.
Bulat M.
Das Gleiche gilt für die Verwendung von systemctl edit durch Bulat und ln -snicht cpfür den ersten Schritt.
Michael Gratton,