Kaixo guztioi, zuekin partekatzen ari gara "Fitxategi sistema birtualak Linuxen: zergatik behar dira eta nola funtzionatzen dute?" argitalpenaren bigarren zatia. Lehenengo zatia irakur dezakezu
Nola monitorizatu VFS eBPF eta bcc tresnak erabiliz
Nukleoak fitxategietan nola funtzionatzen duen ulertzeko modurik errazena sysfs
praktikan ikustea da, eta ARM64 ikusteko modurik errazena eBPF erabiltzea da. eBPF (Berkeley Packet Filter laburdura) martxan dagoen makina birtual batek osatzen du query
) komando-lerrotik. Nukleoaren iturriek kernelak zer egin dezakeen esaten diote irakurleari; eBPF tresnak kargatutako sistema batean exekutatzen nukleoa benetan zer egiten ari den erakusten du.
Zorionez, eBPF erabiltzen hastea nahiko erraza da tresnen laguntzarekin bcc
C kodearen txertaketa txikiak dituzten Python script-ak dira, eta horrek esan nahi du bi hizkuntzak ezagutzen dituen edonork erraz alda ditzakeela. IN bcc/tools
80 Python script daude, hau da, ziurrenik garatzaile edo sistema administratzaile batek arazoa konpontzeko egokia den zerbait aukeratu ahal izango du.
VFSek exekutatzen ari den sistema batean egiten duten lanaren azaleko ideia bat izateko, saiatu vfscount
edo vfsstat
. Horrek erakutsiko du, demagun, dozenaka dei vfs_open()
eta "bere lagunak" literalki segundoro gertatzen dira.
vfsstat.py
C kode txertaketak dituen Python script bat da, VFS funtzio-deiak besterik gabe zenbatzen dituena.
Eman dezagun adibide hutsal bat eta ikus dezagun zer gertatzen den USB pendrive bat ordenagailu batean sartzen dugunean eta sistemak detektatzen dugunean.
eBPF erabiliz zer gertatzen ari den ikus dezakezu
/sys
USB flash drive bat sartzen denean. Adibide sinple eta konplexu bat erakusten da hemen.
Goian erakusten den adibidean, bcc
tresna sysfs_create_files()
. Hori ikusten dugu sysfs_create_files()
erabiliz abiarazi zen kworker
stream-a flash drive txertatu zela erantzunez, baina zein fitxategi sortu zen? Bigarren adibideak eBPF-ren boterea erakusten du. Hemen trace.py
Nukleoaren atzerako traza (-K aukera) eta sortu den fitxategiaren izena inprimatzen ditu sysfs_create_files()
. Adierazpen bakarra txertatzea LLVM exekutatzen duen Python script-ak emandako formatu-kate erraz antzematen duen C kodea da. just-in-time konpilatzailea. Lerro hau konpilatu eta nukleoaren barruan dagoen makina birtualean exekutatzen du. Funtzio osoko sinadura sysfs_create_files ()
bigarren komandoan erreproduzitu behar da formatu-kateak parametroetako bati erreferentzia egin diezaion. C kode honetako akatsek C konpilagailuaren errore antzemangarriak eragiten dituzte. Adibidez, -l parametroa baztertzen bada, "Huts egin da BPF testua konpilatu" ikusiko duzu. C eta Python ezagutzen duten garatzaileek tresnak aurkituko dituzte bcc
zabaltzeko eta aldatzeko erraza.
USB unitatea sartzen denean, nukleoaren atzerako trazatuak PID 7711 haria dela erakutsiko du kworker
fitxategia sortu zuena «events»
в sysfs
. Horren arabera, deia sysfs_remove_files()
diskoa kentzeak fitxategia ezabatzea eragin duela erakutsiko du events
, erreferentziazko zenbaketaren kontzeptu orokorrari dagokiona. Aldi berean, ikustea sysfs_create_link ()
eBPF-rekin USB unitatea sartzen duzun bitartean gutxienez 48 lotura sinboliko sortu direla erakutsiko du.
Beraz, zertarako balio du gertaeren fitxategiak? Erabilera disk_add_events ()
, eta bai "media_change"
Edo "eject_request"
gertaera fitxategi batean grabatu daiteke. Hemen nukleo-bloke geruzak erabiltzaile-esparruari "disko" bat agertu eta kanporatu dela jakinarazten dio. Kontuan izan ikerketa-metodo hau zenbaterainokoa den USB disko bat txertatuz, gauzak iturritik soilik nola funtzionatzen duten jakiteko saiakerarekin alderatuta.
Irakurtzeko soilik erro fitxategi-sistemek kapsulatutako gailuak gaitzen dituzte
Jakina, inork ez du zerbitzaria edo bere ordenagailua itzaltzen entxufea entxufetik aterata. Baina zergatik? Hau da, biltegiratze fisikoko gailuetan muntatutako fitxategi-sistemek idazketa atzeratuak izan ditzaketelako eta baliteke haien egoera erregistratzen duten datu-egiturak ez egotea biltegiratzeko idazketekin sinkronizatzea. Hori gertatzen denean, sistemaren jabeek hurrengo abiaraztera arte itxaron behar dute utilitatea abiarazteko. fsck filesystem-recovery
eta, kasurik txarrenean, datuak galtzea.
Hala ere, denok dakigu IoT gailu askok, baita bideratzaileek, termostatoek eta autoek, orain Linux exekutatzen dutela. Gailu horietako askok erabiltzaile-interfaze gutxi dute, eta ez dago "garbi" itzaltzeko modurik. Imajinatu auto bat bateria agortuta abiarazten duzula kontrol-unitatearen energia dagoenean fsck
noiz hasten da azkenean motorra martxan? Eta erantzuna erraza da. Kapsulatutako gailuek erroko fitxategi-sisteman oinarritzen dira ro-rootfs
(irakurtzeko soilik erro fitxategi-sistema)).
ro-rootfs
benetakotasuna baino agerikoak ez diren abantaila ugari eskaintzen ditu. Abantaila bat da malwareak ezin duela idatzi /usr
edo /lib
, Linux prozesurik ezin badu bertan idatzi. Beste bat da neurri handi batean aldaezina den fitxategi-sistema bat funtsezkoa dela urruneko gailuen eremuko laguntzarako, laguntza-langileak eremu-sistemen nominalki berdinak diren tokiko sistemetan oinarritzen baita. Agian onura garrantzitsuena (baina baita maltzurrena ere) da ro-rootfs-ek garatzaileak behartzen dituela sistemaren diseinu-fasean zein sistema-objektu aldaezinak izango diren erabakitzera. Ro-rootfs-ekin lan egitea deserosoa eta mingarria izan daiteke, konst aldagaiak askotan programazio-lengoaietan egoten baitira, baina haien onurek erraz justifikatzen dute gainkostu gehigarria.
sortzea rootfs
Irakurtzeko soilik esfortzu gehigarri bat eskatzen die kapsulatutako garatzaileei, eta hor sartzen da VFS argazkia. Linuxek fitxategiak sartuta egotea eskatzen du /var
idazteko modukoak ziren, eta gainera, sistema txertatuak exekutatzen dituzten aplikazio ezagun asko konfigurazioa sortzen saiatuko dira dot-files
в $HOME
. Hasierako direktorioko konfigurazio-fitxategietarako irtenbide bat horiek aurrez sortzea eta eraikitzea izan ohi da rootfs
. For /var
Ikuspegi posible bat partizio idazgarri bereizi batean muntatzea da, bitartean /
irakurtzeko soilik muntatua. Beste alternatiba ezagun bat lotzeko edo gainjartzeko muntaketak erabiltzea da.
Lotura eta pilagarriak diren euskarriak, edukiontzien bidez erabiltzea
Agindu bat exekutatzen man mount
lotu daitezkeen eta gainjar daitezkeen muntaketari buruz ikasteko modurik onena da, garatzaileei eta sistema-administratzaileei fitxategi-sistema bat bide batean sortzeko eta, ondoren, beste batean aplikazioetara erakusteko aukera ematen dietenak. Kapsulatutako sistemetarako, horrek fitxategiak gordetzeko gaitasuna esan nahi du /var
irakurtzeko soilik den flash drive batean, baina gainjarri edo muntatzeko bide batetik tmpfs
в /var
kargatzean, aplikazioei oharrak bertan idazteko aukera emango die (marraztea). Aldaketak aktibatzen dituzun hurrengoan /var
galduko da. Gainarrizko muntaketa batek arteko batasuna sortzen du tmpfs
eta azpian dagoen fitxategi-sistema eta lehendik dauden fitxategietan itxurazko aldaketak egiteko aukera ematen dizu ro-tootf
lotzeko moduko muntai batek, berriz, berriak huts egin ditzake tmpfs
karpetak ikusgai daude idazteko moduan ro-rootfs
moduak. Bitartean overlayfs
hau da egokia (proper
) fitxategi-sistema mota, muntaketa lotu daitekeen inplementatuta dago
Gainjarri eta lotura-muntaiaren deskribapenean oinarrituta, inor ez da harritzen mountsnoop
tik bcc
.
deiaren system-nspawn
ontzia martxan jartzen duen bitartean mountsnoop.py
.
Ikus dezagun zer gertatu den:
aireratzea mountsnoop
edukiontzia "abiaraztean" dagoen bitartean, edukiontziaren exekuzio-denbora lotzen ari den muntatzearen menpekoa dela erakusten du (irteera luzearen hasiera bakarrik erakusten da).
Hemen systemd-nspawn
aukeratutako fitxategiak eskaintzen ditu procfs
и sysfs
ostalari ontzira bertarako bide gisa rootfs
... Gainera MS_BIND
lotura-muntaia konfiguratzen duen bandera, muntaian dauden beste bandera batzuek ostalariaren eta edukiontziaren izen-espazioen aldaketen arteko erlazioa definitzen dute. Adibidez, estekatutako muntaketa batek aldaketak salta ditzake /proc
и /sys
edukiontzian sartu, edo ezkutatu deiaren arabera.
Ondorioa
Linux-en barne funtzionamendua ulertzea ezinezko zeregina dirudi, nukleoak berak kode kopuru handia baitu, Linux erabiltzaileentzako espazioko aplikazioak eta sistema-deien interfazeak alde batera utzita C liburutegietan, hala nola. glibc
. Aurrera egiteko modu bat nukleoaren azpisistema baten iturburu-kodea irakurtzea da, sistema-deiak eta erabiltzaile-espazioko goiburuak ulertzeari arreta jarriz, baita nukleoaren barneko interfaze nagusiak, adibidez, taula. file_operations
. Fitxategien eragiketak "dena fitxategi bat da" printzipioa ematen du, eta kudeatzeko oso atseginak dira. C kernel iturburu-fitxategiak goi-mailako direktorioan fs/
fitxategi-sistema birtualen inplementazioa aurkeztu, hau da, fitxategi-sistema ezagunen eta biltegiratze-gailuen arteko bateragarritasun zabala eta nahiko sinplea eskaintzen duten biltegiratze-geruza dira. Linux izen-espazioen bidez estekatzea eta gainjartzea VFSren magia da, irakurtzeko soilik diren edukiontziak eta erro fitxategi-sistemak sortzea posible egiten duena. Iturburu-kodea, eBPF oinarrizko tresna eta bere interfazearen azterketarekin konbinatuta bcc
muina esploratzea inoiz baino errazagoa eginez.
Lagunak, idatzi, baliagarria izan zaizu artikulu hau? Agian, iruzkin edo oharrik baduzu? Eta Linux Administratzaile ikastaroan interesa dutenak gonbidatuta daude
Iturria: www.habr.com