Scroll to navigation

PIVOT_ROOT(2) Linux-Programmierhandbuch PIVOT_ROOT(2)

BEZEICHNUNG

pivot_root - die Wurzeleinhängung ändern

ÜBERSICHT

int pivot_root(const char *neue_Wurzel, const char *alte_Wurzel);

Hinweis: Es gibt keinen Glibc-Wrapper für diesen Systemaufruf; siehe ANMERKUNGEN.

BESCHREIBUNG

pivot_root() verschiebt das Wurzeldateisystem des aufrufenden Prozesses in das Verzeichnis alte_Wurzel und macht die neue_Wurzel zum neuen Wurzeldateisystem des aufrufenden Prozesses.

Der typische Anwendungsfall von pivot_root() ist während des Systemstarts, wenn das System ein temporäres Wurzeldateisystem einhängt, zum Beispiel ein initrd. Danach wird das reale Wurzeldateisystem eingehängt und eventuell in die aktuelle Wurzel aller relevanten Prozesse und Threads verwandelt.

pivot_root() kann die aktuelle Wurzel und das aktuelle Arbeitsverzeichnis von Prozessen und Threads ändern, welche das alte Wurzelverzeichnis nutzen, muss dies aber nicht. Der Prozess, welcher pivot_root() aufruft, muss sicherstellen, dass Prozesse mit Wurzel- oder aktuellem Arbeitsverzeichnis in jedem Fall korrekt arbeiten. Ein einfacher Weg hierzu ist die Änderung von Wurzel- und aktuellem Arbeitsverzeichnis auf die neue_Wurzel, bevor pivot_root() aufgerufen wird.

Der obige Absatz ist absichtlich vage gehalten, da sich die Implementierung von pivot_root() in der Zukunft ändern kann. Zum Zeitpunkt dieser Dokumentation ändert pivot_root() die Wurzel und das aktuelle Arbeitsverzeichnis jedes Prozesses oder Threads auf neue_Wurzel, falls sie auf das alte Wurzelverzeichnis zeigen. Dies ist notwendig, um Kernel-Threads daran zu hindern, das alte Wurzelverzeichnis mit ihrem Wurzel- und aktuellen Verzeichnis beschäftigt zu halten, selbst falls sie niemals auf irgendeine Weise auf das Dateisystem zugreifen. In der Zukunft mag es für Kernel-Threads einen Mechanismus geben, epxlizit jeden Zugriff auf das Dateisystem aufzugeben, so dass dieser ziemlich aufdringlicher Mechanismus aus pivot_root() entfernt werden kann.

Beachten Sie, dass sich das auch auf den aufrufenden Prozess bezieht: pivot_root() kann sich auf dessen aktuelles Arbeitsverzeichnis auswirken oder auch nicht. Es wird daher empfohlen, chdir("/") unmittelbar nach pivot_root() aufzurufen.

Die folgenden Einschränkungen gelten für neue_Wurzel und alte_Wurzel:

  • Sie müssen Verzeichnisse sein.
  • Die neue_Wurzel und die alte_Wurzel dürfen sich nicht im gleichen Dateisystem wie die aktuelle Wurzel befinden.
  • Die alte_Wurzel muss sich unterhalb der neuen_Wurzel befinden, das heißt, Hinzufügen einer nicht-negativen Anzahl von /.. zur Zeichenkette, die auf die alte_Wurzel zeigt, muss das gleiche Verzeichnis wie die neue_Wurzel ergeben.
  • In der alten_Wurzel darf kein anderes Dateisystem eingehängt sein.

In pivot_root(8) finden Sie zusätzliche Anwendungsbeispiele.

Falls die aktuelle Wurzel kein Einhängepunkt ist (zum Beispiel nach chroot(2) oder pivot_root(), siehe auch unten), wird nicht das alte Wurzelverzeichnis, sondern der Einhängepunkt des Dateisystems eingehängt, das in der alten_Wurzel eingehängt ist.

Die neue_Wurzel muss kein Einhängepunkt sein. In diesem Fall zeigt /proc/mounts den Einhängepunkt des Dateisystems, welche die neue_Wurzel enthält, als Wurzel (/) an.

RÜCKGABEWERT

Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.

FEHLER

pivot_root() kann (in errno) jeden der von stat(2) zurückgegebenen Fehler zurückgeben. Zusätzlich kann Folgendes zurückgegeben werden:

Die neue_Wurzel oder die alte_Wurzel sind im aktuellen Wurzeldateisystem oder in der alten_Wurzel ist bereits ein Dateisystem eingehängt.
Die alte_Wurzel ist nicht unterhalb der neuen_Wurzel.
neue_Wurzel oder alte_Wurzel ist kein Verzeichnis.
Der aufrufende Prozess verfügt nicht über die CAP_SYS_ADMIN-Capability.

VERSIONEN

pivot_root() wurde in Linux 2.3.41 eingeführt.

KONFORM ZU

pivot_root() ist Linux-spezifisch und daher nicht portierbar.

ANMERKUNGEN

Glibc stellt keinen Wrapper für diesen Systemaufruf bereit; rufen Sie ihn mittels syscall(2) auf.

FEHLER

pivot_root() sollte nicht die Wurzel und das aktuelle Arbeitsverzeichnis aller anderen Prozesse im System ändern müssen.

Einige der eher obskuren Einsatzmöglichkeiten von pivot_root() könnten schnell zum Wahnsinn führen.

SIEHE AUCH

chdir(2), chroot(2), stat(2), initrd(4), pivot_root(8), switch_root(8)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.16 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können, sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann@gmail.com> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.

15. September 2017 Linux