Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Sveiki visiem! Mēs turpinām uzsākt jaunas straumes kursiem, kurus jÅ«s jau esat iemÄ«lējuÅ”i, un tagad mēs steidzam paziņot, ka mēs sākam jaunu kursu komplektu "Linux administrators"kas sāks darboties aprīļa beigās. Par Å”o notikumu tiks datēta jauna publikācija. Izmantojot oriÄ£inālo materiālu, jÅ«s varat lasi Å”eit.

Virtuālās failu sistēmas kalpo kā sava veida maģiska abstrakcija, kas ļauj Linux filozofijā teikt, ka "viss ir fails".

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Kas ir failu sistēma? BalstÄ«ts uz viena no pirmajiem Linux lÄ«dzstrādniekiem un autoriem vārdiem Roberta Lava, "Failu sistēma ir hierarhiska datu krātuve, kas apkopota atbilstoÅ”i noteiktai struktÅ«rai." Lai kā arÄ« bÅ«tu, Ŕī definÄ«cija ir vienlÄ«dz labi piemērota VFAT (virtuālo failu pieŔķirÅ”anas tabulai), Git un Cassandra (NoSQL datu bāze). Tātad, kas tieÅ”i definē tādu lietu kā "failu sistēma"?

Failu sistēmas pamati

Linux kodolam ir noteiktas prasÄ«bas entÄ«tijai, ko var uzskatÄ«t par failu sistēmu. Tam ir jāīsteno metodes open(), read() Šø write() pastāvÄ«giem objektiem, kuriem ir nosaukumi. No objektorientētā viedokļa programmÄ“Å”ana, kodols definē vispārÄ«gu failu sistēmu kā abstraktu interfeisu, un Ŕīs trÄ«s lielās funkcijas tiek uzskatÄ«tas par "virtuālām" un tām nav konkrētas definÄ«cijas. AttiecÄ«gi noklusējuma failu sistēmas ievieÅ”ana tiek saukta par virtuālo failu sistēmu (VFS).

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Ja mēs varam atvērt, lasÄ«t un rakstÄ«t entÄ«tiju, Ŕī entÄ«tija tiek uzskatÄ«ta par failu, kā redzams no piemēra iepriekÅ” konsolē.
VFS fenomens tikai pasvÄ«tro Unix lÄ«dzÄ«gu novērojumu, ka "viss ir fails". Padomājiet, cik dÄ«vaini, ka Å”is mazais /dev/console piemērs parāda, kā konsole faktiski darbojas. Attēlā redzama interaktÄ«va Bash sesija. NosÅ«tot virkni uz konsoli (virtuālās konsoles ierÄ«ci), tā tiek parādÄ«ta virtuālā ekrānā. VFS ir citas, vēl dÄ«vainākas Ä«paŔības. Piemēram, tas ļauj meklēt pēc tas.

PazÄ«stamām sistēmām, piemēram, ext4, NFS un /proc, ir trÄ«s svarÄ«gas funkcijas C datu struktÅ«rā, ko sauc par file_operations. Turklāt noteiktas failu sistēmas paplaÅ”ina un no jauna definē VFS funkcionalitāti pazÄ«stamā objektorientētā veidā. Kā norāda Roberts Lovs, VFS abstrakcija ļauj Linux lietotājiem bezrÅ«pÄ«gi kopēt failus uz treÅ”o puÅ”u operētājsistēmām vai no tām vai abstraktām vienÄ«bām, piemēram, caurulēm, neuztraucoties par to iekŔējo datu formātu. Lietotāja pusē (lietotājvietā), izmantojot sistēmas izsaukumu, process var kopēt no faila uz kodola datu struktÅ«rām, izmantojot metodi read() vienu failu sistēmu un pēc tam izmantojiet metodi write () cita failu sistēma datu izvadÄ«Å”anai.

Funkciju definÄ«cijas, kas pieder pamata VFS tipiem, atrodas failos fs/*.c kodola pirmkods, bet apakÅ”direktoriji fs/ satur noteiktas failu sistēmas. Kodolā ir arÄ« tādas entÄ«tijas kā cgroups, /dev Šø tmpfs, kas ir nepiecieÅ”ami sāknÄ“Å”anas procesa laikā un tāpēc ir definēti kodola apakÅ”direktorijā init/. Ievērojiet to cgroups, /dev Šø tmpfs neizsauc "lielā trijnieka" funkcijas file_operations, bet tieÅ”i lasÄ«t un ierakstÄ«t atmiņā.
Tālāk redzamajā diagrammā parādÄ«ts, kā lietotāja telpa piekļūst dažāda veida failu sistēmām, kas parasti tiek uzstādÄ«tas Linux sistēmās. StruktÅ«ras nav parādÄ«tas pipes, dmesg Šø POSIX clocks, kas arÄ« Ä«steno struktÅ«ru file_operations, kuram var piekļūt, izmantojot VFS slāni.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

VFS ir "iesaiņojuma slānis" starp sistēmas izsaukumiem un noteiktu ievieÅ”anu file_operations, piemēram, ext4 Šø procfs. Funkcijas file_operations var mijiedarboties ar ierīču draiveriem vai atmiņas piekļuves ierÄ«cēm. tmpfs, devtmpfs Šø cgroups Nelietojiet file_operations, bet tieÅ”i piekļūstiet atmiņai.
VFS esamÄ«ba sniedz iespēju atkārtoti izmantot kodu, jo ar failu sistēmām saistÄ«tās pamatmetodes nav atkārtoti jāīsteno katram failu sistēmas tipam. Koda atkārtota izmantoÅ”ana ir izplatÄ«ta programmatÅ«ras inženieru prakse! Tomēr, ja atkārtoti lietojamais kods satur nopietnas kļūdas, no tām cieÅ” visas implementācijas, kas pārmanto parastās metodes.

/tmp: vienkārŔs padoms

VienkārÅ”s veids, kā noteikt, vai sistēmā ir VFS, ir rakstÄ«t mount | grep -v sd | grep -v :/, kurā tiks parādÄ«ti visi uzstādÄ«tie (mounted) failu sistēmas, kas nav diska rezidences un nav NFS, kas attiecas uz lielāko daļu datoru. Viens no uzskaitÄ«tajiem stiprinājumiem (mounts) VFS neapÅ”aubāmi bÅ«s /tmp, pa labi?

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Ikviens zina, ka uzglabāŔana / tmp uz fiziska nesēja - vājprāts! Avots.

Kāpēc nav vēlams uzglabāt /tmp fiziskajā datu nesējā? Tā kā faili iekŔā /tmp ir pagaidu, un atmiņas ierÄ«ces ir lēnākas nekā atmiņa, kurā tiek izveidots tmpfs. Turklāt fiziskie datu nesēji ir vairāk pakļauti nodilumam, ja tie tiek pārrakstÄ«ti, nekā atmiņa. Visbeidzot, faili mapē /tmp var saturēt sensitÄ«vu informāciju, tāpēc to pazuÅ”ana katrā atsāknÄ“Å”anas reizē ir bÅ«tiska funkcija.

Diemžēl daži Linux izplatÄ«Å”anas instalÄ“Å”anas skripti atmiņas ierÄ«cē pēc noklusējuma izveido /tmp. Neesiet izmisumā, ja tas notika arÄ« ar jÅ«su sistēmu. Izpildiet dažus vienkārÅ”us norādÄ«jumus ar Arch Wikilai to labotu, un ņemiet vērā, ka atmiņa ir pieŔķirta tmpfs kļūst nepieejama citiem mērÄ·iem. Citiem vārdiem sakot, sistēmai ar milzÄ«gu tmpfs un lieliem failiem tajā var pietrÅ«kt atmiņas un tā var izraisÄ«t avāriju. Vēl viens padoms: faila rediģēŔanas laikā /etc/fstab, atcerieties, ka tai jābeidzas ar jaunu rindiņu, pretējā gadÄ«jumā jÅ«su sistēma netiks sāknēta.

/proc un /sys

Turklāt /tmp, VFS (virtuālās failu sistēmas), kas ir vispazÄ«stamākās Linux lietotājiem /proc Šø /sys. (/dev atrodas koplietotajā atmiņā un nav file_operations). Kāpēc Ŕīs divas sastāvdaļas? ApskatÄ«sim Å”o jautājumu.

procfs izveido kodola un tā pārraudzÄ«to procesu momentuzņēmumu userspace. Uz /proc kodols izdrukā informāciju par to, kas tam ir pieejams, piemēram, pārtraukumi, virtuālā atmiņa un plānotājs. Turklāt, /proc/sys ir vieta, kur parametri konfigurēti ar komandu sysctl, pieejams userspace. AtseviŔķu procesu statuss un statistika tiek parādÄ«ta direktorijās /proc/.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Å eit /proc/meminfo ir tukÅ”s fails, kas tomēr satur vērtÄ«gu informāciju.

UzvedÄ«ba /proc faili parāda, cik dažādas var bÅ«t VFS diska failu sistēmas. No vienas puses, /proc/meminfo satur informāciju, ko var apskatÄ«t ar komandu free. No otras puses, tas ir tukÅ”s! Kā tas darbojas? Situācija atgādina slaveno rakstu ar nosaukumu Vai mēness pastāv, kad neviens uz to neskatās? Realitāte un kvantu teorija"sarakstÄ«jis Kornela universitātes fizikas profesors Deivids Mermins 1985. gadā. Fakts ir tāds, ka kodols apkopo atmiņas statistiku, kad tiek veikts pieprasÄ«jums /proc, un faktiski failos /proc nav nekā, kad neviens neskatās. Kā teikts Mermin, "Fundamentālā kvantu doktrÄ«na saka, ka mērÄ«jumi parasti neatklāj izmērāmā Ä«paÅ”uma jau esoÅ”u vērtÄ«bu." (Un uzskatiet jautājumu par mēnesi kā mājasdarbu!)
Å Ä·ietamais tukÅ”ums procfs ir jēga, jo informācija tur ir dinamiska. Nedaudz savādāka situācija ar sysfs. SalÄ«dzināsim, cik failos ir vismaz viens baits liels /proc un /sys.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Procfs ir viens fails, proti, eksportētā kodola konfigurācija, kas ir izņēmums, jo tas ir jāģenerē tikai vienu reizi sāknÄ“Å”anas laikā. No otras puses, iekŔā /sys ir daudz lielāku failu, no kuriem daudzi aizņem visu atmiņas lappusi. Parasti faili sysfs satur tieÅ”i vienu skaitli vai rindiņu, atŔķirÄ«bā no informācijas tabulām, kas iegÅ«tas, lasot failus, piemēram, /proc/meminfo.

mērÄ·is sysfs - nodroÅ”ināt kodola izsaukto lasÄ«Å”anas/rakstÄ«Å”anas rekvizÄ«tus Ā«kobjectsĀ» lietotāja telpā. VienÄ«gais mērÄ·is kobjects ir saiÅ”u skaitÄ«Å”ana: kad tiek noņemta pēdējā saite uz kobject, sistēma atjaunos ar to saistÄ«tos resursus. Tomēr, /sys veido lielāko daļu slaveno "Stable ABI for userspace" kodols, ko neviens nekad un nekādos apstākļos nevarēs "pārtraukums". Tas nenozÄ«mē, ka faili sysf ir statiski, kas bÅ«tu pretrunā ar nestabilu objektu atsauces skaitÄ«Å”anu.
Kodola stabilais ABI ierobežo to, kas var parādÄ«ties /sys, nevis to, kas patiesÄ«bā atrodas konkrētajā brÄ«dÄ«. Failu atļauju uzskaitÄ«Å”ana sistēmā sysf sniedz ieskatu par to, kā konfigurējami iestatÄ«jumi ierÄ«cēm, moduļiem, failu sistēmām utt. var konfigurēt vai lasÄ«t. LoÄ£isks secinājums ir tāds, ka procfs ir arÄ« daļa no kodola stabilā ABI, lai gan tas nav skaidri norādÄ«ts dokumentācija.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 1. daļa

Faili iekŔā sysfs aprakstiet vienu konkrētu rekvizÄ«tu katrai entÄ«tijai, un tas var bÅ«t lasāms, rakstāms vai abi. "0" failā nozÄ«mē, ka SSD nevar noņemt.

Sāksim otro tulkojuma daļu ar to, kā uzraudzīt VFS, izmantojot eBPF un bcc rīkus, un tagad mēs gaidām jūsu komentārus un tradicionāli aicinām jūs atklāts vebinārs, kuru mūsu skolotāja rīkos 9. aprīlī - Vladimirs Drozdeckis.

Avots: www.habr.com

Pievieno komentāru