Hallo,
auf meinem Lenny sind unter anderen zwei tmpfs Dateisysteme gemountet:
Lenny1:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 4.0G 0 4.0G 0% /lib/init/rw
tmpfs 4.0G 0 4.0G 0% /dev/shm
Ich frage mich wofür die eigentlich benötigt werden und wieso sie bereits automatisch beim booten gemoutet werden obwohl in der fstab keine Einträge vorhanden sind?
Frage zum tmpfs und /lib/init/rw bzw. /dev/shm
Re: Frage zum tmpfs und /lib/init/rw bzw. /dev/shm
hi,
/dev/shm steht für "shared memory", das sind Speicherbereiche, auf die mehrere Programme zugreifen können um Daten gemeinsam zu nutzen. Da das direkt im Hauptspeicher passiert, geht es schneller als über echte Dateien. Unter /dev/shm sind diese Bereiche nach außen sichtbar. Es ist zwar ein ziemlich spezieller Mechanismus, der nur von wenigen Programmen benutzt wird (z.B. Datenbanken), aber es ist ein POSIX-Standard und sollte deswegen auf jedem System vorhanden sein.
/lib/init/rw wird von (wenigen) init-Scripten gebraucht um temporäre Dateien anzulegen. Wenn das System startet, steht zunächst nur "/" zur Verfügung und das auch noch read-only. Verzeichnisse wie /tmp oder /var/run können also nicht benutzt werden; evt. liegen sie sogar auf anderen Partitionen, die noch nicht gemountet sind. Also wird als erstes ein tmpfs (eine bessere Ramdisk) unter /lib/init/rw eingerichtet. Damit ein beliebiges Init-Script auch im laufenden Betrieb noch genauso funktioniert, muss /lib/init/rw bis zum shutdown zur Verfügung stehen.
Man kann auch ohne Eintrag in /etc/fstab jederzeit beliebige Dateisysteme mounten, man muss dem mount-Befehl nur sämtliche Optionen auf der Kommandozeile mitgeben. So machen das die Init-Scripte für alle Dateisysteme, die überall auf die gleiche Art gemountet werden müssen (/proc und /dev/pts wären weitere Beispiele). Auf die Art bleibt /etc/fstab eine Art Merkzettel für die Besonderheiten eines Systems; wenn's keine gibt, läuft es sogar komplett ohne fstab.
Übrigens verbraucht ein tmpfs nur soviel RAM, wie tatsächlich Daten gespeichert sind, "df" zeigt die maximal erlaubte Größe an. Diese kann über Variablen in /etc/default/tmpfs eingestellt werden.
/dev/shm steht für "shared memory", das sind Speicherbereiche, auf die mehrere Programme zugreifen können um Daten gemeinsam zu nutzen. Da das direkt im Hauptspeicher passiert, geht es schneller als über echte Dateien. Unter /dev/shm sind diese Bereiche nach außen sichtbar. Es ist zwar ein ziemlich spezieller Mechanismus, der nur von wenigen Programmen benutzt wird (z.B. Datenbanken), aber es ist ein POSIX-Standard und sollte deswegen auf jedem System vorhanden sein.
/lib/init/rw wird von (wenigen) init-Scripten gebraucht um temporäre Dateien anzulegen. Wenn das System startet, steht zunächst nur "/" zur Verfügung und das auch noch read-only. Verzeichnisse wie /tmp oder /var/run können also nicht benutzt werden; evt. liegen sie sogar auf anderen Partitionen, die noch nicht gemountet sind. Also wird als erstes ein tmpfs (eine bessere Ramdisk) unter /lib/init/rw eingerichtet. Damit ein beliebiges Init-Script auch im laufenden Betrieb noch genauso funktioniert, muss /lib/init/rw bis zum shutdown zur Verfügung stehen.
Man kann auch ohne Eintrag in /etc/fstab jederzeit beliebige Dateisysteme mounten, man muss dem mount-Befehl nur sämtliche Optionen auf der Kommandozeile mitgeben. So machen das die Init-Scripte für alle Dateisysteme, die überall auf die gleiche Art gemountet werden müssen (/proc und /dev/pts wären weitere Beispiele). Auf die Art bleibt /etc/fstab eine Art Merkzettel für die Besonderheiten eines Systems; wenn's keine gibt, läuft es sogar komplett ohne fstab.
Übrigens verbraucht ein tmpfs nur soviel RAM, wie tatsächlich Daten gespeichert sind, "df" zeigt die maximal erlaubte Größe an. Diese kann über Variablen in /etc/default/tmpfs eingestellt werden.
Beware of programmers who carry screwdrivers.
Re: Frage zum tmpfs und /lib/init/rw bzw. /dev/shm
Super vielen Dank für diese ausführliche Antwort ![Smile :-)](./images/smilies/icon_smile.gif)
Meine Überlegung war nämlich tmpfs für temporäre Tabellen bei MySQL zu verwenden
und ich war mir nicht sicher ob ich dafür direkt /dev/shm benutzen könnte. Wenn ich es jedoch richtig
verstehe, dann spricht nichts dagegen.
Ich habe auch gelesen, daß tmpfs häufig für das /tmp-Verzeichnis verwendet wird.
Nun ist das bei meiner Debian-Installation nicht der Fall.
Ich frage mich ob es Sinn macht das dauerhaft zu ändern und
welche Vor-und Nachteile damit möglicherweise verbunden wären?
![Smile :-)](./images/smilies/icon_smile.gif)
Meine Überlegung war nämlich tmpfs für temporäre Tabellen bei MySQL zu verwenden
und ich war mir nicht sicher ob ich dafür direkt /dev/shm benutzen könnte. Wenn ich es jedoch richtig
verstehe, dann spricht nichts dagegen.
Ich habe auch gelesen, daß tmpfs häufig für das /tmp-Verzeichnis verwendet wird.
Nun ist das bei meiner Debian-Installation nicht der Fall.
Ich frage mich ob es Sinn macht das dauerhaft zu ändern und
welche Vor-und Nachteile damit möglicherweise verbunden wären?
-
- Beiträge: 3800
- Registriert: 26.02.2009 14:35:56
Re: Frage zum tmpfs und /lib/init/rw bzw. /dev/shm
Je mehr da reingeschrieben - und nicht gelöscht wird bis zum nächsten Reboot, um
so weniger Ram bleibt natürlich für die Anwendungen. Das muss man abwägen...
so weniger Ram bleibt natürlich für die Anwendungen. Das muss man abwägen...
Re: Frage zum tmpfs und /lib/init/rw bzw. /dev/shm
Es ist eher eine moralische als eine technische Frage, in /dev/shm tauchen normal nur die shared memory Segmente auf, gemischt mit normalen Dateien ist es ein wenig unübersichtlich. Ein zusätzliches tmpfs, entweder für /tmp oder rein für MySQL, kostet so wenig...jack88 hat geschrieben:Meine Überlegung war nämlich tmpfs für temporäre Tabellen bei MySQL zu verwenden
und ich war mir nicht sicher ob ich dafür direkt /dev/shm benutzen könnte.
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
Beware of programmers who carry screwdrivers.