በሊኑክስ ውስጥ ምናባዊ የፋይል ስርዓቶች-ለምን ያስፈልጋሉ እና እንዴት ይሰራሉ? ክፍል 2

ሰላም ለሁላችሁም፣ “ምናባዊ የፋይል ሲስተሞች በሊኑክስ፡ ለምን ያስፈልጋሉ እና እንዴት ይሰራሉ?” የሚለውን እትም ሁለተኛ ክፍል እናካፍላችኋለን። የመጀመሪያውን ክፍል ማንበብ ይችላሉ እዚህ. እነዚህ ተከታታይ ህትመቶች በኮርሱ ላይ አዲስ ዥረት ከመጀመሩ ጋር እንዲገጣጠሙ እናስታውስዎታለን። "ሊኑክስ አስተዳዳሪ", ይህም በጣም በቅርቡ ይጀምራል.

ኢቢፒኤፍ እና ቢሲሲ መሳሪያዎችን በመጠቀም ቪኤፍኤስን እንዴት እንደሚቆጣጠሩ

ከርነል በፋይሎች ላይ እንዴት እንደሚሰራ ለመረዳት ቀላሉ መንገድ sysfs በተግባር ማየት ነው፣ እና ARM64ን ለመመልከት ቀላሉ መንገድ eBPFን መጠቀም ነው። eBPF (ለበርክሌይ ፓኬት ማጣሪያ አጭር) ወደ ውስጥ የሚሄድ ምናባዊ ማሽንን ያካትታል አንኳርየትኛውን ልዩ መብት ያላቸው ተጠቃሚዎች ሊጠይቁ ይችላሉ (query) ከትእዛዝ መስመር. የከርነል ምንጮች ከርነል ምን ማድረግ እንደሚችሉ ለአንባቢው ይነግሩታል; የኢቢፒኤፍ መሳሪያዎችን በተጫነ ስርዓት ላይ ማስኬድ ከርነል ምን እየሰራ እንደሆነ ያሳያል።

በሊኑክስ ውስጥ ምናባዊ የፋይል ስርዓቶች-ለምን ያስፈልጋሉ እና እንዴት ይሰራሉ? ክፍል 2

እንደ እድል ሆኖ፣ eBPFን መጠቀም መጀመር በመሳሪያዎች እገዛ በጣም ቀላል ነው። ስውር ቅጂ, ከአጠቃላይ ስርጭቱ እንደ ፓኬጆች ይገኛሉ ሊኑክስ እና በዝርዝር ተመዝግቧል በርናርድ ግሬግ. መሳሪያዎች bcc የ Python ስክሪፕቶች ከትንሽ የ C ኮድ ጋር የተካተቱ ናቸው ፣ ይህ ማለት ሁለቱንም ቋንቋዎች የሚያውቅ ማንኛውም ሰው በቀላሉ ሊያስተካክላቸው ይችላል። ውስጥ bcc/tools 80 የፓይዘን ስክሪፕቶች አሉ፣ ይህ ማለት ምናልባት ገንቢ ወይም የስርዓት አስተዳዳሪ ለችግሩ መፍትሄ የሚሆን ነገር መምረጥ ይችላሉ።
ቪኤፍኤስ በሩጫ ሲስተም ላይ ምን እንደሚሠሩ ቢያንስ ላዩን ሀሳብ ለማግኘት ይሞክሩ vfscount ወይም vfsstat. ይህ በደርዘን የሚቆጠሩ ጥሪዎችን ያሳያል እንበል vfs_open() እና "ጓደኞቹ" በየሰከንዱ በትክክል ይከሰታሉ.

በሊኑክስ ውስጥ ምናባዊ የፋይል ስርዓቶች-ለምን ያስፈልጋሉ እና እንዴት ይሰራሉ? ክፍል 2

vfsstat.py በቀላሉ የVFS ተግባር ጥሪዎችን የሚቆጥር የሲ ኮድ ማስገቢያ ያለው የፓይዘን ስክሪፕት ነው።

የበለጠ ተራ ምሳሌ እንስጥ እና የዩኤስቢ ፍላሽ አንፃፊ ወደ ኮምፒውተር ስናስገባ እና ሲስተሙ ሲያገኘው ምን እንደሚፈጠር እንይ።

በሊኑክስ ውስጥ ምናባዊ የፋይል ስርዓቶች-ለምን ያስፈልጋሉ እና እንዴት ይሰራሉ? ክፍል 2

eBPFን በመጠቀም ምን እየተፈጠረ እንዳለ ማየት ይችላሉ። /sysየዩኤስቢ ፍላሽ አንፃፊ ሲገባ. ቀላል እና ውስብስብ ምሳሌ እዚህ ይታያል.

ከላይ በሚታየው ምሳሌ ውስጥ. bcc መሣሪያ ፈለግ.py ትዕዛዙ ሲሰራ መልእክት ያትማል sysfs_create_files(). ያንን እናያለን sysfs_create_files() በመጠቀም ተጀመረ kworker ፍላሽ አንፃፊ ስለገባበት ሁኔታ ምላሽ ለመስጠት ዥረት መልቀቅ ፣ ግን ምን ፋይል ተፈጠረ? ሁለተኛው ምሳሌ የኢቢፒኤፍን ኃይል ያሳያል። እዚህ trace.py የከርነል ጀርባ (-K አማራጭ) እና የተፈጠረውን ፋይል ስም ያትማል sysfs_create_files(). ነጠላ መግለጫ ማስገባት LLVMን በሚያንቀሳቅሰው የ Python ስክሪፕት የቀረበ በቀላሉ ሊታወቅ የሚችል የቅርጸት ሕብረቁምፊን የሚያካትት ሲ ኮድ ነው። ልክ-በ-ጊዜ አጠናቃሪ. ይህንን መስመር ያጠናቅራል እና በከርነል ውስጥ ባለው ምናባዊ ማሽን ውስጥ ያስፈጽመዋል። ሙሉ ተግባር ፊርማ sysfs_create_files () የቅርጸት ሕብረቁምፊው አንዱን መመዘኛዎች እንዲያመለክት በሁለተኛው ትዕዛዝ ውስጥ እንደገና መባዛት አለበት. በዚህ የC ኮድ ክፍል ውስጥ ያሉ ስህተቶች ከC compiler የሚታወቁ ስህተቶችን ያስከትላሉ። ለምሳሌ፣ የ -l መለኪያው ከተተወ፣ "BPF ጽሑፍን ማጠናቀር አልተሳካም" ያያሉ። C እና Pythonን የሚያውቁ ገንቢዎች መሳሪያዎቹን ያገኛሉ bcc በቀላሉ ለማስፋፋት እና ለመለወጥ.

የዩኤስቢ አንጻፊ ሲገባ የከርነል ጀርባው PID 7711 ክር መሆኑን ያሳያል kworkerፋይሉን የፈጠረው «events» в sysfs. በዚህም መሰረት ከ sysfs_remove_files() ድራይቭን ማስወገድ ፋይሉ እንዲሰረዝ እንዳደረገ ያሳያል events, ይህም ከአጠቃላይ የማጣቀሻ ቆጠራ ጽንሰ-ሐሳብ ጋር ይዛመዳል. በተመሳሳይ ጊዜ, በመመልከት sysfs_create_link () የዩኤስቢ ድራይቭ ሲያስገቡ በ eBPF ቢያንስ 48 ተምሳሌታዊ አገናኞች መፈጠሩን ያሳያል።

ስለዚህ የክስተቶች ፋይል ፋይዳ ምንድን ነው? አጠቃቀም cscope ለፍለጋ __መሣሪያ_አክል_ዲስክ(), መንስኤውን ያሳያል disk_add_events (), እና ወይ "media_change", ወይም "eject_request" በክስተት ፋይል ውስጥ መመዝገብ ይችላል። እዚህ የከርነል ብሎክ ንብርብር የተጠቃሚ ቦታን ያሳውቃል “ዲስክ” ታየ እና ወጣ። ነገሮች ከምንጩ ብቻ እንዴት እንደሚሠሩ ለማወቅ ከመሞከር ጋር ሲነጻጸር ይህ የምርምር ዘዴ የዩኤስቢ ድራይቭን በማስገባት ምን ያህል መረጃ ሰጪ እንደሆነ ልብ ይበሉ።

ተነባቢ-ብቻ ስርወ ፋይል ስርዓቶች የተካተቱ መሳሪያዎችን ያነቃሉ።

በእርግጥ ማንም ሰው ሶኬቱን ከሶኬት ላይ በማንሳት አገልጋዩን ወይም ኮምፒውተራቸውን አያጠፋውም። ግን ለምን? ይህ የሆነበት ምክንያት በአካላዊ ማከማቻ መሳሪያዎች ላይ የተጫኑ የፋይል ስርዓቶች የዘገዩ ፅሁፎች ሊኖራቸው ስለሚችል እና ሁኔታቸውን የሚመዘግቡ የውሂብ መዋቅሮች ከማከማቻው ጋር ከመፃፍ ጋር ላይመሳሰሉ ይችላሉ። ይህ በሚሆንበት ጊዜ የስርዓቱ ባለቤቶች መገልገያውን ለመጀመር የሚቀጥለው ቡት እስኪያገኝ ድረስ መጠበቅ አለባቸው። fsck filesystem-recovery እና, በጣም በከፋ ሁኔታ, ውሂብ ማጣት.

ነገር ግን፣ ብዙ የአይኦቲ መሳሪያዎች፣ እንዲሁም ራውተሮች፣ ቴርሞስታቶች እና መኪኖች አሁን ሊኑክስን እንደሚያሄዱ ሁላችንም እናውቃለን። ከእነዚህ መሳሪያዎች ውስጥ አብዛኛዎቹ ምንም የተጠቃሚ በይነገጽ የላቸውም, እና እነሱን "በንጽሕና" ለማጥፋት ምንም መንገድ የለም. የመቆጣጠሪያ አሃዱ ኃይል ባለበት ጊዜ የሞተ ባትሪ ያለው መኪና ለመጀመር አስቡት ሊኑክስ ያለማቋረጥ ወደ ላይ እና ወደ ታች እየዘለሉ. እንዴት ነው ስርዓቱ ያለ ረጅም ጊዜ የሚነሳው fsckበመጨረሻ ሞተሩ መቼ ይጀምራል? መልሱም ቀላል ነው። የተከተቱ መሳሪያዎች በስር ፋይል ስርዓቱ ላይ ይመረኮዛሉ ለማንበብ ብቻ (ተጠርቷል) ro-rootfs (ተነባቢ-ብቻ root fileystem))።

ro-rootfs ከትክክለኛነቱ ያነሰ ግልጽ የሆኑ ብዙ ጥቅሞችን ይስጡ። አንዱ ጥቅም ማልዌር መፃፍ አለመቻሉ ነው። /usr ወይም /lib, ምንም የሊኑክስ ሂደት እዚያ መፃፍ ካልቻለ. ሌላው የርቀት መሳሪያዎች የመስክ ድጋፍ ለማድረግ በአብዛኛው የማይለዋወጥ የፋይል ስርዓት ወሳኝ ነው ምክንያቱም ደጋፊ ሰራተኞች በስም ከመስክ ስርዓቶች ጋር ተመሳሳይ በሆኑ የአካባቢ ስርዓቶች ላይ ስለሚተማመኑ ነው። ምናልባትም በጣም አስፈላጊው (ነገር ግን በጣም ተንኮለኛ) ጥቅማጥቅሞች ሮ-ሮትፍስ ገንቢዎች በስርዓቱ ዲዛይን ደረጃ ላይ የትኞቹ የስርዓት ነገሮች የማይለዋወጡ እንደሆኑ እንዲወስኑ ያስገድዳቸዋል ። ከ ro-rootfs ጋር መስራት አሰልቺ እና ህመም ሊሆን ይችላል፣ ምክንያቱም የኮንስት ተለዋዋጮች ብዙውን ጊዜ በፕሮግራሚንግ ቋንቋዎች ውስጥ ናቸው፣ ነገር ግን ጥቅሞቻቸው ተጨማሪውን ትርፍ በቀላሉ ያረጋግጣሉ።

ፍጥረት rootfs ተነባቢ-ብቻ ለተካተቱ ገንቢዎች የተወሰነ ተጨማሪ ጥረት ይጠይቃል፣ እና ይሄ ቪኤፍኤስ ወደ ምስሉ የሚመጣው። ሊኑክስ ፋይሎች እንዲገቡ ይፈልጋል /var ሊጻፉ የሚችሉ ነበሩ፣ እና በተጨማሪ፣ የተካተቱ ስርዓቶችን የሚያሄዱ ብዙ ታዋቂ መተግበሪያዎች ውቅረት ለመፍጠር ይሞክራሉ። dot-files в $HOME. በቤት ማውጫ ውስጥ ላሉ የማዋቀሪያ ፋይሎች አንድ መፍትሄ ብዙውን ጊዜ አስቀድሞ ማመንጨት እና እነሱን መገንባት ነው። rootfs. ለ /var አንድ የሚቻል አቀራረብ በተለየ ሊጻፍ የሚችል ክፍልፍል ላይ መጫን ነው, ሳለ / ተነባቢ-ብቻ ተጭኗል። ሌላው ተወዳጅ አማራጭ ማሰሪያ ወይም ተደራቢዎችን መጠቀም ነው.

ሊገናኙ የሚችሉ እና ሊደረደሩ የሚችሉ ጋራዎች፣ በመያዣዎች መጠቀማቸው

ትዕዛዝ በማስፈጸም ላይ man mount ገንቢዎች እና የስርዓት አስተዳዳሪዎች በአንድ ዱካ የፋይል ስርዓት እንዲፈጥሩ እና ከዚያም ለሌላ መተግበሪያዎች እንዲያጋልጡ ስለሚያደርጉ ስለ ማሰሪያ እና ተደራቢ ተራራዎች ለመማር ምርጡ መንገድ ነው። ለተከተቱ ስርዓቶች ይህ ማለት ፋይሎችን የማከማቸት ችሎታ ማለት ነው። /var ተነባቢ-ብቻ ፍላሽ አንፃፊ ላይ፣ ነገር ግን ተደራቢ ወይም ሊገናኝ የሚችል ተራራ መንገድ ከ tmpfs в /var በሚጫኑበት ጊዜ ትግበራዎች እዚያ ማስታወሻዎችን እንዲጽፉ ያስችላቸዋል (መቧጨር)። በሚቀጥለው ጊዜ ለውጦቹን ሲያበሩ /var ይጠፋሉ። ተደራቢ ተራራ በመካከላቸው ህብረት ይፈጥራል tmpfs እና ዋናው የፋይል ስርዓት እና በ ውስጥ ባሉ ፋይሎች ላይ የማይታዩ ለውጦችን እንዲያደርጉ ያስችልዎታል ro-tootf ማሰር የሚችል ተራራ አዳዲሶችን ባዶ ሊያደርግ ይችላል። tmpfs ውስጥ ሊጻፉ የሚችሉ አቃፊዎች ይታያሉ ro-rootfs መንገዶች. እያለ overlayfs ይህ ትክክለኛው ነው (proper) የፋይል ስርዓት አይነት፣ ሊታሰር የሚችል ተራራ በ ውስጥ ተተግብሯል። የቪኤፍኤስ ስም ቦታ.

በተደራቢው እና ሊያያዝ በሚችለው ተራራ ገለፃ ላይ በመመስረት ማንም አያስገርምም። የሊኑክስ መያዣዎች በንቃት ጥቅም ላይ ይውላሉ. በምንጠቀምበት ጊዜ ምን እንደሚሆን እንይ systemd-nspawn መሳሪያውን በመጠቀም መያዣውን ለማስኬድ mountsnoop от bcc.

ግጥሚያ system-nspawn በሚሮጥበት ጊዜ መያዣውን ይጀምራል mountsnoop.py.

የሆነውን ነገር እንመልከት፡-

Запуск mountsnoop ኮንቴይነሩ "ቡት" እያለ የእቃ መጫኛው የሩጫ ጊዜ በከፍተኛ ደረጃ በተገጠመለት ተራራ ላይ የተመሰረተ መሆኑን ያሳያል (የረጅም ጊዜ ውፅዓት መጀመሪያ ብቻ ነው የሚታየው).

ይህ ነው systemd-nspawn ውስጥ የተመረጡ ፋይሎችን ያቀርባል procfs и sysfs ወደ መያዣው እንደ መንገዶች አስተናጋጅ rootfs. በተጨማሪም MS_BIND ማሰሪያውን የሚያዘጋጅ ባንዲራ፣ በተራራው ላይ ያሉ አንዳንድ ባንዲራዎች በአስተናጋጁ እና በመያዣው የስም ቦታዎች መካከል ያለውን ግንኙነት ይገልፃሉ። ለምሳሌ፣ የተገናኘ ተራራ ወይ ለውጦችን መዝለል ይችላል። /proc и /sys ወደ መያዣው ውስጥ, ወይም በጥሪው ላይ በመመስረት ይደብቋቸው.

መደምደሚያ

የሊኑክስን ውስጣዊ አሠራር መረዳት የማይቻል ተግባር ሊመስል ይችላል፣ ምክንያቱም ኮርነሉ ራሱ ከፍተኛ መጠን ያለው ኮድ ስላለው፣ የሊኑክስ ተጠቃሚ ቦታ አፕሊኬሽኖችን እና የስርዓት ጥሪ በይነገጽ በሲ ቤተ-መጽሐፍት ውስጥ ትቶ glibc. እድገት ለማድረግ አንዱ መንገድ የአንድን የከርነል ንዑስ ስርዓት ምንጭ ኮድ ማንበብ ነው፣ የስርዓት ጥሪዎችን እና የተጠቃሚ-ቦታ ራስጌዎችን እንዲሁም እንደ ሠንጠረዥ ያሉ ዋና ዋና የከርነል በይነገጾችን መረዳት ላይ አጽንኦት በመስጠት ነው። file_operations. የፋይል ኦፕሬሽኖች "ሁሉም ነገር ፋይል ነው" የሚለውን መርህ ያቀርባል, ይህም ለማስተዳደር በጣም አስደሳች ያደርጋቸዋል. በከፍተኛ ደረጃ ማውጫ ውስጥ C የከርነል ምንጭ ፋይሎች fs/ በታዋቂ የፋይል ስርዓቶች እና የማከማቻ መሳሪያዎች መካከል ሰፊ እና በአንጻራዊነት ቀላል ተኳሃኝነትን የሚያቀርብ የቨርቹዋል ፋይል ስርዓቶችን ተግባራዊ ማድረግ። በሊኑክስ የስም ቦታዎች ማገናኘት እና መደራረብ ተነባቢ-ብቻ ኮንቴይነሮችን እና ስርወ የፋይል ስርዓቶችን መፍጠር የሚያስችል የቪኤፍኤስ አስማት ነው። ከምንጩ ኮድ፣ ከ eBPF ዋና መሣሪያ እና ከበይነገጹ ምርመራ ጋር ተጣምሮ bcc
ዋና ፍለጋን ከመቼውም ጊዜ በበለጠ ቀላል ማድረግ።

ጓደኞች ፣ ፃፉ ፣ ይህ ጽሑፍ ለእርስዎ ጠቃሚ ነበር? ምናልባት አስተያየት ወይም አስተያየት ይኖርህ ይሆን? እና በሊኑክስ አስተዳዳሪ ኮርስ ላይ ፍላጎት ያላቸው ተጋብዘዋል ክፍት ቀን, ይህም ሚያዝያ 18 ላይ ይካሄዳል.

የመጀመሪያ ክፍል.

ምንጭ: hab.com

አስተያየት ያክሉ