Provided by: manpages-de_4.13-4_all bug

BEZEICHNUNG

       mount_namespaces - Überblick über Linux-Einhänge-Namensräume

BESCHREIBUNG

       Für einen Überblick über Namensräume, siehe namespaces(7).

       Einhängenamensräume  bieten  eine  Isolierung  der  Liste  der  von  Prozessen in jeder Namensrauminstanz
       gesehenen Einhängepunkten. Daher wird  jeder  Prozess  in  jeder  der  Einhänge-Namensrauminstanzen  eine
       individuelle Einzelverzeichnis-Hierarchie sehen.

       Die von den Dateien /proc/[PID]/mounts, /proc/[PID]/mountinfo und /proc/[PID]/mountstats (alle In proc(5)
       beschrieben)  bereitgestellten  Ansichten entsprechen den Einhängenamensräumen, in denen sich der Prozess
       mit der PID [PID] befindet. (Alle Prozesse, die sich in dem gleichen Einhängenamensraum befinden,  werden
       die gleiche Ansicht auf diese Dateien sehen.)

       Ein  neuer  Einhängenamensraum  wird  entweder  mittels clone(2) oder mittels unshare(2) mit dem Schalter
       CLONE_NEWNS erstellt. Wenn ein neuer Einhängenamensraum erstellt wird, wird seine Einhängepunktliste  wie
       folgt initialisiert:

       *  Falls   der   Namensraum   mittels   clone(2)   erstellt   wurde,   ist   die  Einhängepunktliste  des
          Nachfolgenamensraums eine Kopie der Einhängepunktliste des Vorgängernamensraums.

       *  Falls der  Namensraum  mittels  unshare(2)  erstellt  wurde,  ist  die  Einhängepunktliste  des  neuen
          Namensraums eine Kopie der Einhängepunktliste in dem vorherigen Namensraum des aufrufenden Prozesses.

       Nachfolgende  Änderungen an der Einhängepunktliste (mount(2) und umount(2)) in jedem der Namensräume wird
       (standardmäßig) die Einhängepunktliste, die in den anderen Namensräumen  gesehen  wird,  nicht  betreffen
       (lesen Sie allerdings auch die nachfolgende Diskussion von gemeinsamen Unterbäumen).

   Beschränkungen für Einhängenamensräume
       Beachten Sie die folgenden Punkte in Hinblick auf Einhängenamensräume:

       *  Jeder  Einhängenamensraum  hat  einen  Eigentümer-Benutzernamensraum.  Wie  oben beschrieben wird beim
          Erstellen eines neuen Einhängenamensraumes seine Einhängepunktliste als Kopie  der  Einhängepunktliste
          eines anderen Einhängenamensraums initialisiert. Falls der neue Namensraum und der Namensraum, von dem
          die  Einhängepunktliste  kopiert wurde, verschiedenen Benutzernamensräumen gehören, dann wird der neue
          Einhängenamensraum als weniger privilegiert betrachtet.

       *  Beim Erstellen eines weniger privilegierten  Einhängenamensraums  werden  gemeinsame  Einhängungen  zu
          abhängigen  Einhängungen  reduziert.  (Gemeinsame  und  abhängige  Einhängungen  werden  weiter  unten
          diskutiert.) Dies  stellt  sicher,  dass  Abbildungen,  die  in  weniger  privilegierten  Namensräumen
          erfolgen, nicht in mehr privilegierte Namensräume weitergeleitet werden.

       *  Einhängungen,  die  als  gemeinsame  Einheit  von einem mehr privilegierten Einhängenamensraum kommen,
          werden zusammengeklemmt und können in einem weniger privilegierten Namensraum nicht  getrennt  werden.
          (Die  Aktion unshare(2) CLONE_NEWNS bringt alle Einhängungen von dem ursprünglichen Einhängenamensraum
          als  gemeinsame  Einheit  herüber  und  rekursive  Einhängungen,  die  zwischen   Einhängenamensräumen
          weiterleiten, werden als gemeinsame Einheit weitergeleitet.)

       *  Die  Schalter  MS_RDONLY,  MS_NOSUID,  MS_NOEXEC  von  mount(2) und die »atime«-Schalter-Einstellungen
          (MS_NOATIME, MS_NODIRATIME, MS_RELATIME) werden geklemmt, wenn sie von einem  mehr  privilegierten  in
          einen  weniger  privilegierten  Einhängenamensraum  weitergeleitet  werden  und  dürfen in dem weniger
          privilegierten Namensraum nicht geändert werden.

       *  Eine Datei oder ein Verzeichnis, das ein Einhängepunkt in einem Namensraum ist, der kein Einhängepunkt
          in einem anderen Namensraum ist, kann umbenannt, mit  der  Funktion  »unlink«  gelöscht  oder  in  dem
          Einhängenamensraum,  in  dem  er  kein Einhängepunkt ist, gelöscht (rmdir(2)) werden (abhängig von den
          normalen Berechtigungsprüfungen). Konsequenterweise wird der Einhängepunkt in dem  Einhängenamensraum,
          in dem er ein Einhängepunkt war, entfernt.

          Früher  (vor Linux 3.18) führte der Versuch, eine Datei oder ein Verzeichnis, das ein Einhängepunkt in
          einem anderen Namensraum war, mit »unlink« zu löschen, umzubenennen oder zu entfernen  zu  dem  Fehler
          EBUSY.  Dieses Verhalten hatte technische Probleme bei der Durchsetzung (z.B. für NFS) und ermöglichte
          Diensteverweigerungsangriffe  gegen  mehr  privilegierte   Benutzer   (d.h.   Verhinderung   von   der
          Aktualisierung einzelner Dateien durch Einhängungen mit der Option bind darüber).

GEMEINSAME UNTERBÄUME

       Nachdem  die  Implementierung  von Einhängenamensräumen abgeschlossen war, zeigte die Erfahrung, dass die
       bereitgestellte Isolierung in einigen Fällen  zu  weit  ging.  Um  beispielsweise  eine  frisch  geladene
       optische Platte in allen Einhängenamensräumen zur Verfügung zu stellen, war in jedem der Namensräume eine
       Einhängeaktion  notwendig.  Für  diesen  und  andere Anwendungsfälle wurde die Funktionalität gemeinsamer
       Unterbäume in Linux 2.6.15 eingeführt.  Diese  Funktionalität  erlaubt  die  automatische,  kontrollierte
       Weiterleitung  von  Einhänge-  und  Aushänge-Ereignissen  zwischen  Namensräumen (oder, genauer, zwischen
       Mitgliedern einer Gemeinschaftsgruppe, die Ereignisse aneinander weiterleiten).

       Jeder Einhängepunkt wird (über mount(2)) markiert, dass er einen der folgenden Weiterleitungstypen hat:

       MS_SHARED
              Dieser Einhängepunkt nutzt Ereignisse mit Mitgliedern der Gemeinschaftsgruppe gemeinsam. Einhänge-
              und  Aushängeereignisse  direkt  unterhalb  dieses   Einhängepunktes   werden   zu   den   anderen
              Einhängepunkten,  die  Mitglied  dieser  Gemeinschaftsgruppe  sind,  weitergeleitet. Weiterleitung
              bedeutet hier, dass die gleiche Ein- oder Aushängung unter allen  diesen  Einhängepunkten  in  der
              Gemeinschaftsgruppe  automatisch  erfolgen  wird.  Entsprechend  werden Ein- und Aushängungen, die
              unter anderen Einhängepunkten der Gruppe stattfinden, zu diesem Einhängepunkt weitergeleitet.

       MS_PRIVATE
              Dieser  Einhängepunkt  ist   privat;   er   ist   in   keiner   Gemeinschaftsgruppe.   Ein-   oder
              Aushängeereignisse werden nicht aus diesem Einhängepunkt heraus oder in ihn hinein weitergeleitet.

       MS_SLAVE
              Ein-  und  Aushängeereignisse  werden  in  diesen Einhängepunkt von einer übergeordneten (Master-)
              Gemeinschaftsgruppe weitergeleitet. Ein- und Aushängungen unterhalb dieses Einhängepunktes  werden
              nicht zu anderen Mitgliedern der Gruppe weitergeleitet.

              Beachten  Sie,  dass  ein  Einhängepunkt ein Abhängiger von einer anderen Gemeinschaftsgruppe sein
              kann und gleichzeitig ein Mitglied in einer zweiten Gemeinschaftsgruppe sein kann, an die und  von
              der   er   Ein-   und   Aushängeereignisse   sendet  bzw.  empfängt.  (Genauer  gesagt  kann  eine
              Gemeinschaftsgruppe eine Abhängige einer anderen Gemeinschaftsgruppe sein).

       MS_UNBINDABLE
              Dies ist wie eine private Einhängung und zusätzlich kann diese Einhängung  nicht  mit  der  Option
              bind  erfolgen.  Wird versucht, diese Einhängung mit der Option bind einzuhängen (mount(2) mit dem
              Schalter MS_BIND), dann schlägt dies fehl.

              Wenn eine rekursive Einhängung mit der Option bind (mount(2) mit den Schaltern MS_BIND und MS_REC)
              auf einem Verzeichnisunterbaum erfolgt, werden alle Einhängungen mit der Option bind innerhalb des
              Unterbaums automatisch abgeschnitten (d.h. nicht repliziert), wenn der Unterbaum repliziert  wird,
              um den Ziel-Unterbaum zu erstellen.

       Bitte  lesen  Sie  die  HINWEISE  für eine Diskussion der Weiterleitungstypen, die einer neuen Einhängung
       zugeordnet sind.

       Der Weiterleitungstyp  ist  eine  einhängungsbezogene  Einstellung:  einige  Einhängepunkte  könnten  als
       gemeinsam  gekennzeichnet sein (wobei jeder gemeinsame Einhängepunkt ein Mitglied einer unterschiedlichen
       Gemeinschaftsgruppe ist), während andere privat (oder abhängig oder nicht-Bind-fähig) sind.

       Beachten Sie, dass der Weiterleitungstyp einer Einhängung bestimmt, ob Ein- und Aushängungen direkt unter
       dem Einhängepunkt weitergeleitet werden. Daher betrifft der Einhängungstyp nicht  die  Weiterleitung  von
       Ereignissen  für  weiter  unten  liegende  Einhängungen.  Was  passiert,  wenn  der  Einhängepunkt selbst
       ausgehängt wird, wird durch den Weiterleitungstyp bestimmt,  der  für  den  übergeordneten  Einhängepunkt
       wirksam ist.

       Mitglieder werden zu einer Gemeinschaftsgruppe hinzugefügt, wenn ein Einhängepunkt als gemeinsam markiert
       ist und entweder:

       *  der Einhängepunkt während der Erstellung eines neuen Einhängenamensraumes repliziert wird; oder

       *  eine neue Einhängung mit der Option bind von diesem Einhängepunkt erstellt wird.

       In  beiden  Fällen  tritt  der  neue  Einhängepunkt  der  Gemeinschaftsgruppe bei, bei der der bestehende
       Einhängepunkt bereits Mitglied ist.

       Eine neue Gemeinschaftsgruppe wird auch  erstellt,  wenn  ein  nachfolgender  Einhängepunkt  unter  einem
       bestehenden  Einhängepunkt,  der  als  gemeinsam  markiert  ist,  erstellt  wird. In diesem Fall wird der
       nachfolgende Einhängepunkt als gemeinsam markiert und die  entstehende  Gemeinschaftsgruppe  besteht  aus
       allen Einhängepunkten, die unterhalb der Mitglieder der übergeordneten Einhängung repliziert werden.

       Eine  Einhängung  hört  auf,  Mitglied  einer  Gemeinschaftsgruppe  zu sein, wenn die Einhängung entweder
       explizit ausgehängt wird oder wenn die Einhängung implizit ausgehängt  wird,  da  der  Einhängenamensraum
       entfernt wird (da er keinen Mitgliedsprozess mehr hat).

       Der  Weiterleitungstyp  des  Einhängepunktes  in  einem  Einhängenamensraum  kann mittels der »optionalen
       Felder« in /proc/[PID]/mountinfo offengelegt werden. (Siehe proc(5) für Details  zu  dieser  Datei.)  Die
       folgenden Markierungen können in den optionalen Feldern für einen Datensatz in dieser Datei auftauchen:

       shared:X
              Dieser Einhängepunkt wird in der Gemeinschaftsgruppe X gemeinsam benutzt. Jede Gemeinschaftsgruppe
              hat  eine  eindeutige Kennung, die durch den Kernel automatisch erstellt wird. Alle Einhängepunkte
              in der gleichen Gemeinschaftsgruppe werden die gleiche Kennung  zeigen.  (Diese  Kennungen  werden
              beginnend mit dem Wert 1 zugewiesen und können wiederbenutzt werden, wenn eine Gemeinschaftsgruppe
              keine Mitglieder mehr hat.)

       master:X
              Diese Einhängung ist eine Abhängige der gemeinsamen Gemeinschaftsgruppe X.

       propagate_from:X (seit Linux 2.6.26)
              Diese   Einhängung   ist   eine   Abhängige  und  empfängt  Weiterleitungen  von  der  gemeinsamen
              Gemeinschaftsgruppe X.  Diese  Markierung  wird  immer  zusammen  mit  einer  Markierung  master:X
              auftauchen.   Hier   ist   X   die   naheliegendste   dominante   Gemeinschaftsgruppe   unter  dem
              Wurzelverzeichnis des Prozesses. Falls X der direkte Master der Einhängung ist oder falls es keine
              dominante Gemeinschaftsgruppe unterhalb der gleichen Wurzel gibt, dann ist nur das  Feld  master:X
              und nicht das Feld propagate_from:X vorhanden. Weitere Details folgen weiter unten.

       unbindable
              Dies ist eine nicht-bind-fähige Einhängung.

       Falls keine der obigen Markierungen vorhanden ist, dann ist dies eine private Einhängung.

   Beispiel für MS_SHARED und MS_PRIVATE
       Nehmen wir an, das wir im Terminal des anfänglichen Einhängenamensraums einen Einhängepunkt als gemeinsam
       und einen anderen als privat markieren, und uns dann die Einhängungen in /proc/self/mountinfo anschauen:

           sh1# mount --make-shared /mntS
           sh1# mount --make-private /mntP
           sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           77 61 8:17 / /mntS rw,relatime shared:1
           83 61 8:15 / /mntP rw,relatime

       In  der  Ausgabe  in  /proc/self/mountinfo können wir sehen, dass /mntS eine gemeinsame Einhängung in der
       Gemeinschaftsgruppe 1 ist und dass /mntP keine optionale Markierungen hat und damit anzeigt, dass es eine
       private EInhängung ist. Die ersten zwei Felder in jedem Datensatz in dieser  Datei  sind  die  eindeutige
       Kennung  für  diese  Einhängung  und  die Einhängungskennung der Elterneinhängung. Wir können diese Datei
       weiter untersuchen, um zu sehen, dass der Elterneinhängepunkt von /mntS und /mntP das Wurzelverzeichnis /
       ist, das privat eingehängt wurde:

           sh1# cat /proc/self/mountinfo | awk '$1 == 61' | sed 's/ - .*//'
           61 0 8:2 / / rw,relatime

       In einem zweiten Terminal erstellen wir einen neuen Einhängenamensraum, in  dem  wir  eine  zweite  Shell
       ausführen und die Einhängungen untersuchen:

           $ PS1='sh2# ' sudo unshare -m --propagation unchanged sh
           sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           222 145 8:17 / /mntS rw,relatime shared:1
           225 145 8:15 / /mntP rw,relatime

       Der  neue Einhängenamensraum erhielt eine Kopie der Einhängepunkte des anfänglichen Einhängenamensraumes.
       Diese  neuen  Einhängepunkte  behalten  die  gleichen  Weiterleitungstypen  bei,  haben  aber  eindeutige
       Einhängekennungen.  (Die Option --propagation unchanged verhindert, dass unshare(1) alle Einhängungen als
       privat markiert, wenn ein neuer Einhängenamensraum erstellt wird, wie er es  sonst  standardmäßig  machen
       würde.)

       In  dem  zweiten  Terminal  erstellen  wir  jetzt Untereinhängungen unter sowohl /mntS als auch /mntP und
       untersuchen das Ergebnis:

           sh2# mkdir /mntS/a
           sh2# mount /dev/sdb6 /mntS/a
           sh2# mkdir /mntP/b
           sh2# mount /dev/sdb7 /mntP/b
           sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           222 145 8:17 / /mntS rw,relatime shared:1
           225 145 8:15 / /mntP rw,relatime
           178 222 8:22 / /mntS/a rw,relatime shared:2
           230 225 8:23 / /mntP/b rw,relatime

       In obiger Ausgabe kann erkannt werden, dass /mntS/a als gemeinsame Einhängung (die Einstellung wurde  von
       der Elterneinhängung übernommen) und /mntP/b als private Einhängung erstellt wurde.

       Wird  zum  ersten  Terminal  zurückgekehrt  und  das Ergebnis untersucht, können wir sehen, dass die neue
       Einhängung, die unterhalb des gemeinsamenen Einhängepunkts /mntS erstellt wurde, an die  Einhängungen  in
       seiner   Gemeinschaftsgruppe   weitergeleitet   wurde  (im  anfänglichen  Einhängenamensraum),  aber  die
       Einhängung, die unter dem privaten Einhängepunkt /mntP erstellt wurde, nicht weitergeleitet wurde:

           sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           77 61 8:17 / /mntS rw,relatime shared:1
           83 61 8:15 / /mntP rw,relatime
           179 77 8:22 / /mntS/a rw,relatime shared:2

   MS_SLAVE-Beispiel
       Wird ein Einhängepunkt ein Abhängiger, ist es möglich, weitergeleitete Ein-  und  Aushängeereignisse  von
       einer gemeinsamen Master-Gemeinschaftsgruppe zu erhalten und zugleich sie daran zu hindern, Ereignisse zu
       diesem  Master weiterzuleiten. Dies ist nützlich, wenn Sie (beispielsweise) ein Einhängeereignis erhalten
       möchten, wenn eine optische Platte in der gemeinsamen Gemeinschaftsgruppe des Masters eingehängt wird (in
       einem anderen Einhängenamensraum), aber Sie verhindern möchten, dass Ein-  und  Aushängeereignisse  unter
       der Einhängung der Abhängigen zu Seiteneffekten in anderen Namensräumen führen.

       Wir  zeigen  die  Auswirkung  der  Abhängigen,  indem  wir  zuerst  zwei  Einhängepunkte als gemeinsam im
       anfänglichen Namensraum markieren:

           sh1# mount --make-shared /mntX
           sh1# mount --make-shared /mntY
           sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           132 83 8:23 / /mntX rw,relatime shared:1
           133 83 8:22 / /mntY rw,relatime shared:2

       Auf  einem  zweiten  Terminal  erstellen  wir  einen  neuen  Einhängenamensraum   und   untersuchen   die
       Einhängepunkte:

           sh2# unshare -m --propagation unchanged sh
           sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           168 167 8:23 / /mntX rw,relatime shared:1
           169 167 8:22 / /mntY rw,relatime shared:2

       In dem neuen Einhängenamensraum können wir einen Einhängepunkt als Abhängigen markieren:

           sh2# mount --make-slave /mntY
           sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           168 167 8:23 / /mntX rw,relatime shared:1
           169 167 8:22 / /mntY rw,relatime master:2

       Aus  der  obigen  Ausgabe  kann  gesehen  werden,  dass  /mntY  jetzt  eine abhängige Einhängung ist, die
       Weiterleitungsereignisse von der gemeinsamen Gemeinschaftsgruppe mit der Kennung 2 erhält.

       Im neuen Namensraum wird jetzt fortgefahren und Untereinhängungen  unter  sowohl  /mntX  als  auch  /mntY
       erstellt:

           sh2# mkdir /mntX/a
           sh2# mount /dev/sda3 /mntX/a
           sh2# mkdir /mntY/b
           sh2# mount /dev/sda5 /mntY/b

       Wenn  wir  den  Zustand der Einhängepunkte in den neuen Einhängenamensräumen untersuchen, sehen wir, dass
       /mntX/a als  eine  neue  gemeinsame  Einhängung  erstellt  wurde  (die  die  Einstellung  »shared«  ihrer
       Elterneinhängung geerbt hat) und dass /mntY/b als eine private Einhängung erstellt wurde:

           sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           168 167 8:23 / /mntX rw,relatime shared:1
           169 167 8:22 / /mntY rw,relatime master:2
           173 168 8:3 / /mntX/a rw,relatime shared:3
           175 169 8:5 / /mntY/b rw,relatime

       Zurück  im ersten Terminal (im anfänglichen Einhängenamensraum) sehen wir, dass die Einhängung /mntX/a zu
       dem Mitglied  der  Gemeinschaftsgruppe  weitergeleitet  wurde  (der  gemeinsame  /mntX),  aber  dass  die
       Einhängung /mntY/b nicht weitergeleitet wurde:

           sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           132 83 8:23 / /mntX rw,relatime shared:1
           133 83 8:22 / /mntY rw,relatime shared:2
           174 132 8:3 / /mntX/a rw,relatime shared:3

       Jetzt erstellen wir eine neuen Einhängepunkt unter /mntY in der ersten Shell:

           sh1# mkdir /mntY/c
           sh1# mount /dev/sda1 /mntY/c
           sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           132 83 8:23 / /mntX rw,relatime shared:1
           133 83 8:22 / /mntY rw,relatime shared:2
           174 132 8:3 / /mntX/a rw,relatime shared:3
           178 133 8:1 / /mntY/c rw,relatime shared:4

       Wenn wir die Einhängepunkte in dem zweiten Einhängenamensraum untersuchen, sehen wir, dass in diesem Fall
       die  Einhängung  zu dem abhängigen Einhängepunkt weitergeleitet wurde und dass die neue Einhängung selbst
       eine Abhängige ist (von der Gemeinschaftsgruppe 4):

           sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           168 167 8:23 / /mntX rw,relatime shared:1
           169 167 8:22 / /mntY rw,relatime master:2
           173 168 8:3 / /mntX/a rw,relatime shared:3
           175 169 8:5 / /mntY/b rw,relatime
           179 169 8:1 / /mntY/c rw,relatime master:4

   MS_UNBINDABLE-Beispiel
       Einer  der  Hauptzwecke  der  nicht-bindfähigen  Einhängungen  ist  die  Vermeidung  des   Problems   der
       »Einhängepunktexplosionen«,  bei  der  wiederholt  durchgeführte  Einhängungen  mit der Option bind eines
       Unterbaums auf einer höheren Ebene in einem Einhängepunkt auf niedrigeren Ebene  ausgeführt  werden.  Das
       Problem wird in der nachfolgenden Shell-Sitzung dargestellt.

       Nehmen wir an, wir haben ein System mit folgenden Einhängepunkten:

           # mount | awk '{print $1, $2, $3}'
           /dev/sda1 on /
           /dev/sdb6 on /mntX
           /dev/sdb7 on /mntY

       Nehmen  wir  weiterhin  an,  dass  wir  das  Wurzelverzeichnis  rekursiv  unter  den  Home-Verzeichnissen
       verschiedener Benutzer mit der Option bind einhängen möchten. Wir machen dies für den ersten Benutzer und
       untersuchen die Einhängepunkte:

           # mount --rbind / /home/cecilia/
           # mount | awk '{print $1, $2, $3}'
           /dev/sda1 on /
           /dev/sdb6 on /mntX
           /dev/sdb7 on /mntY
           /dev/sda1 on /home/cecilia
           /dev/sdb6 on /home/cecilia/mntX
           /dev/sdb7 on /home/cecilia/mntY

       Wenn wir diese Aktion für den zweiten Benutzer wiederholen, beginnen wir, das Explosionsproblem zu sehen:

           # mount --rbind / /home/henry
           # mount | awk '{print $1, $2, $3}'
           /dev/sda1 on /
           /dev/sdb6 on /mntX
           /dev/sdb7 on /mntY
           /dev/sda1 on /home/cecilia
           /dev/sdb6 on /home/cecilia/mntX
           /dev/sdb7 on /home/cecilia/mntY
           /dev/sda1 on /home/henry
           /dev/sdb6 on /home/henry/mntX
           /dev/sdb7 on /home/henry/mntY
           /dev/sda1 on /home/henry/home/cecilia
           /dev/sdb6 on /home/henry/home/cecilia/mntX
           /dev/sdb7 on /home/henry/home/cecilia/mntY

       Unter /home/henry haben wir nicht nur die Einhängungen /mntX und /mntY rekursiv hinzugefügt, sondern auch
       die rekursiven Einhängungen dieser Verzeichnisse unter /home/cecilia, die im vorherigen Schritt  erstellt
       wurden. Bei der Wiederholung dieses Schrittes für einen dritten Benutzer wird es offensichtlich, dass die
       Explosion von exponentieller Natur ist:

           # mount --rbind / /home/otto
           # mount | awk '{print $1, $2, $3}'
           /dev/sda1 on /
           /dev/sdb6 on /mntX
           /dev/sdb7 on /mntY
           /dev/sda1 on /home/cecilia
           /dev/sdb6 on /home/cecilia/mntX
           /dev/sdb7 on /home/cecilia/mntY
           /dev/sda1 on /home/henry
           /dev/sdb6 on /home/henry/mntX
           /dev/sdb7 on /home/henry/mntY
           /dev/sda1 on /home/henry/home/cecilia
           /dev/sdb6 on /home/henry/home/cecilia/mntX
           /dev/sdb7 on /home/henry/home/cecilia/mntY
           /dev/sda1 on /home/otto
           /dev/sdb6 on /home/otto/mntX
           /dev/sdb7 on /home/otto/mntY
           /dev/sda1 on /home/otto/home/cecilia
           /dev/sdb6 on /home/otto/home/cecilia/mntX
           /dev/sdb7 on /home/otto/home/cecilia/mntY
           /dev/sda1 on /home/otto/home/henry
           /dev/sdb6 on /home/otto/home/henry/mntX
           /dev/sdb7 on /home/otto/home/henry/mntY
           /dev/sda1 on /home/otto/home/henry/home/cecilia
           /dev/sdb6 on /home/otto/home/henry/home/cecilia/mntX
           /dev/sdb7 on /home/otto/home/henry/home/cecilia/mntY

       Das   Einhänge-Explosionsproblem  im  obigen  Szenario  kann  vermieden  werden,  indem  jede  der  neuen
       Einhängungen  nicht-bindfähig  gemacht  wird.  Die  Auswirkung  ist,  dass  rekursive  Einhängungen   des
       Wurzelverzeichnisses  sich  nicht  bei nicht-bindfähigen Einhängungen replizieren werden. Wir machen eine
       solche Einhängung für den ersten Benutzer:

           # mount --rbind --make-unbindable / /home/cecilia

       Bevor wir fortfahren, zeigen wir, dass die nicht-bindfähigen Einhängungen  in  der  Tat  nicht  bindfähig
       sind:

           # mkdir /mntZ
           # mount --bind /home/cecilia /mntZ
           mount: wrong fs type, bad option, bad superblock on /home/cecilia,
                  missing codepage or helper program, or other error

                  In some cases useful info is found in syslog - try
                  dmesg | tail or so.

       Jetzt  erstellen  wir  nicht  bindfähige  rekursive Einhängungen mit der Option bind für die anderen zwei
       Benutzer:

           # mount --rbind --make-unbindable / /home/henry
           # mount --rbind --make-unbindable / /home/otto

       Bei der Untersuchung der Liste der Einhängepunkte sehen wir, dass es keine Explosion  der  Einhängepunkte
       gab,  da  die  nicht  bindfähigen  Einhängungen  nicht  unter  den Verzeichnissen der jeweiligen Benutzer
       repliziert wurden:

           # mount | awk '{print $1, $2, $3}'
           /dev/sda1 on /
           /dev/sdb6 on /mntX
           /dev/sdb7 on /mntY
           /dev/sda1 on /home/cecilia
           /dev/sdb6 on /home/cecilia/mntX
           /dev/sdb7 on /home/cecilia/mntY
           /dev/sda1 on /home/henry
           /dev/sdb6 on /home/henry/mntX
           /dev/sdb7 on /home/henry/mntY
           /dev/sda1 on /home/otto
           /dev/sdb6 on /home/otto/mntX
           /dev/sdb7 on /home/otto/mntY

   Weiterleitungstyp-Übergänge
       Die nachfolgende Tabelle zeigt die Auswirkung, die die Anwendung  eines  neuen  Weiterleitungstyps  (d.h.
       mount  --make-xxxx)  auf bestehende Weiterleitungstypen eines Einhängepunktes hat. Die Zeilen entsprechen
       den bestehenden Weiterleitungstypen und die  Spalten  sind  die  neuen  Weiterleitungseinstellungen.  Aus
       Platzgründen ist »private« (privat) mit »priv« und »unbindable« (nicht bindfähig) mit »unbind« abgekürzt.
                     make-shared   make-slave      make-priv  make-unbind
       ─────────────┬───────────────────────────────────────────────────────
       shared       │shared        slave/priv [1]  priv       unbind
       slave        │slave+shared  slave [2]       priv       unbind
       slave+shared │slave+shared  slave           priv       unbind
       private      │shared        priv [2]        priv       unbind
       unbindable   │shared        unbind [2]      priv       unbind

       Beachten Sie die folgenden Details zu der Tabelle:

       [1] Falls eine gemeinsame Einhängung die einzige in ihrer Gemeinschaftsgruppe ist, wird sie als abhängige
           auch automatisch privat.

       [2] Abhängig machen einer nicht gemeinsamen Einhängung hat keine Auswirkung auf die Einhängung.

   Semantik von Bind (MS_BIND)
       Nehmen wir an, dass der folgende Befehl ausgeführt wird:

           mount --bind A/a B/b

       Hier  ist  A  der  Quelleinhängepunkt,  B der Zieleinhängepunkt, a ist ein Unterverzeichnispfad unter dem
       Einhängepunkt A und b ist ein Unterverzeichnispfad unter dem Einhängungspunkt  B.  Der  Weiterleitungstyp
       der  resultierenden  Einhängung  B/b  hängt von den Weiterleitungstypen der Einhängepunkte A und B ab und
       wird in der folgenden Tabelle zusammengefasst.

                                        Quelle(A)
                                shared  private    slave         unbind
       ────────────────────────┬───────────────────────────────────────────
       Ziel(B)  shared         │shared  shared     slave+shared  ungültig
                nicht gemeinsam│shared  private    slave         ungültig

       Beachten Sie, dass ein rekursives Bind eines Unterbaums der gleichen Semantik  wie  der  Bind-Aktion  auf
       jede   Einhängung   im   Unterbaum   folgt.   (Nicht-Bind-fähige   Einhängungen   werden  automatisch  am
       Zieleinhängepunkt abgeschnitten.)

       Für weitere Details siehe Documentation/filesystems/sharedsubtree.txt in dem Kernelquellbaum.

   Semantik von Move (MS_MOVE)
       Nehmen wir an, dass der folgende Befehl ausgeführt wird:

           mount --move A B/b

       Hier ist A der Quelleinhängepunkt, B der Zieleinhängepunkt und b ist der Unterverzeichnispfad  unter  dem
       Einhängepunkt  B. Der Weiterleitungstyp der entstehenden Einhängung B/b hängt von den Weiterleitungstypen
       der Einhängepunkte A und B ab und wird in der nachfolgenden Tabelle zusammengefasst.

                                        Quelle(A)
                                shared  private    slave         unbind
       ────────────────────────┬─────────────────────────────────────────────
       Ziel(B)  shared         │shared  shared     slave+shared  ungültig
                nicht gemeinsam│shared  private    slave         unbindable

       Hinweis: Das Verschieben einer Einhängung, die sich unter  einer  gemeinsamen  Einhängung  befindet,  ist
       ungültig.

       Für weitere Details siehe Documentation/filesystems/sharedsubtree.txt in dem Kernelquellbaum.

   Einhänge-Semantik
       Angenommen, wir verwenden folgenden Befehl, um einen Einhängepunkt zu erstellen:

           mount Gerät B/b

       Hier  ist  B  der  Zieleinhängepunkt  und  b  der  Unterverzeichnispfad  unter  dem  Einhängepunkt B. Der
       Weiterleitungstyp der entstehenden Einhängung B/b folgt den gleichen Regeln wie für eine  Einhängung  mit
       der Option bind, bei der der Weiterleitungstyp der Quelleinhängung immer als privat betrachtet wird.

   Aushänge-Semantik
       Angenommen, wir verwenden folgenden Befehl, um einen Einhängepunkt aufzulösen:

           umount A

       Hier  ist  A  ein  Einhängepunkt  auf B/b, wobei B der Elterneinhängepunkt und b ein Unterverzeichnispfad
       unterhalb des Einhängepunkts B ist. Falls  B  gemeinsam  ist,  dann  werden  alle  kürzlich  eingehängten
       Einhängungen  ausgehängt,  die sich bei b befinden, die Weiterleitungen von der Einhängung B erhalten und
       keine Untereinhängungen haben.

   Die /proc/[PID]/mountinfo-Markierung propagate_from
       Die Markierung propagate_from:X wird in den  optionalen  Feldern  des  Datensatzes  /proc/[PID]/mountinfo
       gezeigt,  falls  es  einen  Prozess gibt, der den Master der direkt Abhängigen nicht sehen kann (d.h. der
       Pfadname vom Master ist von dem Dateisystemwurzelverzeichnis aus  nicht  erreichbar)  und  so  nicht  die
       Weiterleitungskette zwischen Einhängungen, die er sehen kann, bestimmen kann.

       In  dem  folgenden  Beispiel  erstellen  wir  zuerst  eine  Kette  aus  zwei Gliedern zwischen Master und
       Abhängiger, zwischen den Einhängungen /mnt, /tmp/etc und /mnt/tmp/etc. Dann  wird  der  Befehl  chroot(1)
       verwandt,  um  den  Einhängepunkt  /tmp/etc vom Wurzelverzeichnis unerreichbar zu bekommen und damit eine
       Situation zu erstellen, bei der der Master von  /mnt/tmp/etc  nicht  vom  (neuen)  Wurzelverzeichnis  des
       Prozesses aus erreichbar ist.

       Zuerst  machen  wir  eine  Einhängung mit der Option bind des Wurzelverzeichnisses auf /mnt und dann eine
       Einhängung mit der Option bind von /proc bei  /mnt/proc,  so  dass  nach  einem  späteren  chroot(1)  das
       Dateisystem proc(5) an dem korrekten Ort in der Umgebung innerhalb des Chroots sichtbar bleibt.

           # mkdir -p /mnt/proc
           # mount --bind / /mnt
           # mount --bind /proc /mnt/proc

       Als  nächstes  stellen  wir  sicher,  dass  die  Einhängung  /mnt eine gemeinsame Einhängung in der neuen
       Gemeinschaftsgruppe (ohne weitere Mitglieder) ist:

           # mount --make-private /mnt  # Von jeder vorherigen Gemeinschaftsgruppe isolieren
           # mount --make-shared /mnt
           # cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
           239 61 8:2 / /mnt … shared:102
           248 239 0:4 / /mnt/proc … shared:5

       Als nächstes hängen wir /mnt/etc auf /tmp/etc mit der Option bind ein:

           # mkdir -p /tmp/etc
           # mount --bind /mnt/etc /tmp/etc
           # cat /proc/self/mountinfo | egrep '/mnt|/tmp/' | sed 's/ - .*//'
           239 61 8:2 / /mnt … shared:102
           248 239 0:4 / /mnt/proc … shared:5
           267 40 8:2 /etc /tmp/etc … shared:102

       Anfänglich sind diese zwei Einhängepunkte in der  gleichen  Gemeinschaftsgruppe,  aber  dann  machen  wir
       /tmp/etc  eine Abhängige von /mnt/etc, und dann machen wir /tmp/etc auch gemeinsam, so dass es Ereignisse
       an die nächste Abhängige in der Kette weiterleiten kann:

           # mount --make-slave /tmp/etc
           # mount --make-shared /tmp/etc
           # cat /proc/self/mountinfo | egrep '/mnt|/tmp/' | sed 's/ - .*//'
           239 61 8:2 / /mnt … shared:102
           248 239 0:4 / /mnt/proc … shared:5
           267 40 8:2 /etc /tmp/etc … shared:105 master:102

       Dann hängen wir /tmp/etc auf /mnt/tmp/etc mit der Option bind ein. Wieder sind  die  zwei  Einhängepunkte
       anfänglich in der gleichen Gemeinschaftsgruppe, aber wir machen /mnt/tmp/etc eine Abhängige von /tmp/etc:

           # mkdir -p /mnt/tmp/etc
           # mount --bind /tmp/etc /mnt/tmp/etc
           # mount --make-slave /mnt/tmp/etc
           # cat /proc/self/mountinfo | egrep '/mnt|/tmp/' | sed 's/ - .*//'
           239 61 8:2 / /mnt … shared:102
           248 239 0:4 / /mnt/proc … shared:5
           267 40 8:2 /etc /tmp/etc … shared:105 master:102
           273 239 8:2 /etc /mnt/tmp/etc … master:105

       In  vorhergehender  Ausgabe  können  wir  sehen,  dass  /mnt  der Master der Abhängigen /tmp/etc ist, die
       wiederum der Master der Abhängigen /mnt/tmp/etc ist.

       Dann wechseln wir mit chroot(1) zu dem Verzeichnis /mnt, wodurch die Einhängung mit der Kennung  267  vom
       (neuen) Wurzelverzeichnis aus nicht mehr erreichbar ist:

           # chroot /mnt

       Wenn wir den Zustand der Einhängungen innerhalb der Chroot-Umgebung untersuchen, sehen wir folgendes:

           # cat /proc/self/mountinfo | sed 's/ - .*//'
           239 61 8:2 / / … shared:102
           248 239 0:4 / /proc … shared:5
           273 239 8:2 /etc /tmp/etc … master:105 propagate_from:102

       Oben  sehen  wir,  dass  die  Einhängung  mit  der  Kennung  273  eine  Abhängige  ist,  deren Master die
       Gemeinschaftsgruppe 105 ist. Der Einhängepunkt für diesen Master kann nicht erreicht  werden,  und  daher
       wird  eine  Markierung  propagate_from  angezeigt,  die darauf aufmerksam macht, dass die nahest-liegende
       dominante Gemeinschaftsgruppe (d.h. der nächste erreichbare Einhängepunkt in der Abhängigkeitskette)  die
       Gemeinschaftsgruppe  mit  der Kennung 102 ist (die dem Einhängepunkt /mnt entspricht, bevor der chroot(1)
       durchgeführt wurde.)

VERSIONEN

       Einhängenamensräume erschienen erstmalig in Linux 2.4.19.

KONFORM ZU

       Namensräume sind eine Linux-spezifische Funktionalität.

ANMERKUNGEN

       Der  einem  neuen  Einhängepunkt  zugewiesene   Weiterleitungstyp   hängt   vom   Weiterleitungstyp   der
       Elterneinhängung  ab.  Falls  der  Einhängepunkt eine Elterneinhängung hat (d.h. der Einhängungspunkt ist
       nicht  die  Wurzel)  und  der  Weiterleitungstyp  der  Elterneinhängung  MS_SHARED  ist,  dann  ist   der
       Weiterleitungstyp  der  neuen  Einhängung  auch  MS_SHARED.  Andernfalls ist der Einhängungstyp der neuen
       Einhängung MS_PRIVATE.

       Unbenommen der Tatsache, dass der Standard-Weiterleitungstyp für neue  Einhängepunkte  in  vielen  Fällen
       MS_PRIVATE  ist,  ist  MS_SHARED  normalerweise  nützlicher.  Aus  diesem  Grund  hängt  systemd(1)  beim
       Systemstart  alle  Einhängepunkte  neu  mit  MS_SHARED  ein.  Daher  ist  auf   modernen   Systemen   der
       Standard-Weiterleitungstyp in der Praxis MS_SHARED.

       Da  bei  der Verwendung von unshare(1) typischerweise das Ziel darin besteht, vollständige Isolierung der
       Einhängepunkte in dem neuen Namensraum zu erreichen, kehrt unshare(1) (seit util-linux Version 2.27)  den
       durch  systemd(1)  durchgeführten  Schritt  um,  indem  es in dem neuen Namensraum alle Einhängepunkte zu
       privaten macht. Das bedeutet, unshare(1) führt das Äquivalent des folgenden Befehls im  neuen  Namensraum
       aus:

           mount --make-rprivate /

       Um dies zu verhindern, können Sie die Option --propagation unchanged für unshare(1) verwenden.

       Eine  Anwendung,  die  einen neuen Einhängenamensraum direkt mit clone(2) oder unshare(2) erzeugt, könnte
       den Wunsch haben, die Weiterleitung von Einhängeereignissen in andere Einhängenamensräume  zu  verhindern
       (wie dies durch unshare(1) erfolgt). Dies kann durch Änderung des Einhängetyps von Einhängepunkten in dem
       neuen Namensraum auf entweder MS_SLAVE oder MS_PRIVATE erfolgen, indem ein Aufruf folgender Art erfolgt:

           mount(NULL, "/", MS_SLAVE | MS_REC, NULL);

       Für  eine  Diskussion  von  Weiterleitungstypen  beim  Verschieben  von  Einhängungen  (MS_MOVE)  und der
       Erstellung      von      Einhängungen      mit      der      Option      bind       (MS_BIND)       siehe
       Documentation/filesystems/sharedsubtree.txt.

BEISPIELE

       Siehe pivot_root(2).

SIEHE AUCH

       unshare(1),  clone(2),  mount(2), pivot_root(2), setns(2), umount(2), unshare(2), proc(5), namespaces(7),
       user_namespaces(7), findmnt(8), mount(8), pivot_root(8), umount(8)

       Documentation/filesystems/sharedsubtree.txt im Kernelquellbaum.

KOLOPHON

       Diese Seite ist Teil der Veröffentlichung  5.10  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 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.

Linux                                           1. November 2020                             MOUNT_NAMESPACES(7)