mount_namespaces(7) Miscellaneous Information Manual mount_namespaces(7) NAMN mount_namespaces -- oversikt over Linux monteringsnamnrymder BESKRIVNING For en oversikt over namnrymder, se namespaces(7). Monteringsnamnrymder ger isolering av listan over monteringar som ses av processerna i varje namnrymdsinstans. Alltsa, 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 anvanda antingen clone(2) eller unshare(2) med flaggan CLONE_NEWNS. Nar en ny monteringsnamnrymd skapas initieras dess monteringslista enligt foljande: o Om namnrymden skapas med clone(2) ar monteringslistan for barnets namnrymd en kopia av monteringslistan i foraldraprocessens monteringsnamnrymd. o Om namnrymden skapas med unshare(2) ar monteringslistan for den nya namnrymden en kopia av monteringslistan i anroparens tidigare monteringsnamnrymd. Senare andringar av monteringslistan (mount(2) och umount(2)) i endera monteringsnamnrymden kommer inte (som standard) att paverka monteringslistan som ses i den andra namnrymden (men se foljande diskussion om delade undertrad). DELADE UNDERTRAD Efter implementationen av monteringsnamnrymder var klar visade erfarenheterna att isoleringen som de gav var, i nagra fall, for stor. Till exempel, for att gora en nyss laddad optisk disk tillganglig i alla monteringsnamnrymder kravdes en monteringsatgard i varje namnrymd. For detta anvandningsfall, och andra, introducerades funktionen med delade undertrad i Linux 2.6.15. Denna funktion tillater automatisk, kontrollerad spridning av handelserna mount(2) och umount(2) mellan namnrymder (eller, mer exakt, mellan monteringar som ar medlemmar av en partnergrupp som sprider handelser till varandra). Varje montering markeras (via mount(2)) som att ha en av foljande spridningstyper: MS_SHARED Denna montering delar handelser med medlemmar av en partnergrupp. Handelserna mount(2) och umount(2) omedelbart under denna montering kommer spridas till andra monteringar som ar medlemmar av partnergruppen. Spridning betyder har att samma mount(2) eller umount(2) automatiskt kommer ske under alla de andra monteringarna i partnergruppen. Omvant kommer handelserna mount(2) och umount(2) som sker under partnermonteringar att spridas till denna montering. MS_PRIVATE Denna montering ar privat; den har inte nagon partnergrupp. Handelserna mount(2) och umount(2) sprids inte in i eller ut fran denna montering. MS_SLAVE Handelserna mount(2) och umount(2) sprids in i denna montering fran en delad (huvud)partnergrupp. Handelserna mount(2) och umount(2) under denna montering sprids inte till nagon partner. Observera att en montering kan vara slav till en annan partnergrupp och pa samma gang dela handelserna mount(2) och umount(2) med en partnergrupp som den ar medlem i. (Mer exakt, en partnergrupp kan vara slav till en annan partnergrupp.) MS_UNBINDABLE Detta ar som en privat montering, och dessutom kan denna montering inte bindmonteras. Forsok att bindmontera denna montering (mount(2) med flaggan MS_BIND) kommer att misslyckas. Nar en rekursiv bindningsmontering (mount(2) med flaggorna MS_BIND och MS_REC) utfors pa ett katalogundertrad ansas automatiskt eventuella bindningsmonteringar inuti undertradet (d.v.s., replikeras inte) nar det undertradet replikeras for att skapa ett malundertrad. For en diskussion om spridningstypen tilldelad till en ny montering, se NOTERINGAR. Spridningstypen ar en installning per monteringspunkt; nagra monteringar kan markeras som delade (med varje delad montering en medlem av en distinkt partnergrupp), medan andra ar privata (eller slavar eller obindbara). Observera att en monterings spridningstyp avgor huruvida mount(2) och umount(2) av monteringar omedelbart under monteringen sprids. Alltsa, spridningstypen paverkar inte spridningen av handelser for barnbarn och mer avlagsna avkommemonteringar. Vad som hander om monteringen sjalv avmonteras avgors av spridningstypen som galler for foraldern till monteringen. Medlemmar laggs till i en partnergrupp nar en montering markeras som delad och antingen: (a) monteringen replikeras nar en ny monteringsnamnrymd skapas; eller (b) en ny bindmontering skapas fran monteringen. I bada dessa fall gar den nya monteringen med i partnergruppen som den befintliga monteringen ar medlem i. En ny partnergrupp skapas ocksa nar en barnmontering skapas under en befintlig montering som ar markerad som delad. I detta fall markeras aven barnmonteringen som delad och den resulterande partnergruppen bestar av alla monteringar som replikeras under partner till foraldramonteringarna. En montering upphor att vara medlem i en partnergrupp nar antingen monteringen uttryckligen avmonteras, eller nar monteringen implicit avmonteras for att en monteringsnamnrymd tas bort (for att den inte har nagra fler medlemsprocesser). Spridningstypen for monteringen i en monteringsnamnrymd kan upptackas via de "valfria falten" som visas i /proc/pid/mountinfo. (Se proc(5) for detaljer om denna fil.) Foljande taggar kan forekomma i de valfria falten for en post i den filen: shared:X Denna montering delas i partnergruppen X. Varje partnergrupp har ett unikt ID som automatiskt genereras av karnan, och alla monteringar i samma partnergrupp kommer visa samma ID. (Dessa ID:n tilldelas med borjan fran vardet 1, och kan ateranvandas nar en partnergrupp upphor att ha nagra medlemmar.) master:X Denna montering ar en slav till den delade partnergruppen X. propagate_from:X (fran Linux 2.6.26) Denna montering ar en slav och tar emot spridningar fran den delade partnergruppen X. Denna tagg kommer alltid forekomma tillsammans med en tagg master:X. Har ar X den narmaste dominanta partnergruppen under processens rotkatalog. Om X ar det omedelbara huvudet av monteringen, eller om det inte finns nagon dominant partnergrupp under samma rot, da finns bara faltet master:X och inte faltet propagate_from:X. For fler detaljer, se nedan. unbindable Detta ar en obindbar montering. Om ingen av ovanstaende flaggor finns, da ar detta en privat montering. Exempel pa 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 fran /proc/self/mountinfo ser vi att /mntD ar en delad montering i partnergrupp 1, och att /mntP inte har nagra valfria taggar, vilket indikerar att det ar en privat montering. De forsta tva falten i varje post i denna fil ar det unika ID:t for denna montering, och monterings-ID for foraldramonteringen. Vi kan vidare inspektera denna fil for att se att foraldramonteringen till /mntD och /mntP ar rotkatalogen, /, vilken ar 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 dar vi kor 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 behaller samma spridningstyper, men har unika monterings-ID:n. (Flaggan --propagation unchanged forhindrar att unshare(1) markerar alla monteringar som privata nar den skapar en ny monteringsnamnrymd, vilket den gor som standard.) I den andra terminalen skapar vi sedan undermonteringar under vardera av /mntD och /mntP och inspekterar uppsattningen: 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 Fran ovanstaende kan man se att /mntD/a skapades som delad (arvde denna installning fran sin foraldramontering) och /mntP/b skapades som en privat montering. Om vi atergar till den forsta terminalen och inspekterar uppsattningen 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 pa MS_SLAVE Att skapa en montering som slav later den ta emot handelser mount(2) och umount(2) som sprids fran den delade huvudpartnergruppen, samtidigt som den forhindras fran att sprida handelser till huvudet. Detta ar anvandbart om vi vill (exempelvis) ta emot en monteringshandelse nar en optisk skiva monteras i den delade huvudpartnergruppen (i en annan monteringsnamnrymd), men vill forhindra handelser mount(2) och umount(2) under slavmonteringen fran att ha sidoeffekter i andra namnrymder. Vi kan demonstrera effekten av slavforhallandet genom att forst markera tva 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 Fran ovanstaende utdata ser vi att /mntY nu ar en slavmontering som tar emot spridningshandelser fran 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 Nar vi granskar tillstanden hos monteringarna i den nya monteringsnamnrymden ser vi att /mntX/a skapades som en ny delad montering (arvde installningen "shared" fran sin foraldramontering) 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 forsta 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 forsta 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 Nar vi undersoker monteringarna i den andra monteringsnamnrymden ser vi att i detta fall har den nya monteringen spritts till slavmonteringen, och att monteringen sjalv ar 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 pa MS_UNBINDABLE Ett av de primara syftena med obindbara monteringar ar att undvika problemet med en "monteringsexplosion" nar man upprepat utfor bindmonteringar av ett undertrad pa en hogre niva till en lagre nivas montering. Problemet illustreras av foljande skalsession. Anta att vi har ett system med foljande monteringar: # mount | awk '{print $1, $2, $3}' /dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY Anta vidare att vi onskar bindningsmontera rotkatalogen rekursivt under flera anvandares hemkataloger. Vi gor detta for den forsta anvandaren 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 Nar vi upprepar denna atgard for den andra anvandaren borjar 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 aven de rekursiva monteringarna av dessa kataloger under /home/cecilia som skapades i forestaende steg. Vid upprepning av steget for en tredje anvandare blir det uppenbart att explosionen ar 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 ovanstaende scenario kan losas genom att gora varje ny montering obindbar. Effekten av att gora detta ar att rekursiva monteringar av rotkatalogen inte kommer replikera de obindbara monteringarna. Vi gor en sadan montering for den forsta anvandaren: # mount --rbind --make-unbindable / /home/cecilia Fore vi gar vidare visar vi att obindbara monteringar verkligen ar obindbara: # mkdir /mntZ # mount --bind /home/cecilia /mntZ mount: /mntZ: fel filsystemstyp, felaktig flagga, felaktigt superblock pa /home/cecilia, teckentabell eller hjalpprogram saknas, eller annat fel. dmesg(1) may have more information after failed mount system call. Nu skapar vi obindbara rekursiva bindmonteringar for de andra tva anvandarna: # 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 nagon explosion av monteringar eftersom de obindbara monteringarna inte replikerades under varje anvandares 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 Spridningstypsovergangar Foljande tabell visar effekten tillampning av en ny spridningstyp (d.v.s., mount --make-xxxx) har pa den befintliga spridningstypen hos en montering. Raderna motsvarar de befintliga spridningstyperna, och kolumnerna ar den nya spridningsinstallningen. Av utrymmesskal forkortas "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 foljande detaljer om tabellen: [1] Om en delad montering ar den enda monteringen i sin partnergrupp gors den automatiskt privat om den gors till en slav. [2] Att gora en odelad montering till slav har ingen effekt pa monteringen. Bindsemantik (MS_BIND) Anta att foljande kommando utfors: mount --bind A/a B/b Har ar A kallmonteringen, B ar malmonteringen, a ar en underkatalogsokvag under monteringspunkten A och b ar en underkatalogsokvag under monteringspunkten B. Spridningstypen for den resulterande monteringen, B/b, beror pa spridningstyperna for monteringarna A och B, och sammanfattas i foljande tabell. kalla(A) |delad privat slav obind ----------------+-------------------------------------------- mal(B) delad |delad delad slav+delad otillaten odelad|delad privat slav otillaten Observera att en rekursiv bindning av ett undertrad foljer samma semantik som vid en bindningsatgard pa varje montering i undertradet. (Obindbara monteringar ansas automatiskt fran malmonteringspunkten.) For vidare detaljer, se Documentation/filesystems/sharedsubtree.rst i karnans kalltrad. Flyttsemantik (MS_MOVE) Anta att foljande kommando utfors: mount --move A B/b Har ar A kallmonteringen, B ar malmonteringen och b ar en underkatalogsokvag under monteringspunkten B. Spridningstypen for den resulterande monteringen, B/b, beror pa spridningstyperna for monteringarna A och B, och sammanfattas i foljande tabell. kalla(A) |delad privat slav obind ----------------+-------------------------------------------- mal(B) delad |delad delad slav+delad otillaten odelad|delad privat slav obindbar Observera: att flytta en montering som bor under en delad montering ar inte tillatet. For vidare detaljer, se Documentation/filesystems/sharedsubtree.rst i karnans kalltrad. Monteringssemantik Anta att vi anvander foljande kommando for att skapa en montering: mount enhet B/b Har ar B malmonteringen och b ar en underkatalogsokvag under monteringspunkten B. Spridningstypen for den resulterande monteringen, B/b, foljer samma regler som for en bindmontering dar spridningstypen for kallmonteringen alltid anses vara privat. Avmonteringssemantik Anta att vi anvander foljande kommando for att riva ner en montering: umount A Har ar A en montering pa B/b, dar B ar foraldramonteringen och b ar en underkatalogsokvag under monteringspunkten B. Om B ar delad, da avmonteras alla senast monterade monteringar vid b pa monteringar som tar emot spridningar fran monteringen B och inte har undermonteringar under sig. Taggen propagate_from i /proc/ pid /mountinfo Taggen propagate_from:X visas i de valfria falten av en post i /proc/pid/mountinfo i fall da en process inte kan se en slavs omedelbara huvud (d.v.s., sokvagen for huvudet kan inte nas fran filsystemets rotkatalog) och darfor inte kan avgora spridningskedjan mellan monteringarna den kan se. I foljande exempel skapar vi forst en tvalanks huvud-slav-kedja mellan monteringarna /mnt, /tmp/etc och /mnt/tmp/etc. Sedan anvands kommandot chroot(1) for att gora monteringspunkten /tmp/etc onabar fran rotkatalogen, vilket skapar en situation dar huvudet for /mnt/tmp/etc inte ar nabart fran den (nya) rotkatalogen for processen. Forst bindmonterar vi rotkatalogen pa /mnt och sedan bindmonterar vi /proc pa /mnt/proc sa att efter en senare chroot(1) filsystemet proc(5) fortsatter att vara synligt pa ratt plats i den chroot:ade miljon. # mkdir -p /mnt/proc # mount --bind / /mnt # mount --bind /proc /mnt/proc Darefter ser vi till att monteringen /mnt ar en delad montering i den nya partnergruppen (utan nagon partner): # mount --make-private /mnt # Isolera fran 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 Darefter bindmonterar vi /mnt/etc pa /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 Fran borjan ar dessa tva monteringar i samma partnergrupp, men sedan gor vi /tmp/etc till en slav till /mnt/etc, och darefter gor vi aven /tmp/etc delad, sa att den kan sprida handelser till nasta 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 Darefter bindmonterar vi /tmp/etc pa /mnt/tmp/etc. Aterigen ar de tva monteringarna initialt i samma partnergrupp, men vi gor 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 Fran det ovanstaende ser vi att /mnt ar huvud till slaven /tmp/etc, vilken i sin tur ar huvud till slaven /mnt/tmp/etc. Darefter gor vi chroot(1) till katalogen /mnt, vilket medfor att monteringen med ID 267 blir onabar fran den (nya) rotkatalogen: # chroot /mnt Nar vi sedan undersoker tillstandet for monteringarna inuti den chroot:ade miljon ser vi foljande: # 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 ar en slav vars huvud ar partnergrupp 105. Monteringspunkten for det huvudet ar onabar, och darfor visas en tagg propagate_from, vilket indikerar att den narmaste dominanta partnergruppen (d.v.s., den narmaste nabara monteringen i slavkedjan) ar partnergruppen med ID 102 (vilket motsvarar monteringspunkten /mnt fore chroot(1) gjordes). STANDARDER Linux. HISTORIK Linux 2.4.19. NOTERINGAR Spridningstypen som tilldelas en ny montering beror pa spridningstypen hos foraldramonteringen. Om monteringen har en foralder (d.v.s., det ar en annan monteringspunkt an roten) och spridningstypen hos foraldern ar MS_SHARED, da ar spridningstypen for den nya monteringen ocksa MS_SHARED. Annars ar spridningstypen for den nya monteringen MS_PRIVATE. Oaktat det faktum att standardsspridningstypen for nya monteringar i manga fall ar MS_PRIVATE sa ar MS_SHARED typiskt mer anvandbart. Av detta skal monterar systemd(1) automatiskt om alla monteringar som MS_SHARED vid systemstart. Pa de flesta moderna system ar alltsa standardspridningstypen i praktiken MS_SHARED. Eftersom att nar man anvander unshare(1) for att skapa en ny monteringsnamnrymd sa ar malet vanligtvis att ge fullstandig isolering av monteringarna i den nya namnrymden aterstaller unshare(1) (sedan util-linux 2.27) i sin tur stegen som utfordes av systemd(1), genom att gora alla monteringar privata i den nya namnrymden. Det vill saga, unshare(1) utfor motsvarande foljande i den nya monteringsnamnrymden: mount --make-rprivate / For att forhindra detta kan man anvanda flaggan --propagation unchanged till unshare(1). Ett program som skapar en ny monteringsnamnrymd direkt med clone(2) eller unshare(2) kan vilja forhindra spridning av monteringshandelser till andra monteringsnamnrymder (sa som unshare(1) gor). Detta kan goras genom att andra spridningstypen for monteringar i den nya namnrymden till antingen MS_SLAVE eller MS_PRIVATE med ett anrop som det foljande: mount(NULL, "/", MS_SLAVE | MS_REC, NULL); For en diskussion om spridningstyper nar monteringar flyttas (MS_MOVE) och nar bindmonteringar skapas (MS_BIND), se Documentation/filesystems/sharedsubtree.rst. Begransningar for monteringsnamnrymder Observera foljande punkter med avseende pa monteringsnamnrymder: [1] Varje monteringsnamnrymd har en anvandarnamnrymd som agare. Som forklaras ovan, nar en ny monteringsnamnrymd skapas ar dess monteringslista initierad som en kopia av monteringslistan fran en annan monteringsnamnrymd. Om den nya namnrymden och den namnrymd som monteringslistan kopierades ifran ags av olika anvandarnamnrymder, da betraktas den nya monteringsnamnrymden som mindre privilegierad. [2] Nar en mindre privilegierad monteringsnamnrymd skapas reduceras delade monteringar till slavmonteringar. Detta sakerstaller att avbildningar som utfors i mindre privilegierade monteringsnamnrymder inte kommer spridas till mer privilegierade monteringsnamnrymder. [3] Monteringar som kommer som en enda enhet fran en mer privilegierad monteringsnamnrymd lases ihop och kan inte separeras i en mindre privilegierad monteringsnamnrymd. (Atgarden unshare(2) CLONE_NEWNS for med sig alla monteringarna fran 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 lases sa att de inte kan avmonteras individuellt. Betrakta foljande exempel: $ sudo sh # mount --bind /dev/null /etc/shadow # cat /etc/shadow # Ger ingen utdata De ovanstaende stegen, utforda i en mer privilegierad monteringsnamnrymd, har skapat en bindmontering som doljer innehallet av skugglosenordsfilen, /etc/shadow. Av sakerhetsskal skall det inte vara mojligt att gora umount(2) av den monteringen i en mindre privilegierad monteringsnamnrymd, eftersom det skulle avsloja innehallet i /etc/shadow. Anta att vi nu skapar en ny monteringsnamnrymd som ags av en ny anvandarnamnrymd. Den nya monteringsnamnrymden kommer arva kopior av alla monteringarna fran den foregaende monteringsnamnrymden. Dock kommer dessa monteringar vara lasta eftersom den nya monteringsnamnrymden ar mindre privilegierad. Som en konsekvens misslyckas ett forsok att gora umount(2) av monteringen sa som visas av foljande 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 fran mount(8) ar lite forvirrande, men utdata fran strace(1) avslojar att det underliggande systemanropet umount2(2) misslyckades med felet EINVAL, vilket ar det fel som karnan returnerar for att indikera att monteringen ar last. Observera dock att det ar mojligt att stacka upp (och ta bort fran stacken) en montering ovanpa en av de arvda lasta monteringarna i en mindre privilegierad monteringsnamnrymd: # echo 'aaaaa' > /tmp/a # Fil att montera pa /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 utfors i den initiala monteringsnamnrymden, gor att den ursprungliga filen /etc/shadow aterigen ar synlig i den namnrymden. [4] Som en uppfoljning av punkt [3], observera att det ar mojligt att gora umount(2) av ett helt undertrad av monteringar som spreds som en enhet in i en mindre privilegierad monteringsnamnrymd, sasom illustreras i foljande exempel. Forst skapar vi nya anvandar- och monteringsnamnrymder med unshare(1). I den nya monteringsnamnrymden satts spridningstypen for alla monteringar till privat. Vi skapar sedan en delad bindmontering pa /mnt, och en liten hierarki av monteringar nedanfor den monteringen. $ PS1='nr1# ' sudo unshare --user --map-root-user \ --mount --propagation private bash nr1# echo $$ # Vi behover PID:en for 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 anvandarnamnrymd och en ny (mindre privilegierad) monteringsnamnrymd och kontrollerar tillstandet hos den spridda monteringen med rot pa /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 ovanstaende utdata ar att spridningstypen for monteringen /mnt har reducerats till slav, sa som forklarades i punkt [2]. Detta betyder att undermonteringshandelser kommer spridas fran huvudets /mnt i "nr1", men spridning kommer inte ske i den omvanda riktningen. Fran ett separat terminalfonster anvander vi sedan nsenter(1) for att ga in i monterings- och anvandarnamnrymderna som motsvarar "nr1". I det terminalfonstret kan vi rekursivt bindmontera /mnt/x pa 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 foraldramonteringen, /mnt, var delad spred den rekursiva bindmonteringen ett litet undertrad av monteringar under slavmonteringen /mnt in i "nr2", vilket kan verifieras genom att kora foljande 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 Fastan det inte ar mojligt att gora umount(2) av en del av det spridda undertradet (/mnt/ppp/y) i "nr2" ar det mojligt att gora umount(2) av hela undertradet som visas med foljande 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] Flagginstallningarna av MS_RDONLY, MS_NOSUID, MS_NOEXEC och "atime-flaggorna" (MS_NOATIME, MS_NODIRATIME, MS_RELATIME) till mount(2) blir lasta nar de sprids fran en mer privilegierad till en mindre privilegierad monteringsnamnrymd, och kan inte andras i den mindre privilegierade monteringsnamnrymden. Denna punkt illustreras i foljande exempel dar vi, i en mer privilegierad monteringsnamnrymd, skapar en bindmontering som markeras som endast lasbar. Av sakerhetsskal skall det inte vara mojligt att gora monteringen skrivbar i en mindre privlegierad monteringsnamnrymd, och karnan 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: atkomst nekas. [6] En fil eller katalog som ar en monteringspunkt i en namnrymd som inte ar en monteringspunkt i en annan namnrymd gar att byta namn pa, ta bort lanken till eller tas bort (rmdir(2)) i monteringsnamnrymden i vilken den inte ar en monteringspunkt (under de vanliga rattighetskontrollerna). Som en konsekvens tas monteringspunkten bort i monteringsnamnrymden dar den var en monteringspunkt. Tidigare (fore Linux 3.18) resulterade forsok att ta bort lanken till, byta namn pa eller ta bort en fil eller katalog som var en monteringspunkt i en annan monteringsnamnrymd i felet EBUSY. Det beteendet hade tekniska problem att vidmakthallas (t.ex., for NFS) och mojliggjorde tjanstevagransattacker (DoS) mot mer privilegierade anvandare (d.v.s., forhindra enskilda filer fran att uppdateras genom att bindmontera ovanpa dem). EXEMPEL Se pivot_root(2). SE AVEN 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 karnans kallkodstrad. OVERSATTNING Den svenska oversattningen av denna manualsida skapades av Goran Uddeborg Denna oversattning ar fri dokumentation; las GNU General Public License Version 3 eller senare for upphovsrattsvillkor. Vi tar INGET ANSVAR. Om du hittar fel i oversattningen av denna manualsida, skicka ett mail till . Linux man-pages 6.06 31 oktober 2023 mount_namespaces(7)