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

Hej alla! Vi fortsÀtter att lansera nya flöden för de kurser ni redan Àlskar, och nu Àr vi glada att meddela att vi startar en ny kurs «Linuxadministratör», som börjar i slutet av april. I samband med detta kommer en ny publikation att publiceras. Den ursprungliga texten kan ni lÀsa hÀr.

Virtuella filsystem fungerar som en slags magisk abstraktion som gör att Linux-filosofin kan pÄstÄ 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 Robert Love, "Ett filsystem Àr ett hierarkiskt datalager som Àr organiserat enligt en viss struktur." Hur som helst passar denna definition lika bra för VFAT (Virtual File Allocation Table), Git och Cassandra (NoSQL-databasen). SÄ vad definierar ett begrepp som "filsystem"?

Grunderna för filsystemet

Linux-kÀrnan har vissa krav pÄ en entitet som kan betraktas som ett filsystem. Den mÄste implementera metoderna open(), read() och write() för permanenta objekt som har namn. Ur ett objektorienterat programmeringsperspektiv, definierar kÀrnan ett generiskt filsystem som en abstrakt grÀnssnitt, och dessa tre stora funktioner betraktas som "virtuella" och har ingen konkret definition. DÀrmed kallas standardimplementeringen av ett filsystem för 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, betraktas denna entitet som en fil, som vi ser i exemplet i konsolen ovan.
Fenomenet VFS betonar bara en observation som Àr karaktÀristisk för Unix-liknande system, som sÀger att "allt Àr en fil". TÀnk pÄ hur konstigt det Àr att det lilla exemplet ovan med /dev/console visar hur konsolen egentligen fungerar. Bilden visar en interaktiv Bash-session. Att skicka en rad till konsolen (virtuell konsolenhet) visar den pÄ den virtuella skÀrmen. VFS har andra, Ànnu mer mÀrkliga egenskaper. Till exempel möjliggör den att söka i dem.

De system som vi kÀnner till, sÄsom ext4, NFS och /proc har tre viktiga funktioner i C-strukturer som kallas file_operations. Dessutom utökar och ÄsidosÀtter vissa filsystem VFS-funktioner pÄ ett bekant objektorienterat sÀtt. Som Robert Love pÄpekar gör VFS-abstraktionen att Linux-anvÀndare utan bekymmer kan kopiera filer till eller frÄn andra operativsystem eller abstrakta entiteter som pipes, utan att behöva oroa sig för deras interna dataformat. FrÄn anvÀndarsidan kan en process via systemanrop kopiera frÄn en fil till kernelstrukturer med metoden read() frÄn ett filsystem, och sedan anvÀnda metoden write () frÄn ett annat filsystem för att skriva ut data.

Definitioner av funktioner som tillhör grundtyperna i VFS finns i filerna fs/*.c i kÀrnans kÀllkod, medan undermapparna fs/ innehÄller specifika filsystem. I kÀrnan finns Àven enheter sÄsom cgroups, /dev och tmpfs, som krÀvs under uppstartsprocessen och dÀrför definieras i kÀrnans undermapp init/. Observera att cgroups, /dev och tmpfs de inte anropar 'de stora tre' funktionerna file_operations, utan lÀser och skriver direkt till minnet.
I diagrammet nedan visas hur anvÀndarrummet interagerar med olika typer av filsystem som vanligtvis monteras i Linux-system. Konstruktioner sÄsom pipes, dmesg och POSIX-klockor, som ocksÄ implementerar strukturen, visas inte, och Ätkomsten sker genom VFS-lagret. file_operationsVFS Àr ett 'skal' mellan systemanrop och implementationer av specifika

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

procfs. file_operations, sÄsom ext4 och Funktionerkan interagera antingen med enhetsdrivrutiner eller med minnesÄtkomstenheter. file_operations devtmpfs tmpfs, anvÀnder inte och cgroups , utan adresserar minnet direkt. file_operationsExistensen av VFS möjliggör kodÄteranvÀndning, eftersom de grundlÀggande metoderna relaterade till filsystem inte behöver implementeras pÄ nytt av varje typ av filsystem. KodÄteranvÀndning Àr en allmÀnt anvÀnd praxis bland mjukvaruingenjörer! Men om den ÄteranvÀnda koden innehÄller
allvarliga buggar , drabbas alla implementationer som Àrver de gemensamma metoderna.Ett enkelt sÀtt att upptÀcka att VFS finns i systemet Àr att skriva

/tmp: ĐŸŃ€ĐŸŃŃ‚Đ°Ń ĐżĐŸĐŽŃĐșазĐșа

mount | grep -v sd | grep -v :/ , vilket visar alla monterade (mounted) filsystem som inte Àr residenta pÄ disken och inte Àr NFS, vilket gÀller för de flesta datorer. En av de listade monteringarna (mounts)) VFS, det kommer sÀkert att /tmp, eller hur?

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

Alla vet att lagring / tmp pÄ fysisk media Àr galenskap! KÀlla.

Varför Àr det oönskvÀrt att lagra /tmp pÄ fysisk media? För att filer i /tmp Àr temporÀra och lagringsenheter Àr lÄngsammare Àn minnet dÀr tmpfs skapas. Dessutom Àr fysiska medier mer utsatta för slitage vid omskrivning Àn minnet. Slutligen kan filer i /tmp innehÄlla konfidentiell information, sÄ deras försvinnande vid varje omstart Àr en inneboende funktion.

TyvÀrr skapar vissa installationsskript för Linux-distributioner /tmp pÄ lagringsenheten som standard. Oroa dig inte om detta har skett med ditt system. Följ nÄgra enkla instruktioner frÄn Arch Wiki, för att ÄtgÀrda detta, och kom ihÄg att minnet som tilldelas för tmpfs blir otillgÀngligt för andra ÀndamÄl. Med andra ord kan ett system med en enorm tmpfs och stora filer i den förbruka allt minne och krascha. Ett annat tips: nÀr du redigerar filen /etc/fstab, kom ihÄg att den ska sluta med en ny rad, annars kommer ditt system att misslyckas med att starta.

/proc Đž /sys

Förutom /tmp, VFS (virtuella filsystem) som Àr mest kÀnda för Linux-anvÀndare Àr /proc och /sys. (/dev belÀget i delat minne och har ingen file_operations). Varför just dessa tvÄ komponenter? LÄt oss förstÄ denna frÄga.

Funktioner skapar en ögonblicksbild av kÀrnans och de processer som den kontrollerar för userspace. I /proc kÀrnan ger information om vilka resurser den har tillgÄng till, till exempel avbrott, virtuell minne och schemalÀggare. Dessutom /proc/sys Àr det en plats dÀr instÀllningar, konfigurerade med kommandot sysctl, Àr tillgÀngliga för userspace. Status och statistik för individuella 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.

Beteendet /proc hos filer visar hur olika filsystem VFS kan vara. Å ena sidan /proc/meminfo innehĂ„ller information som kan ses med kommandot free. Å andra sidan Ă€r de tomma! Hur Ă€r det möjligt? Situationen pĂ„minner om den berömda artikeln med titeln «Finns mĂ„nen nĂ€r ingen ser pĂ„ den? Verklighet och kvantteori», skriven av fysikprofessor David Mermin vid Cornell University 1985. PoĂ€ngen Ă€r att kĂ€rnan samlar statistik över minnet nĂ€r en begĂ€ran görs. /proc, och i sjĂ€lva verket finns det ingenting i filerna /proc nĂ€r ingen tittar pĂ„ dem. Som Merlin, "Den grundlĂ€ggande kvantdoktrinen sĂ€ger att mĂ€tning i allmĂ€nhet inte avslöjar nĂ„got tidigare existerande vĂ€rde av den uppmĂ€tta egenskapen." (Och fundera över frĂ„gan om mĂ„nen som lĂ€xa!)
Den till synes tomma Funktioner har betydelse, eftersom informationen dÀr Àr dynamisk. En nÄgot annan situation Àr med sysfs. LÄt oss jÀmföra hur mÄnga filer som Àr minst en byte stora som finns i /proc och i /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, som Ă€r ett undantag eftersom den bara behöver genereras en gĂ„ng per boot. Å andra sidan innehĂ„ller /sys mĂ„nga mer omfattande filer, varav mĂ„nga tar upp en hel sida minne. Vanligtvis innehĂ„ller filer sysfs precis ett nummer eller en strĂ€ng, till skillnad frĂ„n informations tabeller som erhĂ„lls nĂ€r man lĂ€ser sĂ„dana filer som /proc/meminfo.

Syftet sysfs Àr att tillhandahÄlla egenskaper som kan lÀsas och skrivas av det som kÀrnan kallar "kobjects" i anvÀndarrummet. Den enda mÄlsÀttningen med kobjects Àr referensrÀkning: nÀr den sista referensen till en kobject tas bort kommer systemet att ÄterstÀllla resurserna kopplade till det. Trots detta /sys utgör en stor del av den berömda "stabila ABI för anvÀndarrum" i kÀrnan, som ingen nÄgonsin, under nÄgra omstÀndigheter kan "bryta".Detta innebÀr inte att filerna i sysfs Àr statiska, vilket skulle stÄ i kontrast till referensrÀkningen för instabila objekt.
Den stabila binĂ€ra applikationsgrĂ€nssnittet av kĂ€rnan (kernel’s stable ABI) begrĂ€nsar vad som kan dyka upp i /sys, snarare Ă€n vad som faktiskt finns dĂ€r vid den aktuella tidpunkten. En lista över filrĂ€ttigheter i sysfs ger en förstĂ„else för hur konfigurerbara enheter, moduler, filsystem osv. kan stĂ€llas in eller lĂ€sas. Vi kan dra den logiska slutsatsen att procfs ocksĂ„ Ă€r en del av den stabila ABI:n i kĂ€rnan, Ă€ven om detta inte anges tydligt i dokumentationen.

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

Filer i sysfs beskriver en specifik egenskap för varje entitet och kan vara lÀsbara, skrivbara eller bÄde och. "0" i filen indikerar att SSD:n inte kan tas bort.

Den andra delen av översĂ€ttningen börjar med hur man observerar VFS med hjĂ€lp av eBPF-verktyg och bcc, och nu ser vi fram emot era kommentarer och inbjuder traditionellt till öppen webbinarie, som redan den 9 april kommer att hĂ„llas av vĂ„r lĂ€rare — Vladimir Drozdetsky.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster