Warum wurde / var / run nach / run migriert?

66

Aus der technischen Übersicht von Ubuntu 11.10 Oneiric :

Ubuntu 11.10 gewandert weg von /var/run, /var/lockund /dev/shmnun verwendet /run, /run/lockund /run/shmstatt (jeweils).

  • Ich habe diese Pfade in meinen Anwendungen fest programmiert. Warum wird diese Änderung an Oneiric vorgenommen?
  • Was kann ich tun, um meine Anwendungen abwärts- und vorwärtskompatibel zu machen? Gibt es einen besseren Weg, als zuerst die Existenz von /runund dann zu überprüfen /var/run?
Lekensteyn
quelle

Antworten:

58

Ziel ist es, die Anzahl der tmpfsDateisysteme zu reduzieren . Am 11.04 gibt es separate tmpfsDateisysteme /var/lockunter /var/runund /dev/shm. Wenn sich diese Verzeichnisse alle unter einem einzigen übergeordneten Verzeichnis befänden, tmpfswäre nur ein einziges erforderlich. Es bietet auch einen offensichtlichen Speicherort für weitere Laufzeitstatusdaten, die nach einem Neustart nicht bestehen bleiben sollten.

Sofern Ihre Anwendung nicht von kanonischen Dateipfaden abhängt, sollte Ihre Anwendung ohne Änderungen ausgeführt werden, da die alten Speicherorte mit den neuen verknüpft werden. Die AppArmor-Richtlinien sind ein Fall, der von den tatsächlichen Pfadnamen abhängt, weshalb dies ausdrücklich erwähnt wurde.

Die folgenden Links sollen die Begründung erläutern:

James Henstridge
quelle
36
  1. /run ist ein neuer verteilungsübergreifender tmpfs-Speicherort für die Speicherung von Dateien mit vorübergehendem Status, d. h. Dateien, die Laufzeitinformationen enthalten, die möglicherweise zu Beginn des Startvorgangs geschrieben werden müssen oder nicht und die nicht über Neustarts hinweg aufbewahrt werden müssen.

    Die Bereitstellung des /runVerzeichnisses bringt uns dem Punkt einen Schritt näher, an dem es möglich ist, das System normalerweise mit dem schreibgeschützten Root-Dateisystem zu verwenden, ohne umständliche Problemumgehungen wie aufs/unionfsÜberlagerungen zu erfordern .

    /run ersetzt mehrere vorhandene Speicherorte, die im Dateisystem-Hierarchiestandard beschrieben sind:

    • /var/run/run
    • /var/lock/run/lock
    • /dev/shm/run/shm[Derzeit plant nur Debian dies zu tun]
    • /tmp/run/tmp[optional; derzeit plant nur Debian, dies anzubieten]
    • /run ersetzt auch einige andere Speicherorte, die für temporäre Dateien verwendet wurden:

    • /lib/init/rw/run

    • /dev/.*/run/*
    • /dev/shm/*/run/*
    • beschreibbare Dateien unter /etc/run/*

    (Sie können also wahrscheinlich erwarten, dass sich diese auch bewegen).

    Quelle: Debian-Veröffentlichungsziele

  2. Ich würde raten, einen Teil in Ihrer Software zu erstellen, in dem Sie diese Verzeichnisse in Variablen festlegen, Ihren Code so ändern, dass diese Variablen verwendet werden, und dann die Variablen basierend auf dem System ändern, auf dem sie verwendet werden (aber ich wette, Sie wussten das bereits).

Rinzwind
quelle
1
Was meinst du mit beschreibbaren Dateien unter /etc. Die müssen alle nach dem Neustart bestehen bleiben, oder? Das sind nur generische Conf-Dateien.
Evan Carroll
6
Oh ich verstehe. Drei Dateien unter /etc, /etc/lvm/cache/ /etc/mtab /etc/network/run/ifstateund bald /etc/adjtime. Ich nehme an, es war schlecht für sie, /etcvon Anfang an dabei zu sein.
Evan Carroll
5

Nach dem, was ich gelesen habe, war dies die ursprüngliche Erklärung, warum / run eingeführt wurde. http://lwn.net/Articles/436012/

gotunandan
quelle
8
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Stefano Palazzo
3

Hinweis: Seit der Einführung von / run können kleine Konfigurationen Probleme verursachen. Mein Ubuntu-Server hat 256Mo RAM und / run ist standardmäßig auf 49Mo eingestellt.
Beim Start füllt es das Dateisystem bis zur Fülle.
Das Vornehmen von Änderungen in fstab führt nicht dazu, dass tempfs / run size kleiner wird. Weder tut andere Verfahren, die ich auf gg gefunden habe.
Ich habe die Lösung gefunden, die ich im Init-Skript hinzufügen kann: /etc/rc.localDie Zeile mount -t tmpfs tmpfs /run -o remount,size=85M , die beim Start verlängert werden soll. (Die 85M ist für meine conf.)

korrident
quelle
2

Sie sollten keinen dieser /runPfade fest codieren !

  • Verwenden Sie /var/run, weil ein Symlink zu vorhanden sein wird, /runfalls zutreffend
  • /var/lock ist das gleiche wie oben
  • /dev/shmVerwenden Sie shm_openniemals Hardcode, sondern immer etc (die posix-API)
ramslök
quelle