Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Hej alla! Vi fortsätter att lansera nya streams för de kurser du redan har blivit kär i och nu har vi bråttom att meddela att vi startar en ny uppsättning kurser "Linux-administratör"som lanseras i slutet av april. En ny publikation kommer att dateras för detta evenemang. Med originalmaterialet kan du läs här.

Virtuella filsystem fungerar som en sorts magisk abstraktion som gör att Linux-filosofin kan säga att "allt är en fil."

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Vad är ett filsystem? Baserat på orden från en av de första bidragsgivarna och författarna till Linux Roberta Lava, "Ett filsystem är en hierarkisk lagring av data sammansatt enligt en specifik struktur." Hur som helst, denna definition är lika väl lämpad för VFAT (Virtual File Allocation Table), Git och Cassandra (NoSQL-databas). Så vad exakt definierar en sådan sak som ett "filsystem"?

Grunderna i filsystemet

Linuxkärnan har vissa krav för en enhet som kan betraktas som ett filsystem. Den måste implementera metoderna open(), read() и write() för beständiga objekt som har namn. Ur en objektorienterad synvinkel programmering, definierar kärnan ett generiskt filsystem som ett abstrakt gränssnitt, och dessa tre stora funktioner anses vara "virtuella" och har ingen konkret definition. Följaktligen kallas standardfilsystemimplementeringen ett virtuellt filsystem (VFS).

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Om vi ​​kan öppna, läsa och skriva till en entitet, så anses den enheten vara en fil, som vi kan se från exemplet i konsolen ovan.
VFS-fenomenet understryker bara den Unix-liknande observationen att "allt är en fil". Tänk så konstigt att det där lilla /dev/console-exemplet ovan visar hur konsolen faktiskt fungerar. Bilden visar en interaktiv Bash-session. Om du skickar en sträng till konsolen (virtuell konsolenhet) visas den på en virtuell skärm. VFS har andra, ännu märkligare egenskaper. Det låter dig till exempel söka efter det.

Bekanta system som ext4, NFS och /proc har tre viktiga funktioner i en C-datastruktur som kallas file_operations. Dessutom utökar och omdefinierar vissa filsystem VFS-funktionalitet på ett välbekant objektorienterat sätt. Som Robert Love påpekar tillåter VFS-abstraktionen Linux-användare att nonchalant kopiera filer till eller från tredje parts operativsystem eller abstrakta enheter som rör utan att oroa sig för deras interna dataformat. På användarsidan (användarutrymmet), med hjälp av ett systemanrop, kan en process kopiera från en fil till kärndatastrukturer med metoden read() ett filsystem och använd sedan metoden write () ett annat filsystem för datautmatning.

Funktionsdefinitionerna som hör till bas-VFS-typerna finns i filerna fs/*.c kärnans källkod, medan underkataloger fs/ innehåller vissa filsystem. Kärnan innehåller även entiteter som t.ex cgroups, /dev и tmpfs, som krävs under uppstartsprocessen och därför definieras i kärnans underkatalog init/. Lägg märke till att cgroups, /dev и tmpfs kalla inte de "tre stora" funktionerna file_operations, men direkt läsa och skriva till minnet.
Diagrammet nedan visar hur användarutrymmet kommer åt de olika typerna av filsystem som vanligtvis är monterade på Linux-system. Strukturer visas inte pipes, dmesg и POSIX clocks, som också implementerar strukturen file_operations, nås via VFS-lagret.

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

VFS är ett "omslagslager" mellan systemanrop och implementeringar av vissa file_operationssåsom ext4 и procfs. Funktioner file_operations kan interagera med antingen drivrutiner eller minnesåtkomstenheter. tmpfs, devtmpfs и cgroups Använd inte file_operations, men direkt åtkomst till minnet.
Förekomsten av VFS ger en möjlighet att återanvända kod, eftersom de grundläggande metoderna förknippade med filsystem inte behöver implementeras på nytt av varje typ av filsystem. Återanvändning av kod är en vanlig praxis bland mjukvaruingenjörer! Däremot om den återanvändbara koden innehåller allvarliga misstag, alla implementeringar som ärver vanliga metoder lider av dem.

/tmp: Enkelt tips

Ett enkelt sätt att upptäcka att VFS finns på ett system är att skriva mount | grep -v sd | grep -v :/, som visar alla monterade (mounted) filsystem som inte är diskresidenta och icke-NFS, vilket är sant på de flesta datorer. En av de listade fästena (mounts) VFS kommer utan tvekan /tmp, höger?

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Alla känner till den förvaringen / tmp på ett fysiskt medium - galenskap! Källa.

Varför är det oönskat att lagra /tmp på fysiska medier? Eftersom filerna i /tmp är tillfälliga och lagringsenheter är långsammare än minnet där tmpfs skapas. Dessutom är fysiska medier mer mottagliga för att bäras när de skrivs över än minne. Slutligen kan filer i /tmp innehålla känslig information, så att få dem att försvinna vid varje omstart är en viktig funktion.

Tyvärr skapar vissa installationsskript för Linuxdistribution /tmp på lagringsenheten som standard. Misströsta inte om detta hände ditt system också. Följ några enkla instruktioner med Arch Wikiför att fixa detta, och var medveten om att minnet som allokerats för tmpfs blir otillgänglig för andra ändamål. Med andra ord, ett system med en gigantisk tmpfs och stora filer på kan få slut på minne och krascha. Ett annat tips: medan du redigerar en fil /etc/fstab, kom ihåg att det måste sluta med en ny rad, annars kommer ditt system inte att starta.

/proc och /sys

förutom /tmp, VFS (virtuella filsystem) som är mest bekanta för Linux-användare /proc и /sys. (/dev finns i delat minne och inte har file_operations). Varför dessa två komponenter? Låt oss titta på den här frågan.

procfs skapar en ögonblicksbild av kärnan och processerna den övervakar för userspace. I /proc kärnan skriver ut information om vad den har tillgängligt, såsom avbrott, virtuellt minne och schemaläggaren. Förutom, /proc/sys är platsen där parametrarna konfigurerats med kommandot sysctl, tillgänglig för userspace. Status och statistik för enskilda processer visas i kataloger /proc/.

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Här /proc/meminfo är en tom fil som ändå innehåller värdefull information.

beteende /proc filer visar hur olika VFS-diskfilsystem kan vara. Å ena sidan, /proc/meminfo innehålla information som kan ses med kommandot free. Å andra sidan är det tomt! Hur fungerar det? Situationen påminner om den berömda artikeln med titeln Finns månen när ingen tittar på den? Verklighet och kvantteori"skriven av Cornell University fysikprofessor David Mermin 1985. Faktum är att kärnan samlar in minnesstatistik när en begäran görs till /proc, och faktiskt i filer /proc det finns ingenting när ingen tittar. Som sagt Mermin, "Fundamental kvantdoktrin säger att mätning i allmänhet inte avslöjar ett redan existerande värde på den egendom som mäts." (Och betrakta frågan om månen som läxa!)
Till synes tomhet procfs vettigt eftersom informationen där är dynamisk. En lite annorlunda situation med sysfs. Låt oss jämföra hur många filer som är minst en byte i storlek /proc och /sys.

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Procfs har en fil, nämligen den exporterade kärnkonfigurationen, vilket är ett undantag eftersom den bara behöver genereras en gång per uppstart. Å andra sidan, i /sys det finns många större filer, varav många tar upp en hel sida i minnet. Vanligtvis filer sysfs innehålla exakt en siffra eller rad, till skillnad från tabeller med information som erhålls från att läsa filer som t.ex /proc/meminfo.

Mål sysfs - tillhandahålla läs/skrivegenskaper för vad kärnan anropar «kobjects» i användarutrymmet. Det enda målet kobjects är referensräkning: när den sista referensen till ett kobjekt tas bort kommer systemet att återställa resurserna som är associerade med det. Ändå, /sys utgör de flesta av de kända "stabil ABI för användarutrymme" kärna, som ingen någonsin kan, under några omständigheter "ha sönder". Detta betyder inte att filer i sysfs är statiska, vilket skulle vara inkonsekvent med referensräkning av instabila objekt.
Kärnans stabila ABI begränsar vad som kan dyka upp i /sys, inte vad som faktiskt är närvarande vid det specifika ögonblicket. Att lista filbehörigheter i sysfs ger insikt i hur konfigurerbara inställningar för enheter, moduler, filsystem etc. kan konfigureras eller läsas. Den logiska slutsatsen är att procfs också är en del av kärnans stabila ABI, även om detta inte uttryckligen anges i dokumentation.

Virtuella filsystem i Linux: varför behövs de och hur fungerar de? Del 1

Filer in sysfs beskriv en särskild egenskap för varje enhet och kan vara läsbar, skrivbar eller båda. "0" i filen betyder att SSD:n inte kan tas bort.

Låt oss börja den andra delen av översättningen med hur man övervakar VFS med hjälp av verktygen eBPF och hemlig kopia, och nu väntar vi på dina kommentarer och bjuder dig traditionellt att öppet webbseminarium, som kommer att hållas av vår lärare den 9 april - Vladimir Drozdetsky.

Källa: will.com

Lägg en kommentar