Provided by: manpages-fr_4.21.0-2_all bug

NOM

       mount_namespaces – Aperçu des espaces de noms montage de Linux

DESCRIPTION

       Pour une présentation générale des espaces de noms, consultez namespaces(7).

       Les  espaces  de  noms  montage  permettent  d'isoler  la  liste  des montages vus par les
       processus dans chaque instance d’espace de noms. Ainsi, les  processus  dans  chacune  des
       instances  d’espace  de  noms  montage  verront les hiérarchies distinctes d’un répertoire
       unique.

       Les  vues  fournies   par   les   fichiers   /proc/pid/mounts,   /proc/pid/mountinfo,   et
       /proc/pid/mountstats  (tous décrits dans proc(5)) correspondent à l’espace de noms montage
       dans lequel le processus avec le PID pid réside (tous les processus dans le même espace de
       noms montage voient la même chose dans ces fichiers).

       Un  nouvel  espace  de noms montage est créé en utilisant soit clone(2) ou unshare(2) avec
       l’attribut CLONE_NEWNS. Quand un nouvel espace de noms  montage  est  créé,  sa  liste  de
       montages est initialisée comme suit :

       -  si l’espace de noms est créé en utilisant clone(2), la liste de montages de l’espace de
          noms de l’enfant est une copie de la liste de montages dans l’espace de noms montage du
          processus parent ;

       -  si  l’espace  de  noms  est  créé en utilisant unshare(2), la liste de montages est une
          copie de la liste de montages dans l’espace de noms montage précédent de l’appelant.

       Des modifications ultérieures de la liste de montages (mount(2) et umount(2)) dans  chaque
       espace  de  noms  montage  n’affecteront  pas  (par  défaut) la liste de montages vue dans
       l’autre espace de noms (mais voir les explications ci-après sur les sous-arbres partagés).

SOUS-ARBRES PARTAGÉS

       Une fois l’implémentation des espaces de noms montage terminée, l’expérience a montré que,
       dans  certains  cas,  l’isolation qu’ils fournissaient était trop importante. Par exemple,
       pour rendre un nouveau disque optique nouvellement chargé disponible dans tous les espaces
       de  noms  montage, une opération de montage était requise pour chaque espace de noms. Pour
       un tel cas d’utilisation, et quelques autres, la fonctionnalité sous-arbre partagé  a  été
       introduite  dans  Linux 2.6.15. Cette fonctionnalité permet une propagation automatique et
       contrôlée  des  évènements  mount(2)  et  umount(2)  entre  espaces  de  noms  (ou,   plus
       précisément,  entre  les  montages qui sont membres d’un groupe de pairs qui propagent les
       évènements des uns aux autres).

       Chaque montage est marqué (à l’aide de mount(2)) comme ayant un des types  de  propagation
       suivants :

       MS_SHARED
              Ce  montage  partage  les  évènements  avec  les  membres d’un groupe de pairs. Les
              évènements mount(2) et umount(2) immédiatement sous ce montage se propageront  vers
              les  autres  montages qui sont membres du groupe de pairs. Propagation signifie ici
              que le même mount(2) ou umount(2) se produira automatiquement sous tous les  autres
              montages dans le groupe de pairs. Inversement, les évènements mount(2) et umount(2)
              qui se produiront sous des montages de pair se propageront vers ce montage.

       MS_PRIVATE
              Ce montage est privé, il ne possède pas de groupe de pairs. Les évènements mount(2)
              et umount(2) ne se propageront pas vers ou hors de ce montage.

       MS_SLAVE
              Les  évènements  mount(2) et umount(2) se propageront dans ce montage à partir d’un
              groupe de pairs partagé (maître). Les évènements  mount(2)  et  umount(2)  sous  ce
              montage ne se propagent vers aucun pair.

              Il  est  à  remarquer  qu’un montage peut être l’esclave d’un autre groupe de pairs
              tout en partageant en même temps des  évènements  mount(2)  et  umount(2)  avec  un
              groupe  de pairs dont il est membre (plus précisément, un groupe de pairs peut être
              l’esclave d’un autre groupe de pairs).

       MS_UNBINDABLE
              Identique à un montage privé ; de plus, ce montage ne peut être monté lié  (montage
              bind).  Les  essais  de  monter  lié  ce montage (mount(2) avec l’attribut MS_BIND)
              échoueront.

              Quand un montage bind récursif (mount(2) avec les attributs MS_BIND et MS_REC)  est
              réalisé  dans un sous-arbre de répertoire, tout montage bind dans le sous-arbre est
              automatiquement élagué (c’est-à-dire, pas répliqué) lors de la  réplication  de  ce
              sous-arbre pour produire le sous-arbre cible.

       Pour  des  explications sur le type de propagation assigné à un nouveau montage, consulter
       la section NOTES.

       Le type de propagation est un réglage spécifique  à  chaque  point  de  montage.  Certains
       montages  peuvent être marqués comme partagés (chaque montage partagé étant un membre d’un
       groupe de pairs distinct) tandis que d’autres sont privés (ou esclaves ou non liables).

       Il est à noter que le type de propagation  d’un  montage  détermine  si  les  mount(2)  et
       umount(2)  de  montages  immédiatement  sous le montage sont propagées. Par conséquent, le
       type de propagation n’affecte pas la propagation d’évènements pour les  petits-enfants  et
       les  futurs  montages de descendants supprimés. Ce qui se passe si le montage lui-même est
       démonté dépend du type de propagation en vigueur pour le parent du montage.

       Des membres sont ajoutés à un groupe de pairs quand un montage est marqué comme partagé et
       soit :

       (a)  le montage est répliqué pendant la création d’un nouvel espace de noms montage ;

       (b)  un nouveau montage bind est créé à partir du montage.

       Dans  les deux cas, le nouveau montage rejoint le groupe de pairs dont le montage existant
       est membre.

       Un nouveau groupe de pairs est aussi créé quand un montage enfant est créé sous un montage
       existant  marqué  comme  partagé.  Dans ce cas, le nouveau montage enfant est aussi marqué
       comme partagé et le nouveau groupe de pairs résultant est constitué de tous  les  montages
       qui sont répliqués sous les pairs des montages parents.

       Un  montage  cesse  d’être  membre d’un groupe de pairs quand le montage est explicitement
       démonté ou quand le montage est implicitement démonté parce qu’un espace de  noms  montage
       est supprimé (parce qu’il n’a plus de processus membre).

       Le  type  de  propagation  des  montages  dans l’espace de noms montage peut être obtenu à
       l’aide des « champs facultatifs » exposés dans /proc/pid/mountinfo (consulter proc(5) pour
       plus  de  détails  sur  ce  fichier). Les étiquettes suivantes peuvent apparaitre dans ces
       champs facultatifs pour un enregistrement de ce fichier :

       shared:X
              Ce montage est partagé dans le groupe de pairs X. Chaque groupe de pairs  a  un  ID
              unique qui est automatiquement géré par le noyau, et tous les montages dans le même
              groupe de pairs afficheront le même ID (ces ID  sont  assignés  en  partant  de  la
              valeur 1 et peuvent être recyclés quand un groupe de pairs n’a plus aucun membre).

       master:X
              Ce montage est un esclave du groupe de pairs X partagé.

       propagate_from:X (depuis Linux 2.6.26)
              Ce  montage est un esclave et reçoit des propagations du groupe de pairs X partagé.
              Cette étiquette apparaitra toujours en conjonction avec l’étiquette master:X.  Ici,
              X  est  le  plus  proche  groupe  de  pairs  dominant  sous le répertoire racine du
              processus. Si X est le maitre immédiat du montage ou s’il n’existe aucun groupe  de
              pairs  dominant  sous la même racine, seul le champ master:X est présent, alors que
              le champ propagate_from:X est absent. Pour plus de détails, voir ci-après.

       unbindable
              Ce montage ne peut être lié (bind).

       Si aucune de ces étiquettes n’est présente, alors c’est un montage privé.

   Exemples pour MS_SHARED et MS_PRIVATE
       En supposant que dans un terminal dans l’espace de noms montage initial, un  montage  soit
       marqué  comme  partagé  (mntS) et un autre privé (mntP), et en affichant les montages dans
       /proc/self/mountinfo :

           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

       Dans la sortie /proc/self/mountinfo, on voit que /mntS est  un  montage  partagé  dans  le
       groupe  de  pairs 1  et  que /mntP n’a pas d’étiquette facultative, indiquant que c’est un
       montage privé. Les deux premiers champs de chaque enregistrement dans ce fichier sont l’ID
       unique pour ce montage et l’ID de montage du montage parent. Ce fichier peut être inspecté
       ultérieurement pour vérifier que le montage parent de /mntS et  /mntP  est  le  répertoire
       racine /, qui est monté comme privé :

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

       Dans  un  second  terminal,  créons  un  nouvel  espace  de  noms  montage  où un deuxième
       interpréteur est exécuté et inspectons les montages :

           $ 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

       Le nouvel espace de noms montage reçoit une copie des montages initiaux d’espace  de  noms
       montage.  Ces nouveaux montages conservent les mêmes types de propagation, mais ont des ID
       uniques de montage (l’option --propagation unchanged empêche unshare(1)  de  marquer  tous
       les  montages  comme privés lors de la création d’un nouvel espace de noms montage, ce qui
       est réalisé par défaut).

       Dans le second terminal, créons alors des sous-montages sous chacun des /mntS et /mntP  et
       inspectons la configuration :

           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

       Dans  ce  qui  précède,  on  peut  voir  que /mntS/a a été créé comme partagé (héritant ce
       réglage de son montage parent) et que /mntP/b a été créé comme montage privé.

       En retournant dans le premier terminal et en inspectant la configuration, on peut voir que
       le  nouveau montage créé sous le montage partagé /mntS s’est propagé vers son montage pair
       (dans l’espace de noms montage initial), mais que le nouveau montage créé sous le  montage
       privé /mntP ne s’est pas propagé :

           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

   Exemples pour MS_SLAVE
       Faire  d’un montage un esclave lui permet de recevoir des évènements mount(2) et umount(2)
       propagés à partir d’un groupe de pairs partagé maitre, tout en l’empêchant de propager des
       évènements  vers  ce maitre. Cela est utile, par exemple, si on veut recevoir un évènement
       de montage quand un disque optique est monté dans un groupe de pairs partagé maitre  (dans
       un  autre espace de noms montage), mais en voulant empêcher que des évènements mount(2) et
       umount(2) dans le montage esclave n’aient des effets de  bord  dans  d’autres  espaces  de
       noms.

       L’effet  de  l’asservissement  peut  être démontré en d’abord marquant deux montages comme
       partagés dans l’espace de noms montage initial :

           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

       Dans un second terminal, créons un  nouvel  espace  de  noms  montage  et  inspectons  les
       montages :

           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

       Dans le nouvel espace de noms montage marquons un des montages comme esclave :

           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

       Dans  la  sortie  ci-dessus,  nous  voyons  que /mntY est désormais un montage esclave qui
       reçoit les évènements de propagation du groupe de pairs partagé avec l’ID 2.

       En continuant dans le nouvel espace de noms, créons des sous-montages sous chaque /mntX et
       /mntY :

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

       Si  nous inspectons l’état des montages dans le nouvel espace de noms montage, nous voyons
       que /mntX/a a été créé comme nouveau montage partagé (héritant du réglage  « partagé »  de
       son montage parent) et que /mntY/b a été créé comme montage privé :

           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

       En retournant dans le premier terminal (dans l’espace de noms montage initial) nous voyons
       que le montage /mntX/a s’est propagé au pair (le  /mntX  partagé),  mais  que  le  montage
       /mntY/b ne s’est pas propagé :

           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

       Créons maintenant un nouveau montage sous /mntY dans le premier interpréteur :

           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

       Quand  nous  examinons les montages dans le second espace de noms montage, nous voyons que
       dans ce cas le nouveau montage s’est propagé au montage esclave et que le nouveau  montage
       lui-même est un montage esclave (au groupe de pairs 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

   Exemples pour MS_UNBINDABLE
       Une  des  premières  utilités des montages non liables (non bind) est d’éviter le problème
       « d’explosion de montages » lors de réalisation de manière répétée de montages  bind  d’un
       sous-arbre  de  haut niveau dans un montage de bas niveau. Le problème est illustré par la
       session d’interpréteur suivante :

       En supposant l’existence d’un système avec les montages suivants :

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

       Supposons de plus que nous voulons de manière récursive monter lié  (bind)  le  répertoire
       racine  sous  plusieurs  répertoires  home  d’utilisateurs.  Faisons-le  pour  le  premier
       utilisateur et inspectons les montages :

           # 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

       Lorsque nous  répétons  cette  opération  pour  le  second  utilisateur,  le  problème  de
       l’explosion commence à apparaitre :

           # 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

       Sous  /home/henry,  nous  n'avons pas seulement ajouté récursivement les montages /mntX et
       /mntY, mais aussi les montages récursifs de ces répertoires sous /home/cecilia qui ont été
       créés  dans  l’étape  précédente.  Si nous répétons cela pour un troisième utilisateur, il
       devient évident que l’explosion est de nature exponentielle :

           # 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

       Le problème de l’explosion de montages dans le  scénario  précédent  peut  être  évité  en
       rendant  chaque  nouveau  montage  non  liable. Ainsi les montages récursifs du répertoire
       racine ne répliqueront pas les montages non  liables.  Un  tel  montage  pour  le  premier
       utilisateur peut être effectué ainsi :

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

       Avant   d’aller   plus   loin,  nous  montrons  que  les  montages  non  liables  le  sont
       effectivement :

           # 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

                  Dans certains cas, une information utile est disponible dans syslog – essayer
                  dmesg | tail ou quelque chose d’équivalent.

       Maintenant nous créons des montages bind  récursifs  non  liables  pour  les  deux  autres
       utilisateurs :

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

       Un  examen  de  la  liste  des montages permet de voir qu’il n’y a eu aucune explosion des
       montages parce que les montages non liables n’ont pas été répliqués sous chaque répertoire
       d’utilisateur :

           # 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

   Transitions de type de propagation
       La  table  suivante  montre  les effets que l’application d’un nouveau type de propagation
       (c’est-à-dire mount --make-xxxx) a sur un type de propagation existant d’un  montage.  Les
       lignes  correspondent  aux  types  de programmation existants et les colonnes aux nouveaux
       réglages de propagation. Pour des raisons d’espace, « private » est abrégé en « priv »  et
       « unbindable » en « unbind ».

                     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

       Prenez note des détails suivants à propos de la table :

       [1] Si  un  montage partagé est l’unique montage dans son groupe de pairs, faire de lui un
           esclave le rend automatiquement privé.

       [2] Rendre esclave un montage non partagé n’a aucun effet sur le montage.

   Sémantiques de Bind (MS_BIND)
       Supposons que la commande suivante soit exécutée :

           mount --bind A/a B/b

       Ici, A est le montage source, B est  le  montage  de  destination,  a  est  un  chemin  de
       sous-répertoire  sous  le point de montage A et b est un chemin de sous-répertoire sous le
       point de montage B. Le type de propagation du montage résultant, B/b, dépend des types  de
       propagation des montages A et B, et cela est résumé dans la table suivante.

                                    source(A)
                            shared  private    slave         unbind
       ────────────────────┬──────────────────────────────────────────────
       dest(B)  shared     │shared  shared     slave+shared  non valable
                non partagé│shared  private    slave         non valable

       Remarquez  qu’un  bind  récursif  d’un  sous-arbre suit les mêmes sémantiques que pour une
       opération bind sur chaque montage dans  le  sous-arbre  (les  montages  non  liables  sont
       automatiquement élagués à la cible du montage cible).

       Pour  de  plus  amples explications, consulter Documentation/filesystems/sharedsubtree.rst
       dans l’arbre des sources du noyau.

   Sémantiques de Move (MS_MOVE)
       Supposons que la commande suivante soit exécutée :

           mount --move A B/b

       Ici, A est le montage source, B est le montage de  destination  et  b  est  un  chemin  de
       sous-répertoire  sous  le point de montage B. Le type de propagation du montage résultant,
       B/b, dépend des types de propagation des montages A et B, et cela est résumé dans la table
       suivante.

                                    source(A)
                            shared  private    slave         unbind
       ───────────────────────────────────────────────────────────────────

       dest(B)  shared     │shared  shared     slave+shared  non valable
                non partagé│shared  private    slave         unbindable

       Remarque : déplacer un montage qui réside sous un montage partagé n’est pas autorisé.

       Pour  de  plus  amples explications, consulter Documentation/filesystems/sharedsubtree.rst
       dans l’arbre des sources du noyau.

   Sémantiques de montage
       Supposons que la commande suivante soit utilisée pour créer un montage :

           mount device B/b

       Ici, B est le montage de destination et b est un chemin de sous-répertoire sous  le  point
       de  montage B. Le type de propagation du montage résultant, B/b, suit les mêmes règles que
       pour un montage bind où le type de propagation du montage source  est  toujours  considéré
       comme privé.

   Sémantiques de démontage
       Supposons que la commande suivante soit utilisée pour défaire un montage :

           umount A

       Ici,  A  est  un  montage  dans  B/b,  où  B  est  le montage parent et b est un chemin de
       sous-répertoire sous le point de montage B. Si B est partagé, alors tous les montages  les
       plus récemment montés dans b sur des montages qui reçoivent la propagation du montage B et
       qui n’ont pas de sous-montages sous eux sont démontés.

   L’étiquette /proc/ pid /mountinfo propagate_from
       L’étiquette propagate_from:X est affichée dans les champs facultatifs d’un  enregistrement
       /proc/pid/mountinfo  dans le cas où un processus ne peut voir un maitre immédiat d’esclave
       (c’est-à-dire, le chemin du maitre n’est pas accessible à partir du répertoire  racine  du
       système  de  fichiers)  et ainsi ne peut pas déterminer la chaine de propagation entre les
       montages qu’il peut voir.

       Dans l’exemple suivant, créons d’abord une chaine maitre-esclave à deux  liens  entre  les
       montages  /mnt,  /tmp/etc et /mnt/tmp/etc. Ensuite la commande chroot(1) est utilisée pour
       rendre le point de montage /tmp/etc inaccessible à partir du répertoire racine, créant une
       situation  où  le  maitre  de  /mnt/tmp/etc  n’est  pas  accessible  à partir du (nouveau)
       répertoire racine du processus.

       D’abord mous montons lié (bind) le répertoire racine sur /mnt, puis nous montons lié /proc
       sous  /mnt/proc  de  telle  façon  qu’après le chroot(1) ultérieur, le système de fichiers
       proc(5) demeure visible dans l’emplacement correct de l’environnement chrooté.

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

       Ensuite, nous nous assurons que le montage /mnt est un montage  partagé  dans  un  nouveau
       groupe de pairs (sans aucun pair) :

           # mount --make-private /mnt  # Isolation de n’importe quel groupe de pairs précédent
           # 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

       Ensuite, nous montons lié /mnt/etc sur /tmp/etc :

           # 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

       Initialement,  ces  deux  montages  sont  dans  le même groupe de pairs, mais nous rendons
       /tmp/etc esclave de /mnt/etc et nous rendons aussi /tmp/etc partagé, de telle façon  qu’il
       puisse propager les évènements au prochain esclave dans la chaine :

           # 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

       Ensuite  nous  montons  lié  /tmp/etc sur /mnt/tmp/etc. De nouveau, les deux montages sont
       initialement dans le même groupe de pairs, mais nous  faisons  alors  de  /mnt/tmp/etc  un
       esclave de /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

       De  ce  qui  précède,  nous voyons que /mnt est le maitre de l’esclave /tmp/etc, qui à son
       tour est le maitre de l’esclave /mnt/tmp/etc.

       Puis nous effectuons un chroot(1) sur le répertoire /mnt, ce  qui  rend  le  montage  avec
       l’ID 267 inaccessible à partir du (nouveau) répertoire racine :

           # chroot /mnt

       Lorsque  nous examinons l’état des montages à l’intérieur de l’environnement chrooté, nous
       voyons ce qui suit :

           # 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

       Ci-dessus, nous voyons que le montage avec l’ID 273 est un esclave dont le maitre  est  le
       groupe  de  pairs 105.  Le  point de montage pour ce maitre est inaccessible, et donc, une
       étiquette propagate_from est affichée, indiquant que le groupe de pairs dominant  le  plus
       proche  (c’est-à-dire  le montage accessible le plus proche dans la chaine esclave) est le
       groupe de pairs avec l’ID 102 (correspondant  au  point  de  montage  /mnt  avant  que  le
       chroot(1) soit réalisé).

VERSIONS

       Les espaces de noms montage sont apparus dans Linux 2.4.19.

STANDARDS

       Les espaces de noms sont propres à Linux.

NOTES

       Le  type  de  propagation  assigné  à  un nouveau montage dépend du type de propagation du
       montage parent. Si le montage a un parent (c’est-à-dire que  ce  n’est  pas  un  point  de
       montage  racine)  et  si  le type de propagation du parent est MS_SHARED, alors le type de
       propagation du nouveau montage est aussi MS_SHARED.  Sinon,  le  type  de  propagation  du
       nouveau montage est MS_PRIVATE.

       Malgré  le fait que le type de propagation par défaut pour le nouveau montage soit dans de
       nombreux cas  MS_PRIVATE,  MS_SHARED  est  en  général  plus  utile.  Pour  cette  raison,
       systemd(1) remonte automatiquement tous les montages en MS_SHARED au démarrage du système.
       Par conséquent, sur la plupart des systèmes modernes, le type de  propagation  par  défaut
       est en pratique MS_SHARED.

       Puisque,  quand  quelqu’un utilise unshare(1) pour créer un espace de noms montage, le but
       est de fournir une isolation totale des montages dans le nouvel espace de noms, unshare(1)
       (depuis  util-linux  2.27)  pour  sa  part inverse les étapes réalisées par systemd(1), en
       rendant tous les montages privés dans le nouvel espace de noms.  C’est-à-dire,  unshare(1)
       réalise l’équivalent de ce qui suit dans le nouvel espace de noms montage :

           mount --make-rprivate /

       Pour empêcher cela, on peut utiliser l’option --propagation unchanged de unshare(1).

       Une  application  qui  crée  un  nouvel  espace  de  noms montage directement en utilisant
       clone(2) ou unshare(2) peut vouloir empêcher la propagation d’évènements  de  montage  aux
       autres  espaces  de  noms  montage (comme cela est réalisé par unshare(1)). Cela peut être
       effectué en changeant le type de propagation de montages dans le nouvel espace de  noms  à
       MS_SLAVE ou MS_PRIVATE, en utilisant l'appel suivant :

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

       Pour  des  explications  sur  les  types  de  propagation lors de déplacements de montages
       (MS_MOVE)    et    de    créations    de    montages     liés     (MS_BIND),     consulter
       Documentation/filesystems/sharedsubtree.rst.

   Restrictions sur les espaces de noms montage
       Prenez note des points suivants concernant les espaces de noms montage :

       [1] Chaque  espace  de  noms  montage  a un espace de noms utilisateur propriétaire. Comme
           expliqué ci-dessus, quand un nouvel espace de noms  montage  est  créé,  sa  liste  de
           montages est initialisée comme copie de la liste de montages d’un autre espace de noms
           montage. Si le nouvel espace de noms et l’espace de noms depuis  lequel  la  liste  de
           montages  a  été  copiée sont possédés par des espaces de noms utilisateur différents,
           alors le nouvel espace de noms montage est considéré comme moins privilégié.

       [2] Lors de la création d’un espace de noms moins privilégié, les montages  partagés  sont
           réduits  à  des  montages esclaves. Cela permet de s'assurer que les mappages réalisés
           dans des espaces de noms moins privilégiés ne se propageront pas vers des  espaces  de
           noms montage plus privilégiés.

       [3] Les  montages  qui viennent sous forme d’unité unique d’un espace de noms montage plus
           privilégié sont verrouillés ensemble et ne peuvent pas être séparés dans un espace  de
           noms montage moins privilégié. L’opération CLONE_NEWNS de unshare(2) circule à travers
           tous les montages de l’espace de noms montage originel  comme  unité  unique,  et  les
           montages  récursifs se propageant entre les espaces de noms montage se propagent comme
           unité unique.

           Dans ce contexte, « ne peuvent pas être  séparés »  signifie  que  les  montages  sont
           verrouillés  de  telle  façon  qu’ils  ne  puissent être démontés individuellement. En
           considérant l’exemple suivant :

               $ sudo sh
               # mount --bind /dev/null /etc/shadow
               # cat /etc/shadow       # Aucune sortie

           Les étapes ci-dessus, réalisées dans un espace de noms plus privilégié,  ont  créé  un
           montage  lié  qui  dissimule  le  contenu  du  fichier  d’hachage  des  mots de passe,
           /etc/shadow. Pour des raisons de sécurité, il ne doit pas être possible d’effectuer un
           umount(2)  de  ce montage dans un espace de noms montage moins privilégié puisque cela
           permettrait de dévoiler le contenu de /etc/shadow.

           Supposons que nous créons un nouvel espace de noms montage propriété  d’un  espace  de
           noms  utilisateur.  Le  nouvel  espace de noms montage héritera des copies de tous les
           espaces de noms montage précédents. Cependant, ces montages seront  verrouillés  parce
           que  le  nouvel  espace de noms montage est moins privilégié. Par conséquent, un essai
           d’umount(2) du montage échouera comme cela est montré dans l’étape suivante :

               # unshare --user --map-root-user --mount \
                              strace -o /tmp/log \
                              umount /mnt/dir
               umount: /etc/shadow: not mounted.
               # grep '^umount' /tmp/log
               umount2("/etc/shadow", 0)     = -1 EINVAL (Invalid argument)

           Le message d’erreur de mount(8) est un peu déroutant,  mais  la  sortie  de  strace(1)
           révèle  que l’appel système umount2(2) sous-jacent échoue avec l’erreur EINVAL qui est
           l’erreur que le noyau renvoie pour indiquer que le montage est verrouillé.

           Cependant, il est à remarquer qu’il est possible d’empiler (et désempiler) un  montage
           au-dessus  d’un  des montages verrouillés hérités dans un espace de noms montage moins
           privilégié.

               # echo 'aaaaa' > /tmp/a    # Fichier à monter sur /etc/shadow
               # unshare --user --map-root-user --mount \
                   sh -c 'mount --bind /tmp/a /etc/shadow; cat /etc/shadow'
               aaaaa
               # umount /etc/shadow

           La commande finale umount(8) ci-dessus, qui est réalisée dans l’espace de noms montage
           initial,  rend  le  fichier  /etc/shadow originel à nouveau visible dans cet espace de
           noms.

       [4] Dans le prolongement du  point  [3],  remarquez  qu’il  est  possible  d’effectuer  un
           umount(2)  sur  un sous-arbre entier de montages qui se sont propagés comme unité dans
           un espace de noms montage moins privilégié, comme cela  est  illustré  dans  l’exemple
           suivant.

           D’abord,  créons  un  nouvel  espace  de  noms utilisateur et un nouvel espace de noms
           montage en utilisant unshare(1). Dans le nouvel espace de noms  montage,  le  type  de
           propagation  de  tous les montages est défini comme privé. Créons alors un montage lié
           partagé sur /mnt et une petite hiérarchie de montages sous ce montage.

               $ PS1='ns1# ' sudo unshare --user --map-root-user \
                                      --mount --propagation private bash
               ns1# echo $$        # PID de l’interpréteur nécessaire par la suite
               778501
               ns1# mount --make-shared --bind /mnt /mnt
               ns1# mkdir /mnt/x
               ns1# mount --make-private -t tmpfs none /mnt/x
               ns1# mkdir /mnt/x/y
               ns1# mount --make-private -t tmpfs none /mnt/x/y
               ns1# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
               986 83 8:5 /mnt /mnt rw,relatime shared:344
               989 986 0:56 / /mnt/x rw,relatime
               990 989 0:57 / /mnt/x/y rw,relatime

           En continuant dans la même session d’interpréteur, créons alors un second interpréteur
           dans  un  nouvel  espace de noms utilisateur et un nouvel espace (moins privilégié) de
           noms montage, et vérifions l’état des montages propagés ayant pour racine /mnt.

               ns1# PS1='ns2# ' unshare --user --map-root-user \
                                      --mount --propagation unchanged bash
               ns2# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
               1239 1204 8:5 /mnt /mnt rw,relatime master:344
               1240 1239 0:56 / /mnt/x rw,relatime
               1241 1240 0:57 / /mnt/x/y rw,relatime

           Il est à noter dans le résultat ci-dessus que le type de propagation du montage /mnt a
           été  réduit  à  esclave  comme  expliqué  dans  le  point [2].  Cela  signifie que les
           évènements de sous-montage se propageront du maitre /mnt dans  « ns1 »,  mais  que  la
           propagation ne se produira pas dans la direction opposée.

           À  partir d’une fenêtre à part du terminal, utilisons alors nsenter(1) pour saisir des
           espaces de noms montage et utilisateur correspondant à « ns1 ». Dans cette fenêtre  de
           terminal, lions récursivement les montages /mnt/x à l’emplacement /mnt/ppp.

               $ PS1='ns3# ' sudo nsenter -t 778501 --user --mount
               ns3# mount --rbind --make-private /mnt/x /mnt/ppp
               ns3# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
               986 83 8:5 /mnt /mnt rw,relatime shared:344
               989 986 0:56 / /mnt/x rw,relatime
               990 989 0:57 / /mnt/x/y rw,relatime
               1242 986 0:56 / /mnt/ppp rw,relatime
               1243 1242 0:57 / /mnt/ppp/y rw,relatime shared:518

           Parce  que  le  type de propagation du montage parent, /mnt, était partagé, le montage
           récursif lié propage un petit sous-arbre de montages sous le montage esclave /mnt dans
           « ns2 »,  comme  cela  peut  être vérifié en exécutant la commande suivante dans cette
           session d’interpréteur :

               ns2# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
               1239 1204 8:5 /mnt /mnt rw,relatime master:344
               1240 1239 0:56 / /mnt/x rw,relatime
               1241 1240 0:57 / /mnt/x/y rw,relatime
               1244 1239 0:56 / /mnt/ppp rw,relatime
               1245 1244 0:57 / /mnt/ppp/y rw,relatime master:518

           Bien qu’il ne soit pas possible d’effectuer un umount(2) sur une partie du  sous-arbre
           propagé  (/mnt/ppp/y)  dans  « ns2 »,  il est possible d’effectuer un umount(2) sur le
           sous-arbre en entier comme cela est montré avec les commandes suivantes :

               ns2# umount /mnt/ppp/y
               umount: /mnt/ppp/y: not mounted.
               ns2# umount -l /mnt/ppp | sed 's/ - .*//'      # Succès...
               ns2# grep /mnt /proc/self/mountinfo
               1239 1204 8:5 /mnt /mnt rw,relatime master:344
               1240 1239 0:56 / /mnt/x rw,relatime
               1241 1240 0:57 / /mnt/x/y rw,relatime

       [5] Les réglages  des  attributs  de  mount(2)  MS_RDONLY,  MS_NOSUID,  MS_NOEXEC  et  des
           attributs  « atime »  (MS_NOATIME,  MS_NODIRATIME, MS_RELATIME) deviennent verrouillés
           quand ils sont propagés depuis un espace de noms montage plus privilégié vers un autre
           espace moins privilégié et ne peuvent être changés dans l’espace de noms montage moins
           privilégié.

           Ce point est illustré par l’exemple suivant où, dans un espace de  noms  montage  plus
           privilégié, nous créons un montage lié qui est marqué comme en lecture seule. Pour des
           raisons de sécurité, il ne devrait pas être possible de permettre l’écriture  dans  le
           montage  dans un espace de noms montage moins privilégié, et en effet le noyau empêche
           cela :

               $ sudo mkdir /mnt/dir
               $ sudo mount --bind -o ro /some/path /mnt/dir
               $ sudo unshare --user --map-root-user --mount \
                              mount -o remount,rw /mnt/dir
               mount: /mnt/dir: permission denied.

       [6] Un fichier ou un répertoire qui est un point de montage dans un  espace  de  noms  qui
           n’est pas un point de montage dans un autre espace de noms peut être renommé, délié ou
           supprimé (rmdir(2)) dans l’espace de noms montage dans lequel il n’est pas un point de
           montage  (sous  réserve des vérifications habituelles de permissions). Par conséquent,
           le point de montage est supprimé dans l’espace de noms montage  où  il  n’est  pas  un
           point de montage.

           Auparavant  (avant Linux 3.18), essayer de délier, renommer ou supprimer un fichier ou
           un répertoire qui était un point de montage dans  un  autre  espace  de  noms  montage
           aboutissait  à  une  erreur  EBUSY. Ce comportement rencontre des problèmes techniques
           d’application (par exemple, pour NFS) et permet des attaques par déni de  service  sur
           des  utilisateurs  plus  privilégiés  (c’est-à-dire empêchant des fichiers individuels
           d’être mis à jour en utilisant un montage lié au-dessus d’eux).

EXEMPLES

       Consulter pivot_root(2).

VOIR AUSSI

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

       Documentation/filesystems/sharedsubtree.rst dans l’arbre des sources du noyau.

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Paul Guillonneau
       <guillonneau.jeanpaul@free.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.