Scroll to navigation

MOUNT_NAMESPACES(7) Linux programmerarmanual MOUNT_NAMESPACES(7)

NAMN

mount_namespaces — översikt över Linux monteringsnamnrymder

BESKRIVNING

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

Monteringsnamnrymder ger isolering av listan över monteringspunkter 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.)

När en process skapar en ny monteringsnamnrymd med clone(2) eller unshare(2) med flaggan CLONE_NEWNS är monteringspunktslistan för den nya namnrymden en kopia av anroparens monteringspunktlista. Senare ändringar av monteringspunktslistan (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).

Begränsningar för monteringsnamnrymder

Observera följande punkter med avseende på monteringsnamnrymder:

  • En monteringsnamnrymd har en användarnamnrymd som ägare. En monteringsnamnrymd vars ägare är en annan än användarnamnrymden som äger föräldramonteringsnamnrymds betraktas som en mindre privilegierad monteringsnamnrymd.
  • När en mindre privilegierad monteringsnamnrymd skapas reduceras delade monteringar till slavmonteringar. (Delade monteringar och slavmonteringar diskuteras nedan.) Detta säkerställer att avbildningar som utförs i mindre privilegierade monteringsnamnrymder inte kommer spridas till mer privilegierade monteringsnamnrymder.
  • Monteringar som kommer som en enda enhet från en mer privilegierad montering 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.)
  • 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.
  • 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).
Tidigare 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).

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 montering och avmontering mellan namnrymder (eller, mer exakt, mellan monteringar som är medlemmar av en partnergrupp som sprider händelser till varandra).

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

Denna monteringspunkt delar händelser med medlemmar av en partnergrupp. Händelserna montering och avmontering omedelbart under denna montering kommer spridas till andra monteringar som är medlemmar av partnergruppen. Spridning betyder här att samma montering eller avmontering automatiskt kommer ske under alla de andra monteringarna i partnergruppen. Omvänt kommer händelserna montering och avmontering som sker under partnermonteringar att spridas till denna montering.
Denna monteringspunkt är privat; den har inte någon partnergrupp. Händelserna montering och avmontering sprids inte in i eller ut från denna montering.
Händelserna montering och avmontering sprids in i denna montering från en delad (huvud)partnergrupp. Händelserna montering och avmontering under denna montering sprids inte till någon partner.
Observera att en monteringspunkt kan vara slav till en annan partnergrupp och på samma gång dela händelserna montering och avmontering med en partnergrupp som den är medlem i. (Mer exakt, en partnergrupp kan vara slav till en annan partnergrupp.)
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 monteringspunkter 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 monteringar och avmonteringar av monteringspunkter 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 monteringspunkt markeras som delad och antingen:

  • monteringspunkten replikeras när en ny monteringsnamnrymd skapas; eller
  • en ny bindmontering skapas från monteringspunkten.

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

En ny partnergrupp skapas också när en barnmonteringspunkt 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 monteringspunkten 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:

Denna monteringspunkt 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.)
Denna montering är en slav till den delade partnergruppen X.
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.
Detta är en obindbar montering.

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

Exempel på MS_SHARED och MS_PRIVATE

Anta att vi i en terminal i den initiala monteringsnamnrymden markerar en monteringspunkt 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äldramonteringspunkten 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 monteringspunkter. Dessa nya monteringspunkter 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 monteringspunkten /mntD spreds till sin partnermontering (i den initiala monteringsnamnrymden), men den nya monteringen som skapades under den privata monteringspunkten /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 på MS_SLAVE

Att skapa en monteringspunkt som en slav låter den ta emot händelserna montering och avmontering 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ändelserna montering och avmontering under slavmonteringen från att ha sidoeffekter i andra namnrymder.

Vi kan demonstrera effekten av slavförhållandet genom att först markera två monteringspunkter 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 där vi inspekterar monteringspunkterna:


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 monteringspunkterna 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 monteringspunkterna 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 monteringspunkt 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 monteringspunkterna 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 på MS_UNBINDABLE

Ett av de primära syftena med obindbara monteringar är att undvika problemet med en ”monteringspunktsexplosion” 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 monteringspunkter:


# 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 monteringspunkterna:


# 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.
In some cases useful info is found in syslog - try
dmesg | tail or so.

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 monteringspunkter ser vi att det inte har varit någon explosion av monteringspunkter 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 monteringspunkt. 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ällmonteringspunkten, B är målmonteringspunkten, a är en underkatalogsökväg under monteringspunkten A och b är en underkatalogsökväg under monteringspunkten B. Spridningstypen för den resulterande monteringspunkten, 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.txt 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ällmonteringspunkten, B är målmonteringspunkten och b är en underkatalogsökväg under monteringspunkten B. Spridningstypen för den resulterande monteringspunkten, 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.txt i kärnans källträd.

Monteringssemantik

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


mount enhet B/b

Här är B målmonteringspunkten 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 monteringspunkt:


unmount A

Här är A en monteringspunkt 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å monteringspunkter 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å monteringspunkterna 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).

VERSIONER

Monteringsnamnrymder förekom först i Linux 2.4.19.

ÖVERENSSTÄMMER MED

Namnrymder är en Linux-specifik funktion.

NOTERINGAR

Spridningstypen som tilldelas en ny monteringspunkt beror på spridningstypen hos föräldrakatalogen. Om monteringspunkten 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. Men se även NOTERINGAR.

Oaktat det faktum att standardsspridningstypen för nya monteringspunkter 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 monteringspunkterna i den nya namnrymden återställer unshare(1) (sedan util-linux version 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).

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

SE ÄVEN

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

Documentation/filesystems/sharedsubtree.txt i kärnans källkodsträd.

KOLOFON

Denna sida är del av version 4.16 av Linux man-pages-projektet. En beskrivning av projektet, information om hur man rapporterar fel och den senaste versionen av denna sida kan hittas på https://www.kernel.org/doc/man-pages/.

Ö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.

30 april 2018 Linux