Sveiki visi! Mes ir toliau pradedame naujus srautus jau pamėgtiems kursams ir dabar skubame pranešti, kad pradedame naują kursų rinkinį
Virtualios failų sistemos tarnauja kaip savotiška magiška abstrakcija, leidžianti Linux filosofijoje sakyti, kad „viskas yra failas“.
Kas yra failų sistema? Remiantis vieno iš pirmųjų Linux bendradarbių ir autorių žodžiais
Failų sistemos pagrindai
„Linux“ branduolys turi tam tikrus reikalavimus subjektui, kuris gali būti laikomas failų sistema. Ji turi įgyvendinti metodus open()
, read()
и write()
patvariems objektams, turintiems pavadinimus. Objektiniu požiūriu
Jei galime atidaryti, skaityti ir rašyti objektą, tada tas objektas laikomas failu, kaip matome iš aukščiau esančio pavyzdžio konsolėje.
VFS reiškinys tik pabrėžia Unix tipo pastebėjimą, kad „viskas yra failas“. Pagalvokite, kaip keista, kad aukščiau pateiktas mažas /dev/console pavyzdys parodo, kaip konsolė iš tikrųjų veikia. Nuotraukoje parodyta interaktyvi Bash sesija. Siunčiant eilutę į konsolę (virtualios konsolės įrenginį), ji rodoma virtualiame ekrane. VFS turi kitų, dar keistesnių savybių. Pavyzdžiui, tai leidžia ieškoti pagal
Pažįstamos sistemos, tokios kaip ext4, NFS ir /proc, turi tris svarbias funkcijas C duomenų struktūroje, vadinamoje read()
vieną failų sistemą ir tada naudokite metodą write ()
kita failų sistema duomenims išvesti.
Funkcijų apibrėžimai, priklausantys baziniams VFS tipams, yra failuose fs/
turi tam tikras failų sistemas. Šerdyje taip pat yra tokių subjektų kaip cgroups
, /dev
и tmpfs
, kurie reikalingi įkrovos procese ir todėl yra apibrėžti branduolio pakatalogyje init/
. Pastebėti, kad cgroups
, /dev
и tmpfs
nekvieskite „didžiųjų trijų“ funkcijų file_operations
, bet tiesiogiai skaityti ir įrašyti į atmintį.
Toliau pateiktoje diagramoje parodyta, kaip vartotojo erdvė pasiekia skirtingų tipų failų sistemas, paprastai montuojamas Linux sistemose. Konstrukcijos nerodomos pipes
, dmesg
и POSIX clocks
, kurios taip pat įgyvendina struktūrą file_operations
, pasiekiamas per VFS sluoksnį.
VFS yra „apvyniojimo sluoksnis“ tarp sistemos iškvietimų ir tam tikrų diegimų file_operations
Pavyzdžiui ext4
и procfs
. Funkcijos file_operations
gali sąveikauti su įrenginių tvarkyklėmis arba atminties prieigos įrenginiais. tmpfs
, devtmpfs
и cgroups
Nenaudokite file_operations
, bet tiesiogiai pasiekti atmintį.
VFS buvimas suteikia galimybę pakartotinai naudoti kodą, nes pagrindiniai metodai, susiję su failų sistemomis, neturi būti iš naujo įdiegti kiekvieno tipo failų sistemoje. Pakartotinis kodo naudojimas yra įprasta programinės įrangos inžinierių praktika! Tačiau jei daugkartinio naudojimo kode yra
/tmp: paprasta užuomina
Lengvas būdas aptikti, kad sistemoje yra VFS, yra įvesti tekstą mount | grep -v sd | grep -v :/
, kuriame bus rodomi visi sumontuoti (mounted
) failų sistemos, kurios nėra disko ir nėra NFS, o tai pasakytina apie daugumą kompiuterių. Vienas iš išvardytų laikiklių (mounts
) VFS neabejotinai /tmp
, tiesa?
Visi žino tą saugyklą / tmp
fizinėje terpėje – beprotybė!
Kodėl nepageidautina laikyti /tmp
fizinėje laikmenoje? Kadangi failai yra /tmp
yra laikini, o saugojimo įrenginiai yra lėtesni nei atmintis, kurioje sukuriamas tmpfs. Be to, fizinė laikmena yra labiau linkusi nusidėvėti, kai perrašoma, nei atmintis. Galiausiai /tmp failuose gali būti neskelbtinos informacijos, todėl būtina, kad jie išnyktų kiekvieną kartą paleidžiant iš naujo.
Deja, kai kurie Linux platinimo diegimo scenarijai pagal numatytuosius nustatymus sukuria /tmp saugojimo įrenginyje. Nenusiminkite, jei taip nutiko ir jūsų sistemai. Vykdykite keletą paprastų nurodymų su tmpfs
tampa neprieinamas kitiems tikslams. Kitaip tariant, sistemoje su milžinišku tmpfs ir dideliais failais gali pritrūkti atminties ir ji gali sugesti. Kitas patarimas: redaguojant failą /etc/fstab
, atminkite, kad ji turi baigtis nauja eilute, kitaip jūsų sistema nebus paleista.
/proc ir /sys
Be /tmp
, VFS (virtualios failų sistemos), kurios yra labiausiai žinomos Linux vartotojams /proc
и /sys
. (/dev
yra bendrojoje atmintyje ir neturi file_operations
). Kodėl šie du komponentai? Panagrinėkime šį klausimą.
procfs
sukuria branduolio ir jo stebimų procesų momentinę nuotrauką userspace
. Į /proc
branduolys spausdina informaciją apie tai, ką jis turi, pvz., pertraukimus, virtualiąją atmintį ir planuoklį. Be to, /proc/sys
yra vieta, kur parametrai sukonfigūruoti naudojant komandą sysctl
, galioja userspace
. Atskirų procesų būsena ir statistika rodomi kataloguose /proc/
.
Čia /proc/meminfo
yra tuščias failas, kuriame vis dėlto yra vertingos informacijos.
Elgesys /proc
failai parodo, kokios skirtingos gali būti VFS disko failų sistemos. Iš vienos pusės, /proc/meminfo
yra informacijos, kurią galima peržiūrėti naudojant komandą free
. Kita vertus, tuščia! Kaip tai veikia? Situacija primena garsųjį straipsnį pavadinimu /proc
, o iš tikrųjų failuose /proc
nieko nėra, kai niekas nemato. Kaip sakė
Atrodo tuštuma procfs
prasminga, nes ten esanti informacija yra dinamiška. Šiek tiek kitokia situacija su sysfs
. Palyginkime, kiek failų yra bent vieno baito dydžio /proc
ir /sys
.
Procfs
turi vieną failą, būtent eksportuotą branduolio konfigūraciją, kuri yra išimtis, nes ją reikia sugeneruoti tik vieną kartą per įkrovą. Kita vertus, į /sys
yra daug didesnių failų, kurių daugelis užima visą atminties puslapį. Paprastai failai sysfs
yra tiksliai vienas skaičius arba eilutė, skirtingai nei informacijos lentelėse, gautose skaitant failus, pvz., /proc/meminfo
.
Tikslas sysfs
- pateikti skaitymo / rašymo ypatybes, kurias iškviečia branduolys «kobjects»
vartotojo erdvėje. Vienintelis tikslas kobjects
yra nuorodų skaičiavimas: pašalinus paskutinę nuorodą į kobject, sistema atkurs su juo susijusius išteklius. Nepaisant to, /sys
sudaro didžiąją dalį žinomų
Stabili branduolio ABI riboja tai, kas gali būti rodoma /sys
, o ne tai, kas iš tikrųjų yra tuo konkrečiu momentu. Failų leidimų sąrašas sistemoje „sysf“ leidžia suprasti, kaip konfigūruojami įrenginių, modulių, failų sistemų ir kt. parametrai. galima konfigūruoti arba skaityti. Logiška išvada, kad procfs taip pat yra branduolio stabilios ABI dalis, nors tai nėra aiškiai nurodyta
Failai į sysfs
apibūdinkite vieną konkrečią kiekvieno objekto savybę ir gali būti skaitoma, įrašoma arba abi. „0“ faile reiškia, kad SSD negalima pašalinti.
Antrąją vertimo dalį pradėkime nuo to, kaip stebėti VFS naudojant eBPF ir bcc įrankius, o dabar laukiame jūsų komentarų ir tradiciškai kviečiame
Šaltinis: www.habr.com