ሰላም ለሁላችሁም፣ “ምናባዊ የፋይል ሲስተሞች በሊኑክስ፡ ለምን ያስፈልጋሉ እና እንዴት ይሰራሉ?” የሚለውን እትም ሁለተኛ ክፍል እናካፍላችኋለን። የመጀመሪያውን ክፍል ማንበብ ይችላሉ
ኢቢፒኤፍ እና ቢሲሲ መሳሪያዎችን በመጠቀም ቪኤፍኤስን እንዴት እንደሚቆጣጠሩ
ከርነል በፋይሎች ላይ እንዴት እንደሚሰራ ለመረዳት ቀላሉ መንገድ sysfs
በተግባር ማየት ነው፣ እና ARM64ን ለመመልከት ቀላሉ መንገድ eBPFን መጠቀም ነው። eBPF (ለበርክሌይ ፓኬት ማጣሪያ አጭር) ወደ ውስጥ የሚሄድ ምናባዊ ማሽንን ያካትታል query
) ከትእዛዝ መስመር. የከርነል ምንጮች ከርነል ምን ማድረግ እንደሚችሉ ለአንባቢው ይነግሩታል; የኢቢፒኤፍ መሳሪያዎችን በተጫነ ስርዓት ላይ ማስኬድ ከርነል ምን እየሰራ እንደሆነ ያሳያል።
እንደ እድል ሆኖ፣ eBPFን መጠቀም መጀመር በመሳሪያዎች እገዛ በጣም ቀላል ነው። bcc
የ Python ስክሪፕቶች ከትንሽ የ C ኮድ ጋር የተካተቱ ናቸው ፣ ይህ ማለት ሁለቱንም ቋንቋዎች የሚያውቅ ማንኛውም ሰው በቀላሉ ሊያስተካክላቸው ይችላል። ውስጥ bcc/tools
80 የፓይዘን ስክሪፕቶች አሉ፣ ይህ ማለት ምናልባት ገንቢ ወይም የስርዓት አስተዳዳሪ ለችግሩ መፍትሄ የሚሆን ነገር መምረጥ ይችላሉ።
ቪኤፍኤስ በሩጫ ሲስተም ላይ ምን እንደሚሠሩ ቢያንስ ላዩን ሀሳብ ለማግኘት ይሞክሩ vfscount
ወይም vfsstat
. ይህ በደርዘን የሚቆጠሩ ጥሪዎችን ያሳያል እንበል vfs_open()
እና "ጓደኞቹ" በየሰከንዱ በትክክል ይከሰታሉ.
vfsstat.py
በቀላሉ የVFS ተግባር ጥሪዎችን የሚቆጥር የሲ ኮድ ማስገቢያ ያለው የፓይዘን ስክሪፕት ነው።
የበለጠ ተራ ምሳሌ እንስጥ እና የዩኤስቢ ፍላሽ አንፃፊ ወደ ኮምፒውተር ስናስገባ እና ሲስተሙ ሲያገኘው ምን እንደሚፈጠር እንይ።
eBPFን በመጠቀም ምን እየተፈጠረ እንዳለ ማየት ይችላሉ።
/sys
የዩኤስቢ ፍላሽ አንፃፊ ሲገባ. ቀላል እና ውስብስብ ምሳሌ እዚህ ይታያል.
ከላይ በሚታየው ምሳሌ ውስጥ. bcc
መሣሪያ 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 ተምሳሌታዊ አገናኞች መፈጠሩን ያሳያል።
ስለዚህ የክስተቶች ፋይል ፋይዳ ምንድን ነው? አጠቃቀም 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
) የፋይል ስርዓት አይነት፣ ሊታሰር የሚችል ተራራ በ ውስጥ ተተግብሯል።
በተደራቢው እና ሊያያዝ በሚችለው ተራራ ገለፃ ላይ በመመስረት ማንም አያስገርምም። mountsnoop
от bcc
.
ግጥሚያ system-nspawn
በሚሮጥበት ጊዜ መያዣውን ይጀምራል mountsnoop.py
.
የሆነውን ነገር እንመልከት፡-
Запуск mountsnoop
ኮንቴይነሩ "ቡት" እያለ የእቃ መጫኛው የሩጫ ጊዜ በከፍተኛ ደረጃ በተገጠመለት ተራራ ላይ የተመሰረተ መሆኑን ያሳያል (የረጅም ጊዜ ውፅዓት መጀመሪያ ብቻ ነው የሚታየው).
ይህ ነው systemd-nspawn
ውስጥ የተመረጡ ፋይሎችን ያቀርባል procfs
и sysfs
ወደ መያዣው እንደ መንገዶች አስተናጋጅ rootfs
. በተጨማሪም MS_BIND
ማሰሪያውን የሚያዘጋጅ ባንዲራ፣ በተራራው ላይ ያሉ አንዳንድ ባንዲራዎች በአስተናጋጁ እና በመያዣው የስም ቦታዎች መካከል ያለውን ግንኙነት ይገልፃሉ። ለምሳሌ፣ የተገናኘ ተራራ ወይ ለውጦችን መዝለል ይችላል። /proc
и /sys
ወደ መያዣው ውስጥ, ወይም በጥሪው ላይ በመመስረት ይደብቋቸው.
መደምደሚያ
የሊኑክስን ውስጣዊ አሠራር መረዳት የማይቻል ተግባር ሊመስል ይችላል፣ ምክንያቱም ኮርነሉ ራሱ ከፍተኛ መጠን ያለው ኮድ ስላለው፣ የሊኑክስ ተጠቃሚ ቦታ አፕሊኬሽኖችን እና የስርዓት ጥሪ በይነገጽ በሲ ቤተ-መጽሐፍት ውስጥ ትቶ glibc
. እድገት ለማድረግ አንዱ መንገድ የአንድን የከርነል ንዑስ ስርዓት ምንጭ ኮድ ማንበብ ነው፣ የስርዓት ጥሪዎችን እና የተጠቃሚ-ቦታ ራስጌዎችን እንዲሁም እንደ ሠንጠረዥ ያሉ ዋና ዋና የከርነል በይነገጾችን መረዳት ላይ አጽንኦት በመስጠት ነው። file_operations
. የፋይል ኦፕሬሽኖች "ሁሉም ነገር ፋይል ነው" የሚለውን መርህ ያቀርባል, ይህም ለማስተዳደር በጣም አስደሳች ያደርጋቸዋል. በከፍተኛ ደረጃ ማውጫ ውስጥ C የከርነል ምንጭ ፋይሎች fs/
በታዋቂ የፋይል ስርዓቶች እና የማከማቻ መሳሪያዎች መካከል ሰፊ እና በአንጻራዊነት ቀላል ተኳሃኝነትን የሚያቀርብ የቨርቹዋል ፋይል ስርዓቶችን ተግባራዊ ማድረግ። በሊኑክስ የስም ቦታዎች ማገናኘት እና መደራረብ ተነባቢ-ብቻ ኮንቴይነሮችን እና ስርወ የፋይል ስርዓቶችን መፍጠር የሚያስችል የቪኤፍኤስ አስማት ነው። ከምንጩ ኮድ፣ ከ eBPF ዋና መሣሪያ እና ከበይነገጹ ምርመራ ጋር ተጣምሮ bcc
ዋና ፍለጋን ከመቼውም ጊዜ በበለጠ ቀላል ማድረግ።
ጓደኞች ፣ ፃፉ ፣ ይህ ጽሑፍ ለእርስዎ ጠቃሚ ነበር? ምናልባት አስተያየት ወይም አስተያየት ይኖርህ ይሆን? እና በሊኑክስ አስተዳዳሪ ኮርስ ላይ ፍላጎት ያላቸው ተጋብዘዋል
ምንጭ: hab.com