Provided by: manpages-sv_4.27.0-1_all bug

NAMN

       mount_namespaces — översikt över Linux monteringsnamnrymder

BESKRIVNING

       För en översikt över namnrymder, se namespaces(7).

       Monteringsnamnrymder   ger  isolering  av  listan  över  monteringar  som  ses  av  processerna  i  varje
       namnrymdsinstans. Alltså, processerna i var och en  av  instanserna  av  monteringsnamnrymder  kommer  se
       distinkta enkatalogershierarkier.

       Vyerna  som  ges  av  filerna  /proc/pid/mounts,  /proc/pid/mountinfo  och /proc/pid/mountstats (som alla
       beskrivs i proc(5)) motsvarar monteringsnamnrymden i vilken processen med PID pid bor. (Alla  processerna
       som bor i samma monteringsnamnrymd kommer se samma vy i dessa filer.)

       En  ny  monteringsnamnrymd  skapas  genom  att  använda  antingen  clone(2)  eller unshare(2) med flaggan
       CLONE_NEWNS. När en ny monteringsnamnrymd skapas initieras dess monteringslista enligt följande:

       •  Om  namnrymden  skapas  med  clone(2)  är  monteringslistan  för  barnets   namnrymd   en   kopia   av
          monteringslistan i föräldraprocessens monteringsnamnrymd.

       •  Om  namnrymden  skapas  med  unshare(2)  är  monteringslistan  för  den  nya  namnrymden  en  kopia av
          monteringslistan i anroparens tidigare monteringsnamnrymd.

       Senare ändringar av monteringslistan (mount(2) och umount(2)) i endera monteringsnamnrymden  kommer  inte
       (som standard) att påverka monteringslistan som ses i den andra namnrymden (men se följande diskussion om
       delade underträd).

DELADE UNDERTRÄD

       Efter  implementationen av monteringsnamnrymder var klar visade erfarenheterna att isoleringen som de gav
       var, i några fall, för stor. Till exempel, för att göra en nyss laddad optisk  disk  tillgänglig  i  alla
       monteringsnamnrymder  krävdes en monteringsåtgärd i varje namnrymd. För detta användningsfall, och andra,
       introducerades funktionen med delade underträd  i  Linux  2.6.15.  Denna  funktion  tillåter  automatisk,
       kontrollerad  spridning av händelserna mount(2) och umount(2) mellan namnrymder (eller, mer exakt, mellan
       monteringar som är medlemmar av en partnergrupp som sprider händelser till varandra).

       Varje montering markeras (via mount(2)) som att ha en av följande spridningstyper:

       MS_SHARED
              Denna montering delar händelser  med  medlemmar  av  en  partnergrupp.  Händelserna  mount(2)  och
              umount(2)  omedelbart under denna montering kommer spridas till andra monteringar som är medlemmar
              av partnergruppen. Spridning betyder här att samma mount(2) eller umount(2) automatiskt kommer ske
              under alla de andra  monteringarna  i  partnergruppen.  Omvänt  kommer  händelserna  mount(2)  och
              umount(2) som sker under partnermonteringar att spridas till denna montering.

       MS_PRIVATE
              Denna  montering  är  privat;  den har inte någon partnergrupp. Händelserna mount(2) och umount(2)
              sprids inte in i eller ut från denna montering.

       MS_SLAVE
              Händelserna mount(2) och umount(2) sprids in i denna montering från en delad  (huvud)partnergrupp.
              Händelserna mount(2) och umount(2) under denna montering sprids inte till någon partner.

              Observera  att  en  montering  kan  vara  slav  till  en annan partnergrupp och på samma gång dela
              händelserna mount(2) och umount(2) med en partnergrupp  som  den  är  medlem  i.  (Mer  exakt,  en
              partnergrupp kan vara slav till en annan partnergrupp.)

       MS_UNBINDABLE
              Detta  är  som en privat montering, och dessutom kan denna montering inte bindmonteras. Försök att
              bindmontera denna montering (mount(2) med flaggan MS_BIND) kommer att misslyckas.

              När en rekursiv bindningsmontering (mount(2) med flaggorna  MS_BIND  och  MS_REC)  utförs  på  ett
              katalogunderträd  ansas  automatiskt  eventuella  bindningsmonteringar  inuti underträdet (d.v.s.,
              replikeras inte) när det underträdet replikeras för att skapa ett målunderträd.

       För en diskussion om spridningstypen tilldelad till en ny montering, se NOTERINGAR.

       Spridningstypen är en inställning per monteringspunkt; några monteringar kan  markeras  som  delade  (med
       varje  delad montering en medlem av en distinkt partnergrupp), medan andra är privata (eller slavar eller
       obindbara).

       Observera att en monterings spridningstyp avgör huruvida mount(2) och umount(2) av monteringar omedelbart
       under monteringen sprids. Alltså, spridningstypen påverkar inte spridningen av händelser för barnbarn och
       mer avlägsna avkommemonteringar. Vad som händer om monteringen själv avmonteras avgörs av spridningstypen
       som gäller för föräldern till monteringen.

       Medlemmar läggs till i en partnergrupp när en montering markeras som delad och antingen:

       (a)  monteringen replikeras när en ny monteringsnamnrymd skapas; eller

       (b)  en ny bindmontering skapas från monteringen.

       I båda dessa fall går den nya monteringen med i partnergruppen som den befintliga monteringen  är  medlem
       i.

       En  ny partnergrupp skapas också när en barnmontering skapas under en befintlig montering som är markerad
       som delad. I detta fall markeras även barnmonteringen  som  delad  och  den  resulterande  partnergruppen
       består av alla monteringar som replikeras under partner till föräldramonteringarna.

       En  montering  upphör att vara medlem i en partnergrupp när antingen monteringen uttryckligen avmonteras,
       eller när monteringen implicit avmonteras för att en monteringsnamnrymd tas bort (för att  den  inte  har
       några fler medlemsprocesser).

       Spridningstypen för monteringen i en monteringsnamnrymd kan upptäckas via de ”valfria fälten” som visas i
       /proc/pid/mountinfo.  (Se  proc(5) för detaljer om denna fil.) Följande taggar kan förekomma i de valfria
       fälten för en post i den filen:

       shared:X
              Denna montering delas i partnergruppen X. Varje partnergrupp har  ett  unikt  ID  som  automatiskt
              genereras  av  kärnan, och alla monteringar i samma partnergrupp kommer visa samma ID. (Dessa ID:n
              tilldelas med början från värdet 1, och kan återanvändas när en partnergrupp upphör att  ha  några
              medlemmar.)

       master:X
              Denna montering är en slav till den delade partnergruppen X.

       propagate_from:X (från Linux 2.6.26)
              Denna  montering  är en slav och tar emot spridningar från den delade partnergruppen X. Denna tagg
              kommer alltid förekomma tillsammans med  en  tagg  master:X.  Här  är  X  den  närmaste  dominanta
              partnergruppen  under  processens rotkatalog. Om X är det omedelbara huvudet av monteringen, eller
              om det inte finns någon dominant partnergrupp under samma rot, då finns bara fältet  master:X  och
              inte fältet propagate_from:X. För fler detaljer, se nedan.

       unbindable
              Detta är en obindbar montering.

       Om ingen av ovanstående flaggor finns, då är detta en privat montering.

   Exempel  MS_SHARED och MS_PRIVATE
       Anta  att  vi  i  en  terminal i den initiala monteringsnamnrymden markerar en montering som delad och en
       annan som privat, och sedan betraktar monteringarna i /proc/self/mountinfo:

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

       Av utdata från /proc/self/mountinfo ser vi att /mntD är en delad montering  i  partnergrupp  1,  och  att
       /mntP  inte  har  några  valfria  taggar,  vilket indikerar att det är en privat montering. De första två
       fälten i varje post  i  denna  fil  är  det  unika  ID:t  för  denna  montering,  och  monterings-ID  för
       föräldramonteringen. Vi kan vidare inspektera denna fil för att se att föräldramonteringen till /mntD och
       /mntP är rotkatalogen, /, vilken är monterad privat:

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

       I  en  andra  terminal  skapar  vi  en  ny  monteringsnamnrymd  där vi kör ett andra skal och inspekterar
       monteringarna:

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

       Den nya monteringsnamnrymden fick en kopia av den initiala monteringsnamnrymdens monteringar.  Dessa  nya
       monteringar    behåller    samma    spridningstyper,    men    har    unika   monterings-ID:n.   (Flaggan
       --propagation unchanged förhindrar att unshare(1) markerar alla monteringar som privata när den skapar en
       ny monteringsnamnrymd, vilket den gör som standard.)

       I den andra terminalen skapar vi sedan undermonteringar under vardera av /mntD och /mntP och  inspekterar
       uppsättningen:

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

       Från  ovanstående  kan  man  se  att  /mntD/a  skapades  som  delad  (ärvde  denna  inställning  från sin
       föräldramontering) och /mntP/b skapades som en privat montering.

       Om vi återgår till den första terminalen och inspekterar uppsättningen ser vi att den nya monteringen som
       skapades  under  den  delade  monteringen  /mntD  spreds  till  sin  partnermontering  (i  den   initiala
       monteringsnamnrymden),  men  den  nya monteringen som skapades under den privata monteringen /mntP spreds
       inte:

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

   Exempel  MS_SLAVE
       Att skapa en montering som slav låter den ta emot händelser mount(2) och umount(2) som  sprids  från  den
       delade huvudpartnergruppen, samtidigt som den förhindras från att sprida händelser till huvudet. Detta är
       användbart  om  vi  vill  (exempelvis)  ta  emot en monteringshändelse när en optisk skiva monteras i den
       delade huvudpartnergruppen (i en annan monteringsnamnrymd), men vill  förhindra  händelser  mount(2)  och
       umount(2) under slavmonteringen från att ha sidoeffekter i andra namnrymder.

       Vi  kan demonstrera effekten av slavförhållandet genom att först markera två monteringar som delade i den
       initiala monteringsnamnrymden:

           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

       I en andra terminal skapar vi en ny monteringsnamnrymd och inspekterar monteringarna:

           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

       I den nya monteringsnamnrymden markerar vi sedan en av monteringarna som en slav:

           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

       Från ovanstående utdata ser vi att /mntY nu är en slavmontering som tar emot spridningshändelser från den
       delade partnergruppen med ID:t 2.

       Fortfarande i den nya namnrymden skapar vi undermonteringar under var och en av /mntX och /mntY:

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

       När vi granskar tillstånden hos monteringarna i den nya monteringsnamnrymden ser vi att /mntX/a  skapades
       som  en ny delad montering (ärvde inställningen "shared" från sin föräldramontering) och /mntY/b skapades
       som en privat montering:

           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

       Tillbaka i den första terminalen (i den initiala monteringsnamnrymden) ser  vi  att  monteringen  /mntX/a
       spreds till partnern (den delade /mntX), men att monteringen /mntY/b inte spreds:

           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

       Nu skapar vi en ny montering under /mntY i det första skalet:

           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

       När  vi  undersöker  monteringarna  i  den andra monteringsnamnrymden ser vi att i detta fall har den nya
       monteringen  spritts  till  slavmonteringen,  och  att  monteringen  själv  är  en  slavmontering   (till
       partnergrupp 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

   Exempel  MS_UNBINDABLE
       Ett av de primära syftena med obindbara monteringar är att undvika problemet med en ”monteringsexplosion”
       när  man  upprepat utför bindmonteringar av ett underträd på en högre nivå till en lägre nivås montering.
       Problemet illustreras av följande skalsession.

       Anta att vi har ett system med följande monteringar:

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

       Anta vidare att vi önskar bindningsmontera rotkatalogen rekursivt under flera användares hemkataloger. Vi
       gör detta för den första användaren och granskar monteringarna:

           # 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

       När vi upprepar denna åtgärd för den andra användaren börjar vi se explosionsproblemet:

           # 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

       Under /home/henry har vi inte bara rekursivt lagt till  monteringarna  /mntX  och  /mntY,  utan  även  de
       rekursiva  monteringarna  av  dessa  kataloger  under  /home/cecilia som skapades i förestående steg. Vid
       upprepning av steget för en tredje användare blir det uppenbart att explosionen är exponentiell till  sin
       natur:

           # 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

       Problemet  med  monteringexplosionen  i  ovanstående scenario kan lösas genom att göra varje ny montering
       obindbar. Effekten av att göra detta är att rekursiva monteringar av rotkatalogen inte  kommer  replikera
       de obindbara monteringarna. Vi gör en sådan montering för den första användaren:

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

       Före vi går vidare visar vi att obindbara monteringar verkligen är obindbara:

           # mkdir /mntZ
           # mount --bind /home/cecilia /mntZ
           mount: /mntZ: fel filsystemstyp, felaktig flagga,
                  felaktigt superblock på /home/cecilia,
                  teckentabell eller hjälpprogram saknas, eller annat fel.
                  dmesg(1) may have more information after failed mount system call.

       Nu skapar vi obindbara rekursiva bindmonteringar för de andra två användarna:

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

       Vid  granskning  av  listan  av  monteringar ser vi att det inte har varit någon explosion av monteringar
       eftersom de obindbara monteringarna inte replikerades under varje användares katalog:

           # 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

   Spridningstypsövergångar
       Följande tabell visar effekten tillämpning av en ny spridningstyp (d.v.s., mount --make-xxxx) har på  den
       befintliga  spridningstypen  hos  en  montering.  Raderna  motsvarar de befintliga spridningstyperna, och
       kolumnerna är den  nya  spridningsinställningen.  Av  utrymmesskäl  förkortas  ”privat”  som  ”priv”  och
       ”obindbar” som ”obind”.
                   make-shared  make-slave     make-priv  make-unbind
       ───────────┬─────────────────────────────────────────────────────
       delad      │delad        slav/priv [1]  priv       obind
       slav       │slav+delad   slav [2]       priv       obind
       slav+delad │slav+delad   slav           priv       obind
       privat     │delad        priv [2]       priv       obind
       obindbar   │delad        obind [2]      priv       obind

       Observera följande detaljer om tabellen:

       [1]  Om  en delad montering är den enda monteringen i sin partnergrupp görs den automatiskt privat om den
            görs till en slav.

       [2]  Att göra en odelad montering till slav har ingen effekt på monteringen.

   Bindsemantik (MS_BIND)
       Anta att följande kommando utförs:

           mount --bind A/a B/b

       Här är A källmonteringen, B är målmonteringen, a är en underkatalogsökväg under monteringspunkten A och b
       är en underkatalogsökväg under monteringspunkten B. Spridningstypen  för  den  resulterande  monteringen,
       B/b, beror på spridningstyperna för monteringarna A och B, och sammanfattas i följande tabell.

                             källa(A)
                      delad  privat    slav        obind
       ──────────────┬────────────────────────────────────────
       mål(B)  delad │delad  delad     slav+delad  otillåten
               odelad│delad  privat    slav        otillåten

       Observera  att  en rekursiv bindning av ett underträd följer samma semantik som vid en bindningsåtgärd på
       varje montering i underträdet. (Obindbara monteringar ansas automatiskt från målmonteringspunkten.)

       För vidare detaljer, se Documentation/filesystems/sharedsubtree.rst i kärnans källträd.

   Flyttsemantik (MS_MOVE)
       Anta att följande kommando utförs:

           mount --move A B/b

       Här är A källmonteringen, B är målmonteringen och b är en underkatalogsökväg under  monteringspunkten  B.
       Spridningstypen för den resulterande monteringen, B/b, beror på spridningstyperna för monteringarna A och
       B, och sammanfattas i följande tabell.

                             källa(A)
                      delad  privat    slav        obind
       ──────────────┬────────────────────────────────────────
       mål(B)  delad │delad  delad     slav+delad  otillåten
               odelad│delad  privat    slav        obindbar

       Observera: att flytta en montering som bor under en delad montering är inte tillåtet.

       För vidare detaljer, se Documentation/filesystems/sharedsubtree.rst i kärnans källträd.

   Monteringssemantik
       Anta att vi använder följande kommando för att skapa en montering:

           mount enhet B/b

       Här är B målmonteringen och b är en underkatalogsökväg under monteringspunkten B. Spridningstypen för den
       resulterande  monteringen,  B/b,  följer  samma  regler  som för en bindmontering där spridningstypen för
       källmonteringen alltid anses vara privat.

   Avmonteringssemantik
       Anta att vi använder följande kommando för att riva ner en montering:

           umount A

       Här är A en montering på B/b,  där  B  är  föräldramonteringen  och  b  är  en  underkatalogsökväg  under
       monteringspunkten  B. Om B är delad, då avmonteras alla senast monterade monteringar vid b på monteringar
       som tar emot spridningar från monteringen B och inte har undermonteringar under sig.

   Taggen propagate_from i /proc/ pid /mountinfo
       Taggen propagate_from:X visas i de valfria fälten av en post i /proc/pid/mountinfo i fall då  en  process
       inte  kan  se  en  slavs  omedelbara  huvud  (d.v.s., sökvägen för huvudet kan inte nås från filsystemets
       rotkatalog) och därför inte kan avgöra spridningskedjan mellan monteringarna den kan se.

       I följande exempel skapar vi först en tvålänks huvud-slav-kedja mellan monteringarna /mnt,  /tmp/etc  och
       /mnt/tmp/etc.  Sedan  används  kommandot  chroot(1)  för  att göra monteringspunkten /tmp/etc onåbar från
       rotkatalogen, vilket skapar en situation där huvudet för /mnt/tmp/etc  inte  är  nåbart  från  den  (nya)
       rotkatalogen för processen.

       Först  bindmonterar  vi rotkatalogen på /mnt och sedan bindmonterar vi /proc/mnt/proc så att efter en
       senare chroot(1) filsystemet proc(5) fortsätter att vara synligt på rätt plats i den chroot:ade miljön.

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

       Därefter ser vi till att monteringen /mnt är en delad montering i  den  nya  partnergruppen  (utan  någon
       partner):

           # mount --make-private /mnt  # Isolera från eventuell tidigare partnergrupp
           # 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

       Därefter bindmonterar vi /mnt/etc/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

       Från  början  är  dessa två monteringar i samma partnergrupp, men sedan gör vi /tmp/etc till en slav till
       /mnt/etc, och därefter gör vi även /tmp/etc delad, så att den kan sprida  händelser  till  nästa  slav  i
       kedjan:

           # 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

       Därefter  bindmonterar  vi  /tmp/etc/mnt/tmp/etc. Återigen är de två monteringarna initialt i samma
       partnergrupp, men vi gör sedan /mnt/tmp/etc till en slav till /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

       Från det ovanstående ser vi att /mnt är huvud till slaven /tmp/etc, vilken i sin tur är huvud till slaven
       /mnt/tmp/etc.

       Därefter gör vi chroot(1) till katalogen /mnt, vilket medför att monteringen med ID 267 blir onåbar  från
       den (nya) rotkatalogen:

           # chroot /mnt

       När vi sedan undersöker tillståndet för monteringarna inuti den chroot:ade miljön ser vi följande:

           # 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

       Ovan  ser  vi att monteringen med ID 273 är en slav vars huvud är partnergrupp 105. Monteringspunkten för
       det huvudet är onåbar, och därför visas  en  tagg  propagate_from,  vilket  indikerar  att  den  närmaste
       dominanta  partnergruppen (d.v.s., den närmaste nåbara monteringen i slavkedjan) är partnergruppen med ID
       102 (vilket motsvarar monteringspunkten /mnt före chroot(1) gjordes).

STANDARDER

       Linux.

HISTORIK

       Linux 2.4.19.

NOTERINGAR

       Spridningstypen som tilldelas en ny  montering  beror  på  spridningstypen  hos  föräldramonteringen.  Om
       monteringen  har  en  förälder (d.v.s., det är en annan monteringspunkt än roten) och spridningstypen hos
       föräldern är MS_SHARED, då är  spridningstypen  för  den  nya  monteringen  också  MS_SHARED.  Annars  är
       spridningstypen för den nya monteringen MS_PRIVATE.

       Oaktat  det  faktum  att  standardsspridningstypen  för  nya monteringar i många fall är MS_PRIVATE så är
       MS_SHARED typiskt mer användbart. Av detta skäl monterar systemd(1) automatiskt om alla  monteringar  som
       MS_SHARED  vid  systemstart.  På  de  flesta moderna system är alltså standardspridningstypen i praktiken
       MS_SHARED.

       Eftersom att när man använder unshare(1) för att skapa en ny monteringsnamnrymd så  är  målet  vanligtvis
       att  ge  fullständig  isolering  av  monteringarna  i  den  nya  namnrymden återställer unshare(1) (sedan
       util-linux 2.27) i sin tur stegen som utfördes av systemd(1), genom att göra alla monteringar  privata  i
       den nya namnrymden. Det vill säga, unshare(1) utför motsvarande följande i den nya monteringsnamnrymden:

           mount --make-rprivate /

       För att förhindra detta kan man använda flaggan --propagation unchanged till unshare(1).

       Ett  program som skapar en ny monteringsnamnrymd direkt med clone(2) eller unshare(2) kan vilja förhindra
       spridning av monteringshändelser till andra monteringsnamnrymder (så som unshare(1) gör). Detta kan göras
       genom att ändra spridningstypen för monteringar  i  den  nya  namnrymden  till  antingen  MS_SLAVE  eller
       MS_PRIVATE med ett anrop som det följande:

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

       För  en  diskussion  om  spridningstyper när monteringar flyttas (MS_MOVE) och när bindmonteringar skapas
       (MS_BIND), se Documentation/filesystems/sharedsubtree.rst.

   Begränsningar för monteringsnamnrymder
       Observera följande punkter med avseende på monteringsnamnrymder:

       [1]  Varje monteringsnamnrymd  har  en  användarnamnrymd  som  ägare.  Som  förklaras  ovan,  när  en  ny
            monteringsnamnrymd skapas är dess monteringslista initierad som en kopia av monteringslistan från en
            annan  monteringsnamnrymd.  Om  den  nya namnrymden och den namnrymd som monteringslistan kopierades
            ifrån ägs av  olika  användarnamnrymder,  då  betraktas  den  nya  monteringsnamnrymden  som  mindre
            privilegierad.

       [2]  När   en   mindre   privilegierad   monteringsnamnrymd  skapas  reduceras  delade  monteringar  till
            slavmonteringar.  Detta  säkerställer  att  avbildningar  som   utförs   i   mindre   privilegierade
            monteringsnamnrymder inte kommer spridas till mer privilegierade monteringsnamnrymder.

       [3]  Monteringar som kommer som en enda enhet från en mer privilegierad monteringsnamnrymd låses ihop och
            kan  inte  separeras  i en mindre privilegierad monteringsnamnrymd. (Åtgärden unshare(2) CLONE_NEWNS
            för med sig alla monteringarna från originalmonteringsnamnrymden som en enda  enhet,  och  rekursiva
            monteringar som sprids mellan monteringsnamnrymder sprids som en enda enhet.)

            I  detta  sammanhang  betyder  ”kan  inte  separeras”  att  monteringarna  låses  så att de inte kan
            avmonteras individuellt. Betrakta följande exempel:

                $ sudo sh
                # mount --bind /dev/null /etc/shadow
                # cat /etc/shadow       # Ger ingen utdata

            De  ovanstående  stegen,  utförda  i  en  mer  privilegierad  monteringsnamnrymd,  har   skapat   en
            bindmontering  som döljer innehållet av skugglösenordsfilen, /etc/shadow. Av säkerhetsskäl skall det
            inte  vara  möjligt  att  göra  umount(2)   av   den   monteringen   i   en   mindre   privilegierad
            monteringsnamnrymd, eftersom det skulle avslöja innehållet i /etc/shadow.

            Anta  att  vi  nu  skapar  en  ny  monteringsnamnrymd  som  ägs  av  en ny användarnamnrymd. Den nya
            monteringsnamnrymden   kommer   ärva   kopior   av   alla   monteringarna   från   den    föregående
            monteringsnamnrymden. Dock kommer dessa monteringar vara låsta eftersom den nya monteringsnamnrymden
            är  mindre  privilegierad. Som en konsekvens misslyckas ett försök att göra umount(2) av monteringen
            så som visas av följande steg:

                # unshare --user --map-root-user --mount \
                               strace -o /tmp/log \
                               umount /etc/shadow
                umount: /etc/shadow: inte monterad.
                # grep '^umount' /tmp/log
                umount2("/etc/shadow", 0)     = -1 EINVAL (Ogiltigt argument)

            Felmeddelandet från mount(8) är lite  förvirrande,  men  utdata  från  strace(1)  avslöjar  att  det
            underliggande  systemanropet  umount2(2) misslyckades med felet EINVAL, vilket är det fel som kärnan
            returnerar för att indikera att monteringen är låst.

            Observera dock att det är möjligt att stacka upp (och ta bort från stacken) en montering  ovanpå  en
            av de ärvda låsta monteringarna i en mindre privilegierad monteringsnamnrymd:

                # echo 'aaaaa' > /tmp/a    # Fil att montera på /etc/shadow
                # unshare --user --map-root-user --mount \
                    sh -c 'mount --bind /tmp/a /etc/shadow; cat /etc/shadow'
                aaaaa
                # umount /etc/shadow

            Det  sista  kommandot umount(8) ovan, vilket utförs i den initiala monteringsnamnrymden, gör att den
            ursprungliga filen /etc/shadow återigen är synlig i den namnrymden.

       [4]  Som en uppföljning av punkt [3], observera att det  är  möjligt  att  göra  umount(2)  av  ett  helt
            underträd  av  monteringar  som spreds som en enhet in i en mindre privilegierad monteringsnamnrymd,
            såsom illustreras i följande exempel.

            Först  skapar  vi   nya   användar-   och   monteringsnamnrymder   med   unshare(1).   I   den   nya
            monteringsnamnrymden  sätts  spridningstypen  för  alla  monteringar till privat. Vi skapar sedan en
            delad bindmontering på /mnt, och en liten hierarki av monteringar nedanför den monteringen.

                $ PS1='nr1# ' sudo unshare --user --map-root-user \
                                       --mount --propagation private bash
                nr1# echo $$        # Vi behöver PID:en för detta skal senare
                778501
                nr1# mount --make-shared --bind /mnt /mnt
                nr1# mkdir /mnt/x
                nr1# mount --make-private -t tmpfs none /mnt/x
                nr1# mkdir /mnt/x/y
                nr1# mount --make-private -t tmpfs none /mnt/x/y
                nr1# 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

            Fortfarande i samma skalsession skapar vi sedan ett andra skal i en ny användarnamnrymd  och  en  ny
            (mindre  privilegierad)  monteringsnamnrymd och kontrollerar tillståndet hos den spridda monteringen
            med rot på /mnt.

                nr1# PS1='nr2# ' unshare --user --map-root-user \
                                       --mount --propagation unchanged bash
                nr2# 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

            Att notera i ovanstående utdata är att spridningstypen för  monteringen  /mnt  har  reducerats  till
            slav, så som förklarades i punkt [2]. Detta betyder att undermonteringshändelser kommer spridas från
            huvudets /mnt i ”nr1”, men spridning kommer inte ske i den omvända riktningen.

            Från  ett  separat  terminalfönster  använder  vi  sedan  nsenter(1) för att gå in i monterings- och
            användarnamnrymderna som motsvarar ”nr1”. I det terminalfönstret kan vi rekursivt bindmontera /mnt/x
            på platsen /mnt/ppp.

                $ PS1='nr3# ' sudo nsenter -t 778501 --user --mount
                nr3# mount --rbind --make-private /mnt/x /mnt/ppp
                nr3# 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

            Eftersom  spridningstypen  hos  föräldramonteringen,   /mnt,   var   delad   spred   den   rekursiva
            bindmonteringen ett litet underträd av monteringar under slavmonteringen /mnt in i ”nr2”, vilket kan
            verifieras genom att köra följande kommando i den skalsessionen:

                nr2# 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

            Fastän  det  inte  är möjligt att göra umount(2) av en del av det spridda underträdet (/mnt/ppp/y) i
            ”nr2” är det möjligt att göra umount(2) av hela underträdet som visas med följande kommandon:

                nr2# umount /mnt/ppp/y
                umount: /mnt/ppp/y: inte monterad.
                nr2# umount -l /mnt/ppp | sed 's/ - .*//'      # Lyckas …
                nr2# 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]  Flagginställningarna  av  MS_RDONLY,  MS_NOSUID,  MS_NOEXEC   och   ”atime-flaggorna”   (MS_NOATIME,
            MS_NODIRATIME, MS_RELATIME) till mount(2) blir låsta när de sprids från en mer privilegierad till en
            mindre   privilegierad   monteringsnamnrymd,  och  kan  inte  ändras  i  den  mindre  privilegierade
            monteringsnamnrymden.

            Denna punkt illustreras i följande exempel där vi, i en mer privilegierad monteringsnamnrymd, skapar
            en bindmontering som markeras som endast läsbar. Av säkerhetsskäl skall det inte  vara  möjligt  att
            göra  monteringen  skrivbar  i  en mindre privlegierad monteringsnamnrymd, och kärnan hindrar mycket
            riktigt detta.

                $ 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: åtkomst nekas.

       [6]  En fil eller katalog som är en monteringspunkt i en namnrymd som inte är  en  monteringspunkt  i  en
            annan   namnrymd  går  att  byta  namn  på,  ta  bort  länken  till  eller  tas  bort  (rmdir(2))  i
            monteringsnamnrymden   i   vilken   den   inte   är   en   monteringspunkt   (under    de    vanliga
            rättighetskontrollerna). Som en konsekvens tas monteringspunkten bort i monteringsnamnrymden där den
            var en monteringspunkt.

            Tidigare (före Linux 3.18) resulterade försök att ta bort länken till, byta namn på eller ta bort en
            fil  eller  katalog  som  var  en  monteringspunkt  i en annan monteringsnamnrymd i felet EBUSY. Det
            beteendet  hade  tekniska  problem   att   vidmakthållas   (t.ex.,   för   NFS)   och   möjliggjorde
            tjänstevägransattacker (DoS) mot mer privilegierade användare (d.v.s., förhindra enskilda filer från
            att uppdateras genom att bindmontera ovanpå dem).

EXEMPEL

       Se pivot_root(2).

SE ÄVEN

       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 i kärnans källkodsträd.

ÖVERSÄTTNING

       Den svenska översättningen av denna manualsida skapades av Göran Uddeborg <goeran@uddeborg.se>

       Denna  översättning  är  fri  dokumentation;  läs  GNU General Public License Version 3  eller senare för
       upphovsrättsvillkor. Vi tar INGET ANSVAR.

       Om du hittar fel i översättningen av denna manualsida, skicka ett mail till Tp-sv@listor.tp-sv.se.

Linux man-pages 6.9.1                             15 juni 2024                               mount_namespaces(7)