.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 2016, 2019, 2021 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mount_namespaces 7 "3 maj 2023" "Linux man\-pages 6.05.01" .SH NAMN mount_namespaces — översikt över Linux monteringsnamnrymder .SH BESKRIVNING För en översikt över namnrymder, se \fBnamespaces\fP(7). .PP 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. .PP Vyerna som ges av filerna \fI/proc/\fPpid\fI/mounts\fP, \fI/proc/\fPpid\fI/mountinfo\fP och \fI/proc/\fPpid\fI/mountstats\fP (som alla beskrivs i \fBproc\fP(5)) motsvarar monteringsnamnrymden i vilken processen med PID \fIpid\fP bor. (Alla processerna som bor i samma monteringsnamnrymd kommer se samma vy i dessa filer.) .PP En ny monteringsnamnrymd skapas genom att använda antingen \fBclone\fP(2) eller \fBunshare\fP(2) med flaggan \fBCLONE_NEWNS\fP. När en ny monteringsnamnrymd skapas initieras dess monteringslista enligt följande: .IP \[bu] 3 Om namnrymden skapas med \fBclone\fP(2) är monteringslistan för barnets namnrymd en kopia av monteringslistan i föräldraprocessens monteringsnamnrymd. .IP \[bu] Om namnrymden skapas med \fBunshare\fP(2) är monteringslistan för den nya namnrymden en kopia av monteringslistan i anroparens tidigare monteringsnamnrymd. .PP .\" Senare ändringar av monteringslistan (\fBmount\fP(2) och \fBumount\fP(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). .SH "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 \fIhändelserna\fP \fBmount\fP(2) och \fBumount\fP(2) mellan namnrymder (eller, mer exakt, mellan monteringar som är medlemmar av en \fIpartnergrupp\fP som sprider händelser till varandra). .PP Varje montering markeras (via \fBmount\fP(2)) som att ha en av följande \fIspridningstyper\fP: .TP \fBMS_SHARED\fP Denna montering delar händelser med medlemmar av en partnergrupp. Händelserna \fBmount\fP(2) och \fBumount\fP(2) omedelbart under denna montering kommer spridas till andra monteringar som är medlemmar av partnergruppen. \fISpridning\fP betyder här att samma \fBmount\fP(2) eller \fBumount\fP(2) automatiskt kommer ske under alla de andra monteringarna i partnergruppen. Omvänt kommer händelserna \fBmount\fP(2) och \fBumount\fP(2) som sker under partnermonteringar att spridas till denna montering. .TP \fBMS_PRIVATE\fP Denna montering är privat; den har inte någon partnergrupp. Händelserna \fBmount\fP(2) och \fBumount\fP(2) sprids inte in i eller ut från denna montering. .TP \fBMS_SLAVE\fP Händelserna \fBmount\fP(2) och \fBumount\fP(2) sprids in i denna montering från en delad (huvud)partnergrupp. Händelserna \fBmount\fP(2) och \fBumount\fP(2) under denna montering sprids inte till någon partner. .IP Observera att en montering kan vara slav till en annan partnergrupp och på samma gång dela händelserna \fBmount\fP(2) och \fBumount\fP(2) med en partnergrupp som den är medlem i. (Mer exakt, en partnergrupp kan vara slav till en annan partnergrupp.) .TP \fBMS_UNBINDABLE\fP Detta är som en privat montering, och dessutom kan denna montering inte bindmonteras. Försök att bindmontera denna montering (\fBmount\fP(2) med flaggan \fBMS_BIND\fP) kommer att misslyckas. .IP När en rekursiv bindningsmontering (\fBmount\fP(2) med flaggorna \fBMS_BIND\fP och \fBMS_REC\fP) 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. .PP För en diskussion om spridningstypen tilldelad till en ny montering, se NOTERINGAR. .PP 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). .PP Observera att en monterings spridningstyp avgör huruvida \fBmount\fP(2) och \fBumount\fP(2) av monteringar \fIomedelbart under\fP 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 \fIföräldern\fP till monteringen. .PP Medlemmar läggs till i en \fIpartnergrupp\fP när en montering markeras som delad och antingen: .IP (a) 5 monteringen replikeras när en ny monteringsnamnrymd skapas; eller .IP (b) en ny bindmontering skapas från monteringen. .PP I båda dessa fall går den nya monteringen med i partnergruppen som den befintliga monteringen är medlem i. .PP 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. .PP 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). .PP Spridningstypen för monteringen i en monteringsnamnrymd kan upptäckas via de ”valfria fälten” som visas i \fI/proc/\fPpid\fI/mountinfo\fP. (Se \fBproc\fP(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: .TP \fIshared:X\fP Denna montering delas i partnergruppen \fIX\fP. 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.) .TP \fImaster:X\fP Denna montering är en slav till den delade partnergruppen \fIX\fP. .TP \fIpropagate_from:X\fP (från Linux 2.6.26) .\" commit 97e7e0f71d6d948c25f11f0a33878d9356d9579e Denna montering är en slav och tar emot spridningar från den delade partnergruppen \fIX\fP. Denna tagg kommer alltid förekomma tillsammans med en tagg \fImaster:X\fP. Här är \fIX\fP den närmaste dominanta partnergruppen under processens rotkatalog. Om \fIX\fP är det omedelbara huvudet av monteringen, eller om det inte finns någon dominant partnergrupp under samma rot, då finns bara fältet \fImaster:X\fP och inte fältet \fIpropagate_from:X\fP. För fler detaljer, se nedan. .TP \fIunbindable\fP Detta är en obindbar montering. .PP Om ingen av ovanstående flaggor finns, då är detta en privat montering. .SS "Exempel på 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 \fI/proc/self/mountinfo\fP: .PP .in +4n .EX sh1# \fBmount \-\-make\-shared /mntD\fP sh1# \fBmount \-\-make\-private /mntP\fP sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 77 61 8:17 / /mntD rw,relatime shared:1 83 61 8:15 / /mntP rw,relatime .EE .in .PP Av utdata från \fI/proc/self/mountinfo\fP ser vi att \fI/mntD\fP är en delad montering i partnergrupp 1, och att \fI/mntP\fP 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 \fI/mntD\fP och \fI/mntP\fP är rotkatalogen, \fI/\fP, vilken är monterad privat: .PP .in +4n .EX sh1# \fBcat /proc/self/mountinfo | awk \[aq]$1 == 61\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 61 0 8:2 / / rw,relatime .EE .in .PP I en andra terminal skapar vi en ny monteringsnamnrymd där vi kör ett andra skal och inspekterar monteringarna: .PP .in +4n .EX $ \fBPS1=\[aq]sh2# \[aq] sudo unshare \-m \-\-propagation unchanged sh\fP sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 222 145 8:17 / /mntD rw,relatime shared:1 225 145 8:15 / /mntP rw,relatime .EE .in .PP .\" Since util-linux 2.27 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 \fI\-\-propagation\~unchanged\fP förhindrar att \fBunshare\fP(1) markerar alla monteringar som privata när den skapar en ny monteringsnamnrymd, vilket den gör som standard.) .PP I den andra terminalen skapar vi sedan undermonteringar under vardera av \fI/mntD\fP och \fI/mntP\fP och inspekterar uppsättningen: .PP .in +4n .EX sh2# \fBmkdir /mntD/a\fP sh2# \fBmount /dev/sdb6 /mntD/a\fP sh2# \fBmkdir /mntP/b\fP sh2# \fBmount /dev/sdb7 /mntP/b\fP sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP Från ovanstående kan man se att \fI/mntD/a\fP skapades som delad (ärvde denna inställning från sin föräldramontering) och \fI/mntP/b\fP skapades som en privat montering. .PP 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 \fI/mntD\fP spreds till sin partnermontering (i den initiala monteringsnamnrymden), men den nya monteringen som skapades under den privata monteringen \fI/mntP\fP spreds inte: .PP .in +4n .EX sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .\" .SS "Exempel på MS_SLAVE" Att skapa en montering som slav låter den ta emot händelser \fBmount\fP(2) och \fBumount\fP(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 \fBmount\fP(2) och \fBumount\fP(2) under slavmonteringen från att ha sidoeffekter i andra namnrymder. .PP Vi kan demonstrera effekten av slavförhållandet genom att först markera två monteringar som delade i den initiala monteringsnamnrymden: .PP .in +4n .EX sh1# \fBmount \-\-make\-shared /mntX\fP sh1# \fBmount \-\-make\-shared /mntY\fP sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 132 83 8:23 / /mntX rw,relatime shared:1 133 83 8:22 / /mntY rw,relatime shared:2 .EE .in .PP I en andra terminal skapar vi en ny monteringsnamnrymd och inspekterar monteringarna: .PP .in +4n .EX sh2# \fBunshare \-m \-\-propagation unchanged sh\fP sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 168 167 8:23 / /mntX rw,relatime shared:1 169 167 8:22 / /mntY rw,relatime shared:2 .EE .in .PP I den nya monteringsnamnrymden markerar vi sedan en av monteringarna som en slav: .PP .in +4n .EX sh2# \fBmount \-\-make\-slave /mntY\fP sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 168 167 8:23 / /mntX rw,relatime shared:1 169 167 8:22 / /mntY rw,relatime master:2 .EE .in .PP Från ovanstående utdata ser vi att \fI/mntY\fP nu är en slavmontering som tar emot spridningshändelser från den delade partnergruppen med ID:t 2. .PP Fortfarande i den nya namnrymden skapar vi undermonteringar under var och en av \fI/mntX\fP och \fI/mntY\fP: .PP .in +4n .EX sh2# \fBmkdir /mntX/a\fP sh2# \fBmount /dev/sda3 /mntX/a\fP sh2# \fBmkdir /mntY/b\fP sh2# \fBmount /dev/sda5 /mntY/b\fP .EE .in .PP När vi granskar tillstånden hos monteringarna i den nya monteringsnamnrymden ser vi att \fI/mntX/a\fP skapades som en ny delad montering (ärvde inställningen "shared" från sin föräldramontering) och \fI/mntY/b\fP skapades som en privat montering: .PP .in +4n .EX sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP Tillbaka i den första terminalen (i den initiala monteringsnamnrymden) ser vi att monteringen \fI/mntX/a\fP spreds till partnern (den delade \fI/mntX\fP), men att monteringen \fI/mntY/b\fP inte spreds: .PP .in +4n .EX sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP Nu skapar vi en ny montering under \fI/mntY\fP i det första skalet: .PP .in +4n .EX sh1# \fBmkdir /mntY/c\fP sh1# \fBmount /dev/sda1 /mntY/c\fP sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP 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): .PP .in +4n .EX sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .\" .SS "Exempel på 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. .PP Anta att vi har ett system med följande monteringar: .PP .in +4n .EX # \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP /dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY .EE .in .PP 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: .PP .in +4n .EX # \fBmount \-\-rbind / /home/cecilia/\fP # \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP /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 .EE .in .PP När vi upprepar denna åtgärd för den andra användaren börjar vi se explosionsproblemet: .PP .in +4n .EX # \fBmount \-\-rbind / /home/henry\fP # \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP /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 .EE .in .PP Under \fI/home/henry\fP har vi inte bara rekursivt lagt till monteringarna \fI/mntX\fP och \fI/mntY\fP, utan även de rekursiva monteringarna av dessa kataloger under \fI/home/cecilia\fP 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: .PP .in +4n .EX # \fBmount \-\-rbind / /home/otto\fP # \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP /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 .EE .in .PP 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: .PP .in +4n .EX # \fBmount \-\-rbind \-\-make\-unbindable / /home/cecilia\fP .EE .in .PP Före vi går vidare visar vi att obindbara monteringar verkligen är obindbara: .PP .in +4n .EX # \fBmkdir /mntZ\fP # \fBmount \-\-bind /home/cecilia /mntZ\fP 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. .EE .in .PP Nu skapar vi obindbara rekursiva bindmonteringar för de andra två användarna: .PP .in +4n .EX # \fBmount \-\-rbind \-\-make\-unbindable / /home/henry\fP # \fBmount \-\-rbind \-\-make\-unbindable / /home/otto\fP .EE .in .PP 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: .PP .in +4n .EX # \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP /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 .EE .in .\" .SS Spridningstypsövergångar Följande tabell visar effekten tillämpning av en ny spridningstyp (d.v.s., \fImount\~\-\-make\-xxxx\fP) 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”. .TS lb2 lb2 lb2 lb2 lb1 lb | l l l l l. 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 .TE .sp 1 Observera följande detaljer om tabellen: .IP [1] 4 Om en delad montering är den enda monteringen i sin partnergrupp görs den automatiskt privat om den görs till en slav. .IP [2] .\" Att göra en odelad montering till slav har ingen effekt på monteringen. .SS "Bindsemantik (MS_BIND)" Anta att följande kommando utförs: .PP .in +4n .EX mount \-\-bind A/a B/b .EE .in .PP Här är \fIA\fP källmonteringen, \fIB\fP är målmonteringen, \fIa\fP är en underkatalogsökväg under monteringspunkten \fIA\fP och \fIb\fP är en underkatalogsökväg under monteringspunkten \fIB\fP. Spridningstypen för den resulterande monteringen, \fIB/b\fP, beror på spridningstyperna för monteringarna \fIA\fP och \fIB\fP, och sammanfattas i följande tabell. .PP .TS lb2 lb1 lb2 lb2 lb2 lb0 lb2 lb1 lb2 lb2 lb2 lb0 lb lb | l l l l l. källa(A) delad privat slav obind _ mål(B) delad delad delad slav+delad otillåten odelad delad privat slav otillåten .TE .sp 1 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.) .PP .\" För vidare detaljer, se \fIDocumentation/filesystems/sharedsubtree.rst\fP i kärnans källträd. .SS "Flyttsemantik (MS_MOVE)" Anta att följande kommando utförs: .PP .in +4n .EX mount \-\-move A B/b .EE .in .PP Här är \fIA\fP källmonteringen, \fIB\fP är målmonteringen och \fIb\fP är en underkatalogsökväg under monteringspunkten \fIB\fP. Spridningstypen för den resulterande monteringen, \fIB/b\fP, beror på spridningstyperna för monteringarna \fIA\fP och \fIB\fP, och sammanfattas i följande tabell. .PP .TS lb2 lb1 lb2 lb2 lb2 lb0 lb2 lb1 lb2 lb2 lb2 lb0 lb lb | l l l l l. källa(A) delad privat slav obind _ mål(B) delad delad delad slav+delad otillåten odelad delad privat slav obindbar .TE .sp 1 Observera: att flytta en montering som bor under en delad montering är inte tillåtet. .PP .\" För vidare detaljer, se \fIDocumentation/filesystems/sharedsubtree.rst\fP i kärnans källträd. .SS Monteringssemantik Anta att vi använder följande kommando för att skapa en montering: .PP .in +4n .EX mount enhet B/b .EE .in .PP .\" Här är \fIB\fP målmonteringen och \fIb\fP är en underkatalogsökväg under monteringspunkten \fIB\fP. Spridningstypen för den resulterande monteringen, \fIB/b\fP, följer samma regler som för en bindmontering där spridningstypen för källmonteringen alltid anses vara privat. .SS Avmonteringssemantik Anta att vi använder följande kommando för att riva ner en montering: .PP .in +4n .EX umount A .EE .in .PP .\" Här är \fIA\fP en montering på \fIB/b\fP, där \fIB\fP är föräldramonteringen och \fIb\fP är en underkatalogsökväg under monteringspunkten \fIB\fP. Om \fBB\fP är delad, då avmonteras alla senast monterade monteringar vid \fIb\fP på monteringar som tar emot spridningar från monteringen \fIB\fP och inte har undermonteringar under sig. .SS "Taggen propagate_from i /proc/ pid /mountinfo" Taggen \fIpropagate_from:X\fP visas i de valfria fälten av en post i \fI/proc/\fPpid\fI/mountinfo\fP 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. .PP I följande exempel skapar vi först en tvålänks huvud\-slav\-kedja mellan monteringarna \fI/mnt\fP, \fI/tmp/etc\fP och \fI/mnt/tmp/etc\fP. Sedan används kommandot \fBchroot\fP(1) för att göra monteringspunkten \fI/tmp/etc\fP onåbar från rotkatalogen, vilket skapar en situation där huvudet för \fI/mnt/tmp/etc\fP inte är nåbart från den (nya) rotkatalogen för processen. .PP Först bindmonterar vi rotkatalogen på \fI/mnt\fP och sedan bindmonterar vi \fI/proc\fP på \fI/mnt/proc\fP så att efter en senare \fBchroot\fP(1) filsystemet \fBproc\fP(5) fortsätter att vara synligt på rätt plats i den chroot:ade miljön. .PP .in +4n .EX # \fBmkdir \-p /mnt/proc\fP # \fBmount \-\-bind / /mnt\fP # \fBmount \-\-bind /proc /mnt/proc\fP .EE .in .PP Därefter ser vi till att monteringen \fI/mnt\fP är en delad montering i den nya partnergruppen (utan någon partner): .PP .in +4n .EX # \fBmount \-\-make\-private /mnt\fP # Isolera från eventuell tidigare partnergrupp # \fBmount \-\-make\-shared /mnt\fP # \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 239 61 8:2 / /mnt ... shared:102 248 239 0:4 / /mnt/proc ... shared:5 .EE .in .PP Därefter bindmonterar vi \fI/mnt/etc\fP på \fI/tmp/etc\fP: .PP .in +4n .EX # \fBmkdir \-p /tmp/etc\fP # \fBmount \-\-bind /mnt/etc /tmp/etc\fP # \fBcat /proc/self/mountinfo | egrep \[aq]/mnt|/tmp/\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 239 61 8:2 / /mnt ... shared:102 248 239 0:4 / /mnt/proc ... shared:5 267 40 8:2 /etc /tmp/etc ... shared:102 .EE .in .PP Från början är dessa två monteringar i samma partnergrupp, men sedan gör vi \fI/tmp/etc\fP till en slav till \fI/mnt/etc\fP, och därefter gör vi även \fI/tmp/etc\fP delad, så att den kan sprida händelser till nästa slav i kedjan: .PP .in +4n .EX # \fBmount \-\-make\-slave /tmp/etc\fP # \fBmount \-\-make\-shared /tmp/etc\fP # \fBcat /proc/self/mountinfo | egrep \[aq]/mnt|/tmp/\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP Därefter bindmonterar vi \fI/tmp/etc\fP på \fI/mnt/tmp/etc\fP. Återigen är de två monteringarna initialt i samma partnergrupp, men vi gör sedan \fI/mnt/tmp/etc\fP till en slav till \fI/tmp/etc\fP: .PP .in +4n .EX # \fBmkdir \-p /mnt/tmp/etc\fP # \fBmount \-\-bind /tmp/etc /mnt/tmp/etc\fP # \fBmount \-\-make\-slave /mnt/tmp/etc\fP # \fBcat /proc/self/mountinfo | egrep \[aq]/mnt|/tmp/\[aq] | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP Från det ovanstående ser vi att \fI/mnt\fP är huvud till slaven \fI/tmp/etc\fP, vilken i sin tur är huvud till slaven \fI/mnt/tmp/etc\fP. .PP Därefter gör vi \fBchroot\fP(1) till katalogen \fI/mnt\fP, vilket medför att monteringen med ID 267 blir onåbar från den (nya) rotkatalogen: .PP .in +4n .EX # \fBchroot /mnt\fP .EE .in .PP När vi sedan undersöker tillståndet för monteringarna inuti den chroot:ade miljön ser vi följande: .PP .in +4n .EX # \fBcat /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .PP .\" 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 \fIpropagate_from\fP, 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 \fI/mnt\fP före \fBchroot\fP(1) gjordes). .SH STANDARDER Linux. .SH HISTORIK .\" Linux 2.4.19. .SH 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 \fBMS_SHARED\fP, då är spridningstypen för den nya monteringen också \fBMS_SHARED\fP. Annars är spridningstypen för den nya monteringen \fBMS_PRIVATE\fP. .PP Oaktat det faktum att standardsspridningstypen för nya monteringar i många fall är \fBMS_PRIVATE\fP så är \fBMS_SHARED\fP typiskt mer användbart. Av detta skäl monterar \fBsystemd\fP(1) automatiskt om alla monteringar som \fBMS_SHARED\fP vid systemstart. På de flesta moderna system är alltså standardspridningstypen i praktiken \fBMS_SHARED\fP. .PP Eftersom att när man använder \fBunshare\fP(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 \fBunshare\fP(1) (sedan \fIutil\-linux\fP 2.27) i sin tur stegen som utfördes av \fBsystemd\fP(1), genom att göra alla monteringar privata i den nya namnrymden. Det vill säga, \fBunshare\fP(1) utför motsvarande följande i den nya monteringsnamnrymden: .PP .in +4n .EX mount \-\-make\-rprivate / .EE .in .PP För att förhindra detta kan man använda flaggan \fI\-\-propagation\~unchanged\fP till \fBunshare\fP(1). .PP Ett program som skapar en ny monteringsnamnrymd direkt med \fBclone\fP(2) eller \fBunshare\fP(2) kan vilja förhindra spridning av monteringshändelser till andra monteringsnamnrymder (så som \fBunshare\fP(1) gör). Detta kan göras genom att ändra spridningstypen för monteringar i den nya namnrymden till antingen \fBMS_SLAVE\fP eller \fBMS_PRIVATE\fP med ett anrop som det följande: .PP .in +4n .EX mount(NULL, "/", MS_SLAVE | MS_REC, NULL); .EE .in .PP .\" .\" ============================================================ .\" För en diskussion om spridningstyper när monteringar flyttas (\fBMS_MOVE\fP) och när bindmonteringar skapas (\fBMS_BIND\fP), se \fIDocumentation/filesystems/sharedsubtree.rst\fP. .SS "Begränsningar för monteringsnamnrymder" Observera följande punkter med avseende på monteringsnamnrymder: .IP [1] 4 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 \fImindre privilegierad\fP. .IP [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. .IP [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 \fBunshare\fP(2) \fBCLONE_NEWNS\fP 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.) .IP I detta sammanhang betyder ”kan inte separeras” att monteringarna låses så att de inte kan avmonteras individuellt. Betrakta följande exempel: .IP .in +4n .EX $ \fBsudo sh\fP # \fBmount \-\-bind /dev/null /etc/shadow\fP # \fBcat /etc/shadow\fP # Ger ingen utdata .EE .in .IP De ovanstående stegen, utförda i en mer privilegierad monteringsnamnrymd, har skapat en bindmontering som döljer innehållet av skugglösenordsfilen, \fI/etc/shadow\fP. Av säkerhetsskäl skall det inte vara möjligt att göra \fBumount\fP(2) av den monteringen i en mindre privilegierad monteringsnamnrymd, eftersom det skulle avslöja innehållet i \fI/etc/shadow\fP. .IP 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 \fBumount\fP(2) av monteringen så som visas av följande steg: .IP .in +4n .EX # \fBunshare \-\-user \-\-map\-root\-user \-\-mount \e\fP \fBstrace \-o /tmp/log \e\fP \fBumount /etc/shadow\fP umount: /etc/shadow: inte monterad. # \fBgrep \[aq]\[ha]umount\[aq] /tmp/log\fP umount2("/etc/shadow", 0) = \-1 EINVAL (Ogiltigt argument) .EE .in .IP Felmeddelandet från \fBmount\fP(8) är lite förvirrande, men utdata från \fBstrace\fP(1) avslöjar att det underliggande systemanropet \fBumount2\fP(2) misslyckades med felet \fBEINVAL\fP, vilket är det fel som kärnan returnerar för att indikera att monteringen är låst. .IP 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: .IP .in +4n .EX # \fBecho \[aq]aaaaa\[aq] > /tmp/a\fP # Fil att montera på /etc/shadow # \fBunshare \-\-user \-\-map\-root\-user \-\-mount \e\fP \fBsh \-c \[aq]mount \-\-bind /tmp/a /etc/shadow; cat /etc/shadow\[aq]\fP aaaaa # \fBumount /etc/shadow\fP .EE .in .IP Det sista kommandot \fBumount\fP(8) ovan, vilket utförs i den initiala monteringsnamnrymden, gör att den ursprungliga filen \fI/etc/shadow\fP återigen är synlig i den namnrymden. .IP [4] Som en uppföljning av punkt [3], observera att det är möjligt att göra \fBumount\fP(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. .IP Först skapar vi nya användar\- och monteringsnamnrymder med \fBunshare\fP(1). I den nya monteringsnamnrymden sätts spridningstypen för alla monteringar till privat. Vi skapar sedan en delad bindmontering på \fI/mnt\fP, och en liten hierarki av monteringar nedanför den monteringen. .IP .in +4n .EX $ \fBPS1=\[aq]nr1# \[aq] sudo unshare \-\-user \-\-map\-root\-user \e\fP \fB\-\-mount \-\-propagation private bash\fP nr1# \fBecho $$\fP # Vi behöver PID:en för detta skal senare 778501 nr1# \fBmount \-\-make\-shared \-\-bind /mnt /mnt\fP nr1# \fBmkdir /mnt/x\fP nr1# \fBmount \-\-make\-private \-t tmpfs none /mnt/x\fP nr1# \fBmkdir /mnt/x/y\fP nr1# \fBmount \-\-make\-private \-t tmpfs none /mnt/x/y\fP nr1# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .IP 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å \fI/mnt\fP. .IP .in +4n .EX nr1# \fBPS1=\[aq]nr2# \[aq] unshare \-\-user \-\-map\-root\-user \e\fP \fB\-\-mount \-\-propagation unchanged bash\fP nr2# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .IP Att notera i ovanstående utdata är att spridningstypen för monteringen \fI/mnt\fP har reducerats till slav, så som förklarades i punkt [2]. Detta betyder att undermonteringshändelser kommer spridas från huvudets \fI/mnt\fP i ”nr1”, men spridning kommer inte ske i den omvända riktningen. .IP Från ett separat terminalfönster använder vi sedan \fBnsenter\fP(1) för att gå in i monterings\- och användarnamnrymderna som motsvarar ”nr1”. I det terminalfönstret kan vi rekursivt bindmontera \fI/mnt/x\fP på platsen \fI/mnt/ppp\fP. .IP .in +4n .EX $ \fBPS1=\[aq]nr3# \[aq] sudo nsenter \-t 778501 \-\-user \-\-mount\fP nr3# \fBmount \-\-rbind \-\-make\-private /mnt/x /mnt/ppp\fP nr3# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .IP Eftersom spridningstypen hos föräldramonteringen, \fI/mnt\fP, var delad spred den rekursiva bindmonteringen ett litet underträd av monteringar under slavmonteringen \fI/mnt\fP in i ”nr2”, vilket kan verifieras genom att köra följande kommando i den skalsessionen: .IP .in +4n .EX nr2# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP 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 .EE .in .IP Fastän det inte är möjligt att göra \fBumount\fP(2) av en del av det spridda underträdet (\fI/mnt/ppp/y\fP) i ”nr2” är det möjligt att göra \fBumount\fP(2) av hela underträdet som visas med följande kommandon: .IP .in +4n .EX nr2# \fBumount /mnt/ppp/y\fP umount: /mnt/ppp/y: inte monterad. nr2# \fBumount \-l /mnt/ppp | sed \[aq]s/ \- .*//\[aq]\fP # Lyckas … nr2# \fBgrep /mnt /proc/self/mountinfo\fP 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 .EE .in .IP [5] .\" commit 9566d6742852c527bf5af38af5cbb878dad75705 .\" Author: Eric W. Biederman .\" Date: Mon Jul 28 17:26:07 2014 -0700 .\" .\" mnt: Correct permission checks in do_remount .\" Flagginställningarna av \fBMS_RDONLY\fP, \fBMS_NOSUID\fP, \fBMS_NOEXEC\fP och ”atime\-flaggorna” (\fBMS_NOATIME\fP, \fBMS_NODIRATIME\fP, \fBMS_RELATIME\fP) till \fBmount\fP(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. .IP 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. .IP .in +4n .EX $ \fBsudo mkdir /mnt/dir\fP $ \fBsudo mount \-\-bind \-o ro /some/path /mnt/dir\fP $ \fBsudo unshare \-\-user \-\-map\-root\-user \-\-mount \e\fP \fBmount \-o remount,rw /mnt/dir\fP mount: /mnt/dir: åtkomst nekas. .EE .in .IP [6] .\" (As of 3.18-rc1 (in Al Viro's 2014-08-30 vfs.git#for-next tree)) 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 (\fBrmdir\fP(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. .IP .\" mtk: The change was in Linux 3.18, I think, with this commit: .\" commit 8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe .\" Author: Eric W. Biederman .\" Date: Tue Oct 1 18:33:48 2013 -0700 .\" .\" vfs: Lazily remove mounts on unlinked files and directories. 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 \fBEBUSY\fP. 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). .SH EXEMPEL Se \fBpivot_root\fP(2). .SH "SE ÄVEN" \fBunshare\fP(1), \fBclone\fP(2), \fBmount\fP(2), \fBmount_setattr\fP(2), \fBpivot_root\fP(2), \fBsetns\fP(2), \fBumount\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBnamespaces\fP(7), \fBuser_namespaces\fP(7), \fBfindmnt\fP(8), \fBmount\fP(8), \fBpam_namespace\fP(8), \fBpivot_root\fP(8), \fBumount\fP(8) .PP \fIDocumentation/filesystems/sharedsubtree.rst\fP i kärnans källkodsträd. .PP .SH ÖVERSÄTTNING Den svenska översättningen av denna manualsida skapades av Göran Uddeborg . .PP Denna översättning är fri dokumentation; läs .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE eller senare för upphovsrättsvillkor. Vi tar INGET ANSVAR. .PP Om du hittar fel i översättningen av denna manualsida, skicka ett mail till .MT Tp-sv@listor.tp-sv.se .ME .