అందరికీ హలో, “Linuxలో వర్చువల్ ఫైల్ సిస్టమ్లు: అవి ఎందుకు అవసరం మరియు అవి ఎలా పని చేస్తాయి?” అనే ప్రచురణ యొక్క రెండవ భాగాన్ని మీతో పంచుకుంటున్నాము. మీరు మొదటి భాగాన్ని చదవగలరు
eBPF మరియు bcc సాధనాలను ఉపయోగించి VFSని ఎలా పర్యవేక్షించాలి
ఫైళ్ళపై కెర్నల్ ఎలా పనిచేస్తుందో అర్థం చేసుకోవడానికి సులభమైన మార్గం sysfs
దీన్ని ఆచరణలో చూడటం మరియు ARM64ని చూడటానికి సులభమైన మార్గం eBPFని ఉపయోగించడం. eBPF (బర్కిలీ ప్యాకెట్ ఫిల్టర్కి సంక్షిప్తమైనది) అనేది వర్చువల్ మెషీన్ను కలిగి ఉంటుంది query
) కమాండ్ లైన్ నుండి. కెర్నల్ మూలాలు పాఠకులకు కెర్నల్ ఏమి చేయగలదో తెలియజేస్తాయి; eBPF సాధనాలను లోడ్ చేసిన సిస్టమ్లో అమలు చేయడం కెర్నల్ వాస్తవానికి ఏమి చేస్తుందో చూపిస్తుంది.
అదృష్టవశాత్తూ, సాధనాల సహాయంతో eBPF ఉపయోగించడం ప్రారంభించడం చాలా సులభం bcc
C కోడ్ యొక్క చిన్న చొప్పింపులతో పైథాన్ స్క్రిప్ట్లు, అంటే రెండు భాషలతో పరిచయం ఉన్న ఎవరైనా వాటిని సులభంగా సవరించవచ్చు. IN bcc/tools
80 పైథాన్ స్క్రిప్ట్లు ఉన్నాయి, అంటే డెవలపర్ లేదా సిస్టమ్ అడ్మినిస్ట్రేటర్ సమస్యను పరిష్కరించడానికి సరిపోయేదాన్ని ఎంచుకోగలుగుతారు.
నడుస్తున్న సిస్టమ్లో VFSలు ఏమి పని చేస్తాయనే దాని గురించి కనీసం ఉపరితల ఆలోచనను పొందడానికి, ప్రయత్నించండి vfscount
లేదా vfsstat
. ఇది డజన్ల కొద్దీ కాల్లను చూపుతుంది vfs_open()
మరియు "అతని స్నేహితులు" ప్రతి సెకనుకు అక్షరాలా జరుగుతాయి.
vfsstat.py
కేవలం VFS ఫంక్షన్ కాల్లను లెక్కించే C కోడ్ ఇన్సర్ట్లతో కూడిన పైథాన్ స్క్రిప్ట్.
మరింత పనికిమాలిన ఉదాహరణను ఇద్దాం మరియు మేము USB ఫ్లాష్ డ్రైవ్ను కంప్యూటర్లోకి చొప్పించినప్పుడు మరియు సిస్టమ్ దానిని గుర్తించినప్పుడు ఏమి జరుగుతుందో చూద్దాం.
eBPFని ఉపయోగించి మీరు ఏమి జరుగుతుందో చూడవచ్చు
/sys
USB ఫ్లాష్ డ్రైవ్ చొప్పించినప్పుడు. సరళమైన మరియు సంక్లిష్టమైన ఉదాహరణ ఇక్కడ చూపబడింది.
పైన చూపిన ఉదాహరణలో, bcc
సాధనం sysfs_create_files()
. మనం చూస్తాం sysfs_create_files()
ఉపయోగించి ప్రారంభించబడింది kworker
ఫ్లాష్ డ్రైవ్ చొప్పించబడిందనే వాస్తవానికి ప్రతిస్పందనగా ప్రసారం, కానీ ఏ ఫైల్ సృష్టించబడింది? రెండవ ఉదాహరణ eBPF యొక్క శక్తిని చూపుతుంది. ఇక్కడ trace.py
కెర్నల్ బ్యాక్ట్రేస్ (-K ఎంపిక) మరియు సృష్టించబడిన ఫైల్ పేరును ముద్రిస్తుంది sysfs_create_files()
. సింగిల్ స్టేట్మెంట్ చొప్పించడం అనేది LLVMని అమలు చేసే పైథాన్ స్క్రిప్ట్ అందించిన సులభంగా గుర్తించదగిన ఫార్మాట్ స్ట్రింగ్ను కలిగి ఉన్న C కోడ్. జస్ట్-ఇన్-టైమ్ కంపైలర్. ఇది ఈ లైన్ను కంపైల్ చేస్తుంది మరియు కెర్నల్లోని వర్చువల్ మెషీన్లో దీన్ని అమలు చేస్తుంది. పూర్తి ఫంక్షన్ సంతకం sysfs_create_files ()
రెండవ ఆదేశంలో తప్పనిసరిగా పునరుత్పత్తి చేయబడాలి, తద్వారా ఫార్మాట్ స్ట్రింగ్ పారామితులలో ఒకదానిని సూచిస్తుంది. ఈ C కోడ్లోని లోపాలు C కంపైలర్ నుండి గుర్తించదగిన ఎర్రర్లకు దారితీస్తాయి. ఉదాహరణకు, -l పరామితి విస్మరించబడితే, మీరు "BPF వచనాన్ని కంపైల్ చేయడంలో విఫలమైంది" అని చూస్తారు. C మరియు Python గురించి తెలిసిన డెవలపర్లు సాధనాలను కనుగొంటారు bcc
విస్తరించడం మరియు మార్చడం సులభం.
USB డ్రైవ్ చొప్పించినప్పుడు, కెర్నల్ బ్యాక్ట్రేస్ PID 7711 థ్రెడ్ అని చూపుతుంది kworker
ఇది ఫైల్ను సృష్టించింది «events»
в sysfs
. దాని ప్రకారం, నుండి కాల్ sysfs_remove_files()
డ్రైవ్ను తీసివేయడం వల్ల ఫైల్ తొలగించబడుతుందని చూపుతుంది events
, ఇది సూచన లెక్కింపు యొక్క సాధారణ భావనకు అనుగుణంగా ఉంటుంది. అదే సమయంలో, వీక్షించడం sysfs_create_link ()
eBPFతో USB డ్రైవ్ను చొప్పించేటప్పుడు కనీసం 48 సింబాలిక్ లింక్లు సృష్టించబడినట్లు చూపబడుతుంది.
కాబట్టి ఈవెంట్స్ ఫైల్ యొక్క ప్రయోజనం ఏమిటి? వాడుక disk_add_events ()
, మరియు గాని "media_change"
, లేదా "eject_request"
ఈవెంట్ ఫైల్లో రికార్డ్ చేయవచ్చు. ఇక్కడ కెర్నల్ బ్లాక్ లేయర్ "డిస్క్" కనిపించిందని మరియు ఎజెక్ట్ చేయబడిందని యూజర్స్పేస్కు తెలియజేస్తుంది. USB డ్రైవ్ను ఇన్సర్ట్ చేయడం ద్వారా ఈ పరిశోధన పద్ధతి ఎంత సమాచారంగా ఉందో గమనించండి, సోర్స్ నుండి పూర్తిగా ఎలా పని చేస్తుందో గుర్తించడానికి ప్రయత్నించడం కంటే.
చదవడానికి-మాత్రమే రూట్ ఫైల్ సిస్టమ్లు ఎంబెడెడ్ పరికరాలను ప్రారంభిస్తాయి
వాస్తవానికి, సాకెట్ నుండి ప్లగ్ని లాగడం ద్వారా ఎవరూ సర్వర్ లేదా వారి కంప్యూటర్ను ఆఫ్ చేయరు. కానీ ఎందుకు? ఎందుకంటే ఫిజికల్ స్టోరేజ్ పరికరాలలో మౌంటెడ్ ఫైల్ సిస్టమ్లు లాగ్లో రైట్లను కలిగి ఉండవచ్చు మరియు వాటి స్థితిని రికార్డ్ చేసే డేటా స్ట్రక్చర్లు స్టోరేజ్కి రైట్లతో సింక్రొనైజ్ చేయబడకపోవచ్చు. ఇది జరిగినప్పుడు, సిస్టమ్ యజమానులు యుటిలిటీని ప్రారంభించడానికి తదుపరి బూట్ వరకు వేచి ఉండాలి. fsck filesystem-recovery
మరియు, చెత్త సందర్భంలో, డేటాను కోల్పోతుంది.
అయినప్పటికీ, అనేక IoT పరికరాలు, అలాగే రూటర్లు, థర్మోస్టాట్లు మరియు కార్లు ఇప్పుడు Linuxని నడుపుతున్నాయని మనందరికీ తెలుసు. ఈ పరికరాలలో చాలా వరకు వినియోగదారు ఇంటర్ఫేస్ తక్కువగా ఉంటుంది మరియు వాటిని "క్లీన్గా" ఆఫ్ చేయడానికి మార్గం లేదు. కంట్రోల్ యూనిట్కు పవర్ ఉన్నప్పుడు డెడ్ బ్యాటరీతో కారును ప్రారంభించడాన్ని ఊహించండి fsck
ఇంజిన్ చివరకు ఎప్పుడు పనిచేయడం ప్రారంభిస్తుంది? మరియు సమాధానం సులభం. ఎంబెడెడ్ పరికరాలు రూట్ ఫైల్ సిస్టమ్పై ఆధారపడతాయి ro-rootfs
(రీడ్-ఓన్లీ రూట్ ఫైల్సిస్టమ్)).
ro-rootfs
ప్రామాణికత కంటే తక్కువ స్పష్టమైన అనేక ప్రయోజనాలను అందిస్తాయి. ఒక ప్రయోజనం ఏమిటంటే మాల్వేర్కి వ్రాయలేము /usr
లేదా /lib
, ఏ Linux ప్రక్రియ అక్కడ వ్రాయలేకపోతే. మరొకటి ఏమిటంటే, రిమోట్ పరికరాల ఫీల్డ్ సపోర్ట్ కోసం చాలా వరకు మార్పులేని ఫైల్ సిస్టమ్ కీలకం, ఎందుకంటే సహాయక సిబ్బంది ఫీల్డ్ సిస్టమ్లకు నామమాత్రంగా సమానమైన స్థానిక సిస్టమ్లపై ఆధారపడతారు. బహుశా చాలా ముఖ్యమైన (కానీ అత్యంత కృత్రిమమైన) ప్రయోజనం ఏమిటంటే, సిస్టమ్ రూపకల్పన దశలో ఏ సిస్టమ్ వస్తువులు మారకుండా ఉంటాయో నిర్ణయించడానికి ro-rootfs డెవలపర్లను బలవంతం చేస్తుంది. ro-rootfsతో పని చేయడం ఇబ్బందికరంగా మరియు బాధాకరంగా ఉంటుంది, ఎందుకంటే కాన్స్ట్ వేరియబుల్స్ తరచుగా ప్రోగ్రామింగ్ భాషలలో ఉంటాయి, కానీ వాటి ప్రయోజనాలు అదనపు ఓవర్హెడ్ను సులభంగా సమర్థిస్తాయి.
సృష్టి rootfs
ఎంబెడెడ్ డెవలపర్ల కోసం చదవడానికి-మాత్రమే కొంత అదనపు ప్రయత్నం అవసరం, మరియు ఇక్కడే VFS చిత్రంలోకి వస్తుంది. Linuxకి ఫైల్లు ఉండాలి /var
వ్రాయగలిగేవి, మరియు అదనంగా, ఎంబెడెడ్ సిస్టమ్లను అమలు చేసే అనేక ప్రసిద్ధ అప్లికేషన్లు కాన్ఫిగరేషన్ను రూపొందించడానికి ప్రయత్నిస్తాయి. dot-files
в $HOME
. హోమ్ డైరెక్టరీలోని కాన్ఫిగరేషన్ ఫైల్ల కోసం ఒక పరిష్కారం సాధారణంగా ముందుగా రూపొందించడం మరియు వాటిని నిర్మించడం rootfs
. కోసం /var
ఇది ఒక ప్రత్యేక రైటబుల్ విభజనపై మౌంట్ చేయడం ఒక సాధ్యమైన విధానం /
చదవడానికి మాత్రమే మౌంట్ చేయబడింది. మరొక ప్రసిద్ధ ప్రత్యామ్నాయం బైండ్ లేదా ఓవర్లే మౌంట్లను ఉపయోగించడం.
లింక్ చేయగల మరియు స్టాక్ చేయగల మౌంట్లు, కంటైనర్ల ద్వారా వాటి ఉపయోగం
ఆదేశాన్ని అమలు చేయడం man mount
బైండబుల్ మరియు ఓవర్లేబుల్ మౌంట్ల గురించి తెలుసుకోవడానికి ఉత్తమ మార్గం, ఇది డెవలపర్లు మరియు సిస్టమ్ అడ్మినిస్ట్రేటర్లకు ఫైల్ సిస్టమ్ను ఒక మార్గంలో సృష్టించి, ఆపై దానిని మరొక మార్గంలో అప్లికేషన్లకు బహిర్గతం చేసే సామర్థ్యాన్ని అందిస్తుంది. ఎంబెడెడ్ సిస్టమ్ల కోసం, ఫైల్లను నిల్వ చేసే సామర్థ్యం అని దీని అర్థం /var
చదవడానికి-మాత్రమే ఫ్లాష్ డ్రైవ్లో, కానీ ఓవర్లే లేదా లింక్ చేయగల మౌంట్ పాత్ tmpfs
в /var
లోడ్ అవుతున్నప్పుడు, ఇది అప్లికేషన్లను అక్కడ నోట్స్ వ్రాయడానికి అనుమతిస్తుంది (స్క్రాల్). తదుపరిసారి మీరు మార్పులను ఆన్ చేసినప్పుడు /var
పోతుంది. అతివ్యాప్తి మౌంట్ మధ్య యూనియన్ను సృష్టిస్తుంది tmpfs
మరియు అంతర్లీన ఫైల్ సిస్టమ్ మరియు ఇప్పటికే ఉన్న ఫైల్లకు కనిపించే మార్పులను చేయడానికి మిమ్మల్ని అనుమతిస్తుంది ro-tootf
అయితే బైండబుల్ మౌంట్ కొత్త వాటిని ఖాళీ చేస్తుంది tmpfs
ఫోల్డర్లు వ్రాయదగినవిగా కనిపిస్తాయి ro-rootfs
మార్గాలు. కాగా overlayfs
ఇది సరైనది (proper
) ఫైల్ సిస్టమ్ రకం, బైండబుల్ మౌంట్ అమలు చేయబడింది
అతివ్యాప్తి మరియు లింక్ చేయదగిన మౌంట్ యొక్క వివరణ ఆధారంగా, ఎవరూ ఆశ్చర్యపోలేదు mountsnoop
от bcc
.
కాల్ system-nspawn
నడుస్తున్నప్పుడు కంటైనర్ను ప్రారంభిస్తుంది mountsnoop.py
.
ఏమి జరిగిందో చూద్దాం:
ప్రయోగ mountsnoop
కంటైనర్ "బూట్ అవుతున్నప్పుడు" కంటైనర్ యొక్క రన్టైమ్ లింక్ చేయబడిన మౌంట్పై ఎక్కువగా ఆధారపడి ఉంటుందని చూపిస్తుంది (దీర్ఘ అవుట్పుట్ ప్రారంభం మాత్రమే చూపబడుతుంది).
ఇది systemd-nspawn
లో ఎంచుకున్న ఫైల్లను అందిస్తుంది procfs
и sysfs
దానికి మార్గాలుగా కంటైనర్కు హోస్ట్ rootfs
. ఇదికాకుండా MS_BIND
బైండింగ్ మౌంట్ను సెట్ చేసే ఫ్లాగ్, మౌంట్లోని కొన్ని ఇతర ఫ్లాగ్లు హోస్ట్ మరియు కంటైనర్ నేమ్స్పేస్లకు మార్పుల మధ్య సంబంధాన్ని నిర్వచిస్తాయి. ఉదాహరణకు, లింక్ చేయబడిన మౌంట్ మార్పులను దాటవేయవచ్చు /proc
и /sys
కంటైనర్లోకి, లేదా కాల్ని బట్టి వాటిని దాచండి.
తీర్మానం
Linux యొక్క అంతర్గత పనితీరును అర్థం చేసుకోవడం అసాధ్యమైన పనిగా అనిపించవచ్చు, ఎందుకంటే కెర్నల్లోనే భారీ మొత్తంలో కోడ్ ఉంటుంది, Linux యూజర్ స్పేస్ అప్లికేషన్లు మరియు C లైబ్రరీలలో సిస్టమ్ కాల్ ఇంటర్ఫేస్లను పక్కన పెడితే. glibc
. సిస్టమ్ కాల్లు మరియు యూజర్-స్పేస్ హెడర్లను అర్థం చేసుకోవడం, అలాగే టేబుల్ వంటి ప్రధాన అంతర్గత కెర్నల్ ఇంటర్ఫేస్లను అర్థం చేసుకోవడంపై ఒక కెర్నల్ సబ్సిస్టమ్ యొక్క సోర్స్ కోడ్ను చదవడం పురోగతిని సాధించడానికి ఒక మార్గం. file_operations
. ఫైల్ కార్యకలాపాలు "ప్రతిదీ ఒక ఫైల్" సూత్రాన్ని అందిస్తాయి, వాటిని నిర్వహించడం చాలా ఆనందదాయకంగా ఉంటుంది. ఉన్నత-స్థాయి డైరెక్టరీలో సి కెర్నల్ సోర్స్ ఫైల్లు fs/
జనాదరణ పొందిన ఫైల్ సిస్టమ్లు మరియు నిల్వ పరికరాల మధ్య విస్తృత మరియు సాపేక్షంగా సరళమైన అనుకూలతను అందించే ర్యాపర్ లేయర్ అయిన వర్చువల్ ఫైల్ సిస్టమ్ల అమలును ప్రదర్శించండి. Linux నేమ్స్పేస్ల ద్వారా లింక్ చేయడం మరియు అతివ్యాప్తి చేయడం అనేది VFS యొక్క మాయాజాలం, ఇది రీడ్-ఓన్లీ కంటైనర్లు మరియు రూట్ ఫైల్సిస్టమ్లను సృష్టించడం సాధ్యం చేస్తుంది. సోర్స్ కోడ్, eBPF కోర్ టూల్ మరియు దాని ఇంటర్ఫేస్ యొక్క పరిశీలనతో కలిపి bcc
ప్రధాన అన్వేషణను గతంలో కంటే సులభతరం చేస్తుంది.
మిత్రులారా, వ్రాయండి, ఈ వ్యాసం మీకు ఉపయోగకరంగా ఉందా? బహుశా మీకు ఏవైనా వ్యాఖ్యలు లేదా వ్యాఖ్యలు ఉన్నాయా? మరియు Linux అడ్మినిస్ట్రేటర్ కోర్సులో ఆసక్తి ఉన్నవారు ఆహ్వానించబడ్డారు
మూలం: www.habr.com