அனைவருக்கும் வணக்கம், “லினக்ஸில் மெய்நிகர் கோப்பு முறைமைகள்: அவை ஏன் தேவைப்படுகின்றன, அவை எவ்வாறு செயல்படுகின்றன?” என்ற வெளியீட்டின் இரண்டாம் பகுதியை உங்களுடன் பகிர்ந்து கொள்கிறோம். முதல் பகுதியைப் படிக்கலாம்
eBPF மற்றும் bcc கருவிகளைப் பயன்படுத்தி VFS ஐ எவ்வாறு கண்காணிப்பது
கோப்புகளில் கர்னல் எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்வதற்கான எளிதான வழி sysfs
நடைமுறையில் அதைப் பார்ப்பது, மேலும் ARM64 ஐப் பார்ப்பதற்கான எளிதான வழி eBPF ஐப் பயன்படுத்துவதாகும். eBPF (Berkeley Packet Filter என்பதன் சுருக்கம்) இயங்கும் மெய்நிகர் இயந்திரத்தைக் கொண்டுள்ளது. query
) கட்டளை வரியிலிருந்து. கர்னல் என்ன செய்ய முடியும் என்பதை கர்னல் ஆதாரங்கள் வாசகரிடம் தெரிவிக்கின்றன; ஏற்றப்பட்ட கணினியில் eBPF கருவிகளை இயக்குவது கர்னல் உண்மையில் என்ன செய்கிறது என்பதைக் காட்டுகிறது.
அதிர்ஷ்டவசமாக, கருவிகளின் உதவியுடன் eBPF ஐப் பயன்படுத்தத் தொடங்குவது மிகவும் எளிதானது bcc
சி குறியீட்டின் சிறிய செருகல்கள் கொண்ட பைதான் ஸ்கிரிப்டுகள், அதாவது இரு மொழிகளையும் நன்கு அறிந்த எவரும் அவற்றை எளிதாக மாற்றலாம். 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 ()
இரண்டாவது கட்டளையில் மீண்டும் உருவாக்கப்பட வேண்டும், இதனால் வடிவமைப்பு சரம் அளவுருக்களில் ஒன்றைக் குறிக்கும். இந்த சி குறியீட்டில் உள்ள பிழைகள் சி கம்பைலரில் இருந்து அடையாளம் காணக்கூடிய பிழைகளை ஏற்படுத்துகின்றன. எடுத்துக்காட்டாக, -l அளவுரு தவிர்க்கப்பட்டால், "BPF உரையை தொகுக்க முடியவில்லை" என்று பார்ப்பீர்கள். சி மற்றும் பைத்தானை நன்கு அறிந்த டெவலப்பர்கள் கருவிகளைக் கண்டுபிடிப்பார்கள் bcc
விரிவாக்க மற்றும் மாற்ற எளிதானது.
யூ.எஸ்.பி டிரைவைச் செருகும்போது, பிஐடி 7711 ஒரு த்ரெட் என்பதை கர்னல் பேக்டிரேஸ் காட்டும். kworker
இது கோப்பை உருவாக்கியது «events»
в sysfs
. அதன்படி, இருந்து அழைப்பு sysfs_remove_files()
இயக்ககத்தை அகற்றுவதன் விளைவாக கோப்பு நீக்கப்பட்டதைக் காண்பிக்கும் events
, இது குறிப்பு எண்ணும் பொதுவான கருத்துக்கு ஒத்திருக்கிறது. அதே நேரத்தில், பார்ப்பது sysfs_create_link ()
eBPF உடன் USB டிரைவைச் செருகும் போது குறைந்தது 48 குறியீட்டு இணைப்புகள் உருவாக்கப்பட்டிருப்பதைக் காண்பிக்கும்.
எனவே நிகழ்வுகள் கோப்பின் பயன் என்ன? பயன்பாடு disk_add_events ()
, இது அல்லது அது "media_change"
, அல்லது "eject_request"
நிகழ்வு கோப்பில் பதிவு செய்யலாம். இங்கே கர்னல் பிளாக் லேயர் ஒரு "டிஸ்க்" தோன்றி வெளியேற்றப்பட்டதை பயனர்களுக்குத் தெரிவிக்கிறது. யூ.எஸ்.பி டிரைவைச் செருகுவதன் மூலம் இந்த ஆராய்ச்சி முறை எவ்வளவு தகவலறிந்ததாக உள்ளது என்பதைக் கவனியுங்கள், மூலத்திலிருந்து விஷயங்கள் எவ்வாறு செயல்படுகின்றன என்பதைக் கண்டறியும் முயற்சியுடன் ஒப்பிடும்போது.
படிக்க-மட்டும் ரூட் கோப்பு முறைமைகள் உட்பொதிக்கப்பட்ட சாதனங்களை இயக்கும்
நிச்சயமாக, சாக்கெட்டிலிருந்து பிளக்கை இழுப்பதன் மூலம் யாரும் சேவையகத்தையோ அல்லது அவர்களின் கணினியையோ அணைக்க மாட்டார்கள். ஆனால் ஏன்? ஏனென்றால், இயற்பியல் சேமிப்பக சாதனங்களில் ஏற்றப்பட்ட கோப்பு முறைமைகள் எழுதுவதில் பின்தங்கியிருக்கலாம், மேலும் அவற்றின் நிலையைப் பதிவுசெய்யும் தரவு கட்டமைப்புகள் சேமிப்பகத்திற்கான எழுத்துகளுடன் ஒத்திசைக்கப்படாமல் இருக்கலாம். இது நிகழும்போது, கணினி உரிமையாளர்கள் பயன்பாட்டைத் தொடங்க அடுத்த துவக்கம் வரை காத்திருக்க வேண்டும். fsck filesystem-recovery
மற்றும், மோசமான நிலையில், தரவு இழப்பு.
இருப்பினும், பல IoT சாதனங்கள், ரவுட்டர்கள், தெர்மோஸ்டாட்கள் மற்றும் கார்கள் இப்போது லினக்ஸை இயக்குகின்றன என்பதை நாம் அனைவரும் அறிவோம். இந்த சாதனங்களில் பல பயனர் இடைமுகம் குறைவாக உள்ளது, மேலும் அவற்றை "சுத்தமாக" அணைக்க வழி இல்லை. கட்டுப்பாட்டு அலகுக்கு மின்சாரம் இருக்கும்போது, இறந்த பேட்டரியுடன் காரைத் தொடங்குவதை கற்பனை செய்து பாருங்கள் fsck
இயந்திரம் இறுதியாக எப்போது இயங்கத் தொடங்குகிறது? மற்றும் பதில் எளிது. உட்பொதிக்கப்பட்ட சாதனங்கள் ரூட் கோப்பு முறைமையை நம்பியுள்ளன ro-rootfs
(படிக்க மட்டும் ரூட் கோப்பு முறைமை)).
ro-rootfs
நம்பகத்தன்மையை விட குறைவான வெளிப்படையான பல நன்மைகளை வழங்குகிறது. தீம்பொருளால் எழுத முடியாது என்பது ஒரு நன்மை /usr
அல்லது /lib
, எந்த லினக்ஸ் செயல்முறையும் அங்கு எழுத முடியாது. மற்றொன்று, தொலைதூர சாதனங்களின் புல ஆதரவுக்கு பெரிதும் மாறாத கோப்பு முறைமை முக்கியமானது, ஏனெனில் ஆதரவு பணியாளர்கள் புல அமைப்புகளுக்கு பெயரளவில் ஒத்த உள்ளூர் அமைப்புகளை நம்பியுள்ளனர். ஒருவேளை மிக முக்கியமான (ஆனால் மிகவும் நயவஞ்சகமான) நன்மை என்னவென்றால், ரோ-ரூட்ஃப்கள் டெவலப்பர்களை கணினியின் வடிவமைப்பு கட்டத்தில் எந்த கணினி பொருள்கள் மாறாமல் இருக்கும் என்பதை தீர்மானிக்க கட்டாயப்படுத்துகிறது. கான்ஸ்ட் மாறிகள் பெரும்பாலும் நிரலாக்க மொழிகளில் இருப்பதால், 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
கொள்கலனுக்குள், அல்லது அழைப்பைப் பொறுத்து அவற்றை மறைக்கவும்.
முடிவுக்கு
லினக்ஸின் உள் செயல்பாடுகளைப் புரிந்துகொள்வது சாத்தியமற்ற செயலாகத் தோன்றலாம், ஏனெனில் கர்னலில் ஒரு பெரிய அளவு குறியீடு உள்ளது, லினக்ஸ் பயனர் விண்வெளி பயன்பாடுகள் மற்றும் சி லைப்ரரிகளில் உள்ள கணினி அழைப்பு இடைமுகங்கள் glibc
. முன்னேற்றத்திற்கான ஒரு வழி, ஒரு கர்னல் துணை அமைப்பின் மூலக் குறியீட்டைப் படிப்பது, கணினி அழைப்புகள் மற்றும் பயனர்-வெளி தலைப்புகள் மற்றும் அட்டவணை போன்ற முக்கிய உள் கர்னல் இடைமுகங்களைப் புரிந்துகொள்வதில் முக்கியத்துவம் உள்ளது. file_operations
. கோப்பு செயல்பாடுகள் "எல்லாமே ஒரு கோப்பு" கொள்கையை வழங்குகின்றன, அவற்றை நிர்வகிப்பது மிகவும் சுவாரஸ்யமாக இருக்கும். சி கர்னல் மூலக் கோப்புகள் மேல்-நிலை கோப்பகத்தில் fs/
பிரபலமான கோப்பு முறைமைகள் மற்றும் சேமிப்பக சாதனங்களுக்கு இடையே பரந்த மற்றும் ஒப்பீட்டளவில் எளிமையான இணக்கத்தன்மையை வழங்கும் ஒரு ரேப்பர் லேயரான மெய்நிகர் கோப்பு முறைமைகளின் செயலாக்கத்தை முன்வைக்கிறது. லினக்ஸ் நேம்ஸ்பேஸ்கள் வழியாக இணைப்பு மற்றும் மேலடுக்கு மவுண்டிங் என்பது VFS இன் மந்திரம், இது படிக்க மட்டுமேயான கொள்கலன்கள் மற்றும் ரூட் கோப்பு முறைமைகளை உருவாக்குவதை சாத்தியமாக்குகிறது. மூலக் குறியீடு, eBPF மையக் கருவி மற்றும் அதன் இடைமுகம் ஆகியவற்றின் ஆய்வுடன் இணைந்து bcc
முக்கிய ஆய்வுகளை முன்னெப்போதையும் விட எளிதாக்குகிறது.
நண்பர்களே, எழுதுங்கள், இந்த கட்டுரை உங்களுக்கு பயனுள்ளதாக இருந்ததா? ஒருவேளை உங்களிடம் ஏதேனும் கருத்துகள் அல்லது கருத்துகள் உள்ளதா? மேலும் Linux Administrator படிப்பில் ஆர்வமுள்ளவர்கள் அழைக்கப்படுகிறார்கள்
ஆதாரம்: www.habr.com