pivot_root

PIVOT_ROOT(2)              Linux-Programmierhandbuch             PIVOT_ROOT(2)



BEZEICHNUNG
       pivot_root - die Dateisystemwurzel ä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 die Dateisystemwurzel des aktuellen Prozesses in
       das Verzeichnis alte_Wurzel und macht neue_Wurzel zur neuen
       Dateisystemwurzel.

       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 vorige Absatz ist absichtlich etwas ungenau, da sich die
       Implementation von pivot_root() in der Zukunft ändern kann. Zum
       Zeitpunkt der Erstellung dieses Dokuments ändert pivot_root() das
       Wurzel- und Arbeitsverzeichnis jedes Prozesses oder Threads auf die
       neue_Wurzel, falls diese auf das alte Wurzelverzeichnis zeigen. Dies
       ist notwendig, damit die Kernel-Threads nicht das alte
       Wurzelverzeichnis weiterhin mit ihrem alten Wurzel- und
       Arbeitsverzeichnis belegen, selbst wenn sie in keiner Weise auf das
       Dateisystem zugegriffen haben. In der Zukunft könnte ein neuer
       Mechanismus bewirken, dass die Kernel-Threads auf jeglichen Zugriff auf
       das Dateisystem verzichten, so dass dieser recht unsichere alte
       Mechanismus aus pivot_root() entfernt werden kann.

       Beachten Sie, dass sich das auch auf den aufrufenden Prozess auswirkt:
       pivot_root() kann sein aktuelles Arbeitsverzeichnis ändern, muss aber
       nicht. Es wird daher empfohlen, chdir("/") unmittelbar nach
       pivot_root() aufzurufen.

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

       -  Sie müssen Verzeichnisse sein.

       -  Die neue_Wurzel und die alte_Wurzel dürfen sich nicht im gleichen
          Dateisystem befinden wie die aktuelle Wurzel.

       -  Die alte_Wurzel muss sich unterhalb der neuen_Wurzel befinden, das
          heiÃt, Hinzufügen einer von null verschiedenen 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 weiteres 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.

       neue_Wurzel muss ein Einhängepunkt sein. (Falls es nicht anderweitig
       ein Einhängepunkt ist, reicht es aus, neue_Wurzel auf sich selbst
       bind-einzuhängen.)

       Der Ausbreitungstyp von neue_Wurzel und seiner Elterneinhängung
       dürfen nicht MS_SHARED sein; entsprechend falls alte_Wurzel ein
       bestehender Einhängepunkt ist, darf sein Ausbreitungstyp nicht
       MS_SHARED sein.

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:

       EBUSY  Die neue_Wurzel oder die alte_Wurzel sind im aktuellen
              Wurzeldateisystem oder ein Dateisystem ist bereits in der
              alten_Wurzel eingehängt.

       EINVAL neue_Wurzel ist kein Einhängepunkt.

       EINVAL Die alte_Wurzel ist nicht unterhalb der neuen_Wurzel.

       EINVAL Die aktuelle Wurzel ist auf dem Rootfs (anfänglichen
              Ramfs-)Dateisystem.

       EINVAL Entweder der Einhängepunkt unter neue_Wurzel oder die
              Elterneinhängung dieses Einhängepunktes hat den
              Ausbreitungstyp MS_SHARED.

       EINVAL alte_Wurzel ist ein Einhängepunkt und der Ausbreitungstyp ist
              MS_SHARED.

       ENOTDIR
              neue_Wurzel oder alte_Wurzel ist kein Verzeichnis.

       EPERM  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
       Die Glibc stellt keinen Wrapper für diesen Systemaufruf bereit; rufen
       Sie ihn mit syscall(2) auf.

       Das Rootfs (anfängliche Ramfs) kann nicht mittels pivot_root erreicht
       werden. Die in diesem Fall empfohlene Methode zur Ãnderung des
       Wurzeldateisystems ist das Löschen sämtlicher Inhalte im Rootfs, das
       Rootfs mit der neuen Wurzel übereinzuhängen, stdin/stdout/stderr an
       das neue /dev/console anzuhängen und das neue init(1) auszuführen.
       Helferprogramme für diesen Prozess existieren: siehe switch_root(8).

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

       Einige der weniger bekannten Anwendungen von pivot_root() können
       schnell in den Wahnsinn führen.

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

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.02 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 <debian-l10n-
       german@lists.debian.org>.



Linux                           2. August 2019                   PIVOT_ROOT(2)