Бәріңе сәлем! Біз сізге ғашық болған курстар үшін жаңа ағындарды шығаруды жалғастырамыз және енді біз жаңа курстар жинағын бастайтынымызды хабарлауға асығып отырмыз.
Виртуалды файлдық жүйелер Linux философиясына «бәрі файл» деп айтуға мүмкіндік беретін сиқырлы абстракцияның бір түрі ретінде қызмет етеді.
Файлдық жүйе дегеніміз не? Linux-тың алғашқы салымшылары мен авторларының бірінің сөздеріне негізделген
Файлдық жүйе негіздері
Linux ядросының файлдық жүйе деп санауға болатын нысанға белгілі талаптары бар. Ол әдістерді жүзеге асыруы керек open()
, read()
и write()
атаулары бар тұрақты нысандар үшін. Объектіге бағытталған көзқарас тұрғысынан
Егер біз нысанды аша, оқи және жаза алатын болсақ, онда бұл нысан файл болып саналады, мұны жоғарыдағы консольдегі мысалдан көреміз.
VFS феномені «барлығы файл» деген Unix тәрізді бақылауды ғана көрсетеді. Жоғарыдағы шағын /dev/console мысалы консольдің қалай жұмыс істейтінін көрсететін қаншалықты таңқаларлық екенін ойлап көріңіз. Суретте интерактивті Bash сеансы көрсетілген. Жолды консольге жіберу (виртуалды консоль құрылғысы) оны виртуалды экранда көрсетеді. VFS басқа, тіпті бейтаныс қасиеттерге ие. Мысалы, ол бойынша іздеуге мүмкіндік береді
Ext4, NFS және /proc сияқты таныс жүйелердің C деректер құрылымында үш маңызды функциясы бар. read()
бір файлдық жүйе, содан кейін әдісті пайдаланыңыз write ()
деректерді шығаруға арналған басқа файлдық жүйе.
Негізгі VFS түрлеріне жататын функция анықтамалары файлдарда бар fs/
белгілі бір файлдық жүйелерді қамтиды. Сондай-ақ, ядро сияқты нысандар бар cgroups
, /dev
и tmpfs
, олар жүктеу процесі кезінде қажет, сондықтан ядроның ішкі каталогында анықталады init/
. Соны байқа cgroups
, /dev
и tmpfs
«Үлкен үш» функцияларды атамаңыз file_operations
, бірақ жадқа тікелей оқу және жазу.
Төмендегі диаграмма пайдаланушы кеңістігі Linux жүйелерінде әдетте орнатылған файлдық жүйелердің әртүрлі түрлеріне қалай қол жеткізетінін көрсетеді. Құрылымдар көрсетілмеген pipes
, dmesg
и POSIX clocks
, ол да құрылымды жүзеге асырады file_operations
, VFS қабаты арқылы қол жеткізіледі.
VFS – жүйелік шақырулар мен белгілі бір іске асырулар арасындағы «орау қабаты». file_operations
, сияқты ext4
и procfs
. Функциялар file_operations
құрылғы драйверлерімен немесе жадқа кіру құрылғыларымен өзара әрекеттесе алады. tmpfs
, devtmpfs
и cgroups
қолданбаңыз file_operations
, бірақ жадқа тікелей қол жеткізу.
VFS бар болуы кодты қайта пайдалану мүмкіндігін береді, өйткені файлдық жүйелермен байланысты негізгі әдістерді файлдық жүйенің әрбір түрі үшін қайта енгізу қажет емес. Кодты қайта пайдалану - бағдарламалық жасақтама инженерлері арасында кең таралған тәжірибе! Дегенмен, егер қайта пайдалануға болатын кодта болса
/tmp: Қарапайым кеңес
Жүйеде VFS бар екенін анықтаудың оңай жолы - теру mount | grep -v sd | grep -v :/
, ол барлық орнатылғандарды көрсетеді (mounted
) дискіде резидент емес және NFS емес файлдық жүйелер, бұл көптеген компьютерлерде дұрыс. Тізімдегі тіректердің бірі (mounts
) VFS сөзсіз /tmp
, иә?
Бұл қойманы бәрі біледі / tmp
физикалық ортада - ақылсыздық!
Неліктен сақтау қажет емес /tmp
физикалық медиада? Өйткені ішіндегі файлдар /tmp
уақытша және сақтау құрылғылары tmpfs жасалған жадқа қарағанда баяуырақ. Сонымен қатар, физикалық медиа жадқа қарағанда қайта жазылған кезде тозуға бейім. Соңында, /tmp файлдарында құпия ақпарат болуы мүмкін, сондықтан оларды әрбір қайта жүктеу кезінде жоғалту маңызды мүмкіндік болып табылады.
Өкінішке орай, кейбір Linux таратуды орнату сценарийлері әдепкі бойынша сақтау құрылғысында /tmp жасайды. Бұл сіздің жүйеңізде де болса, үмітіңізді үзбеңіз. Бірнеше қарапайым нұсқауларды орындаңыз tmpfs
басқа мақсаттар үшін қолжетімсіз болып қалады. Басқаша айтқанда, алып tmpf және үлкен файлдары бар жүйенің жады таусылып, істен шығуы мүмкін. Тағы бір кеңес: файлды өңдеу кезінде /etc/fstab
, ол жаңа жолмен аяқталуы керек екенін есте сақтаңыз, әйтпесе жүйеңіз жүктелмейді.
/proc және /sys
одан басқа /tmp
, Linux пайдаланушыларына ең таныс VFS (виртуалды файлдық жүйелер). /proc
и /sys
. (/dev
ортақ жадта орналасады және жоқ file_operations
). Неліктен бұл екі компонент? Осы мәселені қарастырайық.
procfs
ядроның және ол бақылайтын процестердің суретін жасайды userspace
. The /proc
ядро үзілістер, виртуалды жад және жоспарлаушы сияқты қол жетімді ақпарат туралы ақпаратты басып шығарады. Сонымен қатар, /proc/sys
пәрменмен конфигурацияланған параметрлердің орны болып табылады sysctl
, үшін қолжетімді userspace
. Жеке процестердің күйі мен статистикасы каталогтарда көрсетіледі /proc/
.
Бұл /proc/meminfo
бос файл, соған қарамастан құнды ақпарат бар.
Мінез-құлық /proc
файлдар VFS дискінің файлдық жүйелерінің әртүрлі болуы мүмкін екенін көрсетеді. Бір жағынан, /proc/meminfo
пәрменімен көруге болатын ақпаратты қамтиды free
. Екінші жағынан, ол бос! Бұл қалай жұмыс істейді? Жағдай деген атақты мақаланы еске түсіреді /proc
, және шын мәнінде файлдарда /proc
ешкім қарамаған кезде ештеңе жоқ. Айтқандай
Бос болып көрінетін procfs
мағынасы бар, себебі ондағы ақпарат динамикалық. Сәл басқаша жағдай sysfs
. Өлшемі кемінде бір байт болатын қанша файл бар екенін салыстырайық /proc
мен /sys
.
Procfs
бір файлы бар, атап айтқанда экспортталған ядро конфигурациясы, ол ерекшелік болып табылады, себебі оны жүктеу үшін тек бір рет жасау қажет. Екінші жағынан, в /sys
көптеген үлкенірек файлдар бар, олардың көпшілігі жадтың бүкіл бетін алады. Әдетте файлдар sysfs
сияқты файлдарды оқудан алынған ақпарат кестелерінен айырмашылығы, дәл бір санды немесе жолды қамтиды /proc/meminfo
.
Максат sysfs
- ядро шақыратын нәрсенің оқу/жазу қасиеттерін қамтамасыз ету «kobjects»
пайдаланушы кеңістігінде. Жалғыз мақсат kobjects
сілтеме санау болып табылады: кобъектке соңғы сілтеме жойылғанда, жүйе онымен байланысты ресурстарды қалпына келтіреді. Дегенмен, /sys
атақтылардың көпшілігін құрайды
Ядроның тұрақты ABI ішінде не пайда болуы мүмкін екенін шектейді /sys
, сол сәтте шын мәнінде бар нәрсе емес. Sysfs ішіндегі файл рұқсаттарының тізімі құрылғылардың, модульдердің, файлдық жүйелердің және т.б. үшін конфигурацияланатын параметрлерді түсінуге мүмкіндік береді. конфигурациялауға немесе оқуға болады. Логикалық қорытынды мынада: procfs сонымен қатар ядроның тұрақты ABI бөлігі болып табылады, бірақ бұл нақты көрсетілмеген.
Файлдар sysfs
әрбір нысан үшін белгілі бір сипатты сипаттаңыз және оқылатын, жазылатын немесе екеуі де болуы мүмкін. Файлдағы «0» SSD дискісін жою мүмкін емес дегенді білдіреді.
Аударманың екінші бөлімін eBPF және bcc құралдары арқылы VFS бақылау жолынан бастайық, енді біз сіздің пікірлеріңізді күтеміз және дәстүрлі түрде сізді шақырамыз.
Ақпарат көзі: www.habr.com