Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Helo pawb! Rydym yn parhau i lansio ffrydiau newydd ar gyfer y cyrsiau rydych eisoes wedi syrthio mewn cariad â nhw a nawr rydym ar frys i gyhoeddi ein bod yn dechrau set newydd o gyrsiau "Gweinyddwr Linux"a fydd yn lansio ddiwedd mis Ebrill. Bydd cyhoeddiad newydd yn cael ei amseru i gyd-fynd â'r digwyddiad hwn. Gyda'r deunydd gwreiddiol darllenwch yma.

Mae systemau ffeiliau rhithwir yn fath o dynnu hudol sy'n caniatáu i athroniaeth Linux ddweud bod "popeth yn ffeil."

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Beth yw system ffeiliau? Yn seiliedig ar eiriau un o gyfranwyr ac awduron cyntaf Linux Roberta Lafa, "Mae system ffeiliau yn storfa hierarchaidd o ddata a gasglwyd yn ôl strwythur penodol." Boed hynny ag y gallai, mae'r diffiniad hwn yr un mor addas ar gyfer VFAT (Tabl Dyrannu Ffeiliau Rhithwir), Git a Cassandra (Cronfa ddata NoSQL). Felly beth yn union sy'n diffinio'r fath beth â "system ffeiliau"?

Hanfodion System Ffeil

Mae gan y cnewyllyn Linux ofynion penodol ar gyfer endid y gellir ei ystyried yn system ffeiliau. Rhaid iddo weithredu'r dulliau open(), read() и write() ar gyfer gwrthrychau parhaus sydd ag enwau. O safbwynt gwrthrych-ganolog rhaglennu, mae'r cnewyllyn yn diffinio system ffeiliau generig fel rhyngwyneb haniaethol, ac mae'r tair swyddogaeth fawr hyn yn cael eu hystyried yn "rhithwir" ac nid oes ganddynt ddiffiniad concrit. Yn unol â hynny, gelwir gweithrediad system ffeiliau rhagosodedig yn system ffeiliau rhithwir (VFS).

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Os gallwn agor, darllen ac ysgrifennu at endid, yna mae'r endid hwnnw'n cael ei ystyried yn ffeil, fel y gallwn weld o'r enghraifft yn y consol uchod.
Mae'r ffenomen VFS ond yn tanlinellu'r sylw tebyg i Unix bod "popeth yn ffeil". Meddyliwch pa mor rhyfedd bod yr enghraifft fach /dev/consol uchod yn dangos sut mae'r consol yn gweithio mewn gwirionedd. Mae'r llun yn dangos sesiwn Bash rhyngweithiol. Mae anfon llinyn i'r consol (dyfais consol rhithwir) yn ei ddangos ar sgrin rithwir. Mae gan VFS eiddo arall, hyd yn oed dieithryn. Er enghraifft, mae'n caniatáu ichi chwilio yn ôl ganddo ef.

Mae gan systemau cyfarwydd fel ext4, NFS, a / proc dair swyddogaeth bwysig mewn strwythur data C o'r enw ffeil_gweithrediadau. Yn ogystal, mae rhai systemau ffeil yn ymestyn ac yn ailddiffinio ymarferoldeb VFS mewn ffordd gyfarwydd sy'n canolbwyntio ar wrthrychau. Fel y mae Robert Love yn nodi, mae tyniad VFS yn caniatáu i ddefnyddwyr Linux gopïo ffeiliau yn ddi-hid i neu o systemau gweithredu trydydd parti neu endidau haniaethol fel pibellau heb boeni am eu fformat data mewnol. Ar ochr y defnyddiwr (defnyddiwr), gan ddefnyddio galwad system, gall proses gopïo o ffeil i strwythurau data cnewyllyn gan ddefnyddio'r dull read() un system ffeil ac yna defnyddiwch y dull write () system ffeil arall ar gyfer allbwn data.

Mae'r diffiniadau swyddogaeth sy'n perthyn i'r mathau VFS sylfaenol yn y ffeiliau fs/*.c cod ffynhonnell cnewyllyn, tra bod subdirectories fs/ cynnwys rhai systemau ffeil. Mae'r craidd hefyd yn cynnwys endidau megis cgroups, /dev и tmpfs, sy'n ofynnol yn ystod y broses gychwyn ac felly wedi'u diffinio yn yr is-gyfeiriadur cnewyllyn init/. Sylwch ar hynny cgroups, /dev и tmpfs peidiwch â galw'r "tri mawr" swyddogaethau file_operations, ond yn uniongyrchol darllen ac ysgrifennu i'r cof.
Mae'r diagram isod yn dangos sut mae gofod defnyddwyr yn cyrchu'r gwahanol fathau o systemau ffeiliau sydd wedi'u gosod yn gyffredin ar systemau Linux. Strwythurau heb eu dangos pipes, dmesg и POSIX clocks, sydd hefyd yn gweithredu'r strwythur file_operations, a gyrchir trwy'r haen VFS.

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Mae VFS yn "haen lapio" rhwng galwadau system a gweithrediadau penodol file_operationsmegis ext4 и procfs. Swyddogaethau file_operations yn gallu rhyngweithio â gyrwyr dyfais neu ddyfeisiau mynediad cof. tmpfs, devtmpfs и cgroups peidiwch â defnyddio file_operations, ond cyrchu'r cof yn uniongyrchol.
Mae bodolaeth VFS yn rhoi cyfle i ailddefnyddio cod, gan nad oes rhaid i'r dulliau sylfaenol sy'n gysylltiedig â systemau ffeiliau gael eu hail-weithredu gan bob math o system ffeiliau. Mae ailddefnyddio cod yn arfer cyffredin ymhlith peirianwyr meddalwedd! Fodd bynnag, os yw'r cod amldro yn cynnwys gamgymeriadau difrifol, mae pob gweithrediad sy'n etifeddu dulliau cyffredin yn dioddef ohonynt.

/tmp: Awgrym syml

Ffordd hawdd o ganfod bod VFS yn bresennol ar system yw teipio mount | grep -v sd | grep -v :/, a fydd yn dangos popeth wedi'i osod (mounted) systemau ffeiliau nad ydynt yn breswylydd disg ac nad ydynt yn NFS, sy'n wir ar y rhan fwyaf o gyfrifiaduron. Un o'r mowntiau rhestredig (mounts) Bydd VFS yn ddiamau /tmp, dde?

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Mae pawb yn gwybod bod storio / tmp ar gyfrwng corfforol - gwallgofrwydd! Ffynhonnell.

Pam ei fod yn annymunol i storio /tmp ar gyfryngau corfforol? Oherwydd bod y ffeiliau yn /tmp yn rhai dros dro ac mae dyfeisiau storio yn arafach na'r cof lle mae tmpfs yn cael eu creu. Ar ben hynny, mae cyfryngau corfforol yn fwy agored i wisgo pan gânt eu trosysgrifo na'r cof. Yn olaf, gall ffeiliau yn / tmp gynnwys gwybodaeth sensitif, felly mae eu gwneud yn diflannu ar bob ailgychwyn yn nodwedd hanfodol.

Yn anffodus, mae rhai sgriptiau gosod dosbarthu Linux yn creu / tmp ar y ddyfais storio yn ddiofyn. Peidiwch â digalonni pe bai hyn yn digwydd i'ch system hefyd. Dilynwch ychydig o gyfarwyddiadau syml gyda Arch Wikii drwsio hyn, a bod yn ymwybodol bod y cof a neilltuwyd ar gyfer tmpfs yn dod yn ddim ar gael at ddibenion eraill. Mewn geiriau eraill, gall system gyda tmpfs enfawr a ffeiliau mawr arno redeg allan o gof a damwain. Awgrym arall: wrth olygu ffeil /etc/fstab, cofiwch fod yn rhaid iddo ddod i ben gyda llinell newydd, fel arall ni fydd eich system yn cychwyn.

/proc a /sys

Eithr /tmp, VFS (systemau ffeiliau rhithwir) sydd fwyaf cyfarwydd i ddefnyddwyr Linux yw /proc и /sys. (/dev yn byw mewn cof a rennir ac nid oes ganddo file_operations). Pam y ddwy gydran hyn? Gadewch i ni edrych i mewn i'r mater hwn.

procfs yn creu ciplun o'r cnewyllyn a'r prosesau y mae'n monitro ar eu cyfer userspace. Yn /proc mae'r cnewyllyn yn argraffu gwybodaeth am yr hyn sydd ganddo ar gael, megis ymyriadau, cof rhithwir, a'r rhaglennydd. Heblaw, /proc/sys yw'r man lle mae'r paramedrau wedi'u ffurfweddu gyda'r gorchymyn sysctl, ar gael ar gyfer userspace. Dangosir statws ac ystadegau prosesau unigol mewn cyfeirlyfrau /proc/.

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Yma /proc/meminfo yn ffeil wag sydd serch hynny yn cynnwys gwybodaeth werthfawr.

Ymddygiad /proc ffeiliau yn dangos pa mor wahanol y gall systemau ffeiliau disg VFS fod. Ar un ochr, /proc/meminfo cynnwys gwybodaeth y gellir ei gweld gyda'r gorchymyn free. Ar y llaw arall, mae'n wag! Sut mae'n gweithio? Mae'r sefyllfa yn atgoffa rhywun o'r erthygl enwog o'r enw Ydy'r lleuad yn bodoli pan nad oes neb yn edrych arno? Realiti a Theori Cwantwm"ysgrifennwyd gan athro ffiseg Prifysgol Cornell David Mermin yn 1985. Y ffaith yw bod y cnewyllyn yn casglu ystadegau cof pan wneir cais i /proc, ac mewn gwirionedd mewn ffeiliau /proc nid oes dim pan nad oes neb yn edrych. Fel y dywedwyd Mermin, "Mae athrawiaeth cwantwm sylfaenol yn dweud nad yw mesur yn gyffredinol yn datgelu gwerth blaenorol yr eiddo sy'n cael ei fesur." (Ac ystyriwch y cwestiwn am y lleuad fel gwaith cartref!)
Edrych yn wag procfs yn gwneud synnwyr oherwydd bod y wybodaeth sydd yno yn ddeinamig. Sefyllfa ychydig yn wahanol gyda sysfs. Gadewch i ni gymharu faint o ffeiliau sydd o leiaf un beit mewn maint /proc a /sys.

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Procfs un ffeil, sef y cyfluniad cnewyllyn wedi'i allforio, sy'n eithriad oherwydd dim ond unwaith y cychwyn y mae angen ei gynhyrchu. Ar y llaw arall, yn /sys mae llawer o ffeiliau mwy, ac mae llawer ohonynt yn cymryd tudalen gyfan o gof. Ffeiliau fel arfer sysfs cynnwys un rhif neu linell yn union, yn wahanol i dablau gwybodaeth a gafwyd o ddarllen ffeiliau megis /proc/meminfo.

Nod sysfs - darparu priodweddau darllen/ysgrifennu o'r hyn y mae'r cnewyllyn yn ei alw «kobjects» mewn gofod defnyddwyr. Yr unig nod kobjects yw dolen yn cyfrif: pan fydd y ddolen olaf i kobject yn cael ei dynnu, bydd y system yn adfer yr adnoddau sy'n gysylltiedig ag ef. Serch hynny, /sys yn gwneud i fyny y rhan fwyaf o'r enwog "ABI sefydlog ar gyfer gofod defnyddwyr" craidd, na all neb byth, dan unrhyw amgylchiadau "torri". Nid yw hyn yn golygu bod ffeiliau mewn sysfs yn sefydlog, a fyddai'n anghyson â chyfeirnodi gwrthrychau ansefydlog.
Mae ABI sefydlog y cnewyllyn yn cyfyngu ar yr hyn a all ymddangos ynddo /sys, nid yr hyn sy'n bresennol mewn gwirionedd ar y foment benodol honno. Mae rhestru caniatadau ffeil mewn sysfs yn rhoi cipolwg ar sut mae gosodiadau ffurfweddu ar gyfer dyfeisiau, modiwlau, systemau ffeiliau, ac ati. gellir ei ffurfweddu neu ei ddarllen. Y casgliad rhesymegol yw bod procfs hefyd yn rhan o ABI sefydlog y cnewyllyn, er nad yw hyn wedi'i nodi'n benodol yn dogfennaeth.

Systemau ffeiliau rhithwir yn Linux: pam mae eu hangen a sut maen nhw'n gweithio? Rhan 1

Ffeiliau mewn sysfs disgrifio un eiddo penodol ar gyfer pob endid a gall fod yn ddarllenadwy, yn ysgrifennadwy, neu'r ddau. Mae "0" yn y ffeil yn golygu na ellir tynnu'r SSD.

Gadewch i ni ddechrau ail ran y cyfieithiad gyda sut i fonitro VFS gan ddefnyddio'r offer eBPF a bcc, ac yn awr rydym yn aros am eich sylwadau ac yn draddodiadol yn eich gwahodd i gweminar agored, a gynhelir gan ein hathro ar Ebrill 9 - Vladimir Drozdetsky.

Ffynhonnell: hab.com

Ychwanegu sylw