Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Бәріңе сәлем! Біз сізге ғашық болған курстар үшін жаңа ағындарды шығаруды жалғастырамыз және енді біз жаңа курстар жинағын бастайтынымызды хабарлауға асығып отырмыз. «Linux әкімшісі»сәуір айының соңында іске қосылады. Бұл оқиға үшін жаңа басылым шығарылады. Түпнұсқа материалмен сіз жасай аласыз осы жерден оқыңыз.

Виртуалды файлдық жүйелер Linux философиясына «бәрі файл» деп айтуға мүмкіндік беретін сиқырлы абстракцияның бір түрі ретінде қызмет етеді.

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Файлдық жүйе дегеніміз не? Linux-тың алғашқы салымшылары мен авторларының бірінің сөздеріне негізделген Роберта Лава, "Файлдық жүйе - бұл белгілі бір құрылымға сәйкес жиналған деректердің иерархиялық сақтауы." Қалай болғанда да, бұл анықтама VFAT (Virtual File Allocation Table), Git және Кассандра (NoSQL деректер базасы). Сонымен, «файлдық жүйе» сияқты нәрсені нақты не анықтайды?

Файлдық жүйе негіздері

Linux ядросының файлдық жүйе деп санауға болатын нысанға белгілі талаптары бар. Ол әдістерді жүзеге асыруы керек open(), read() и write() атаулары бар тұрақты нысандар үшін. Объектіге бағытталған көзқарас тұрғысынан бағдарламалау, ядро ​​дерексіз интерфейс ретінде жалпы файлдық жүйені анықтайды және бұл үш үлкен функция «виртуалды» болып саналады және нақты анықтамасы жоқ. Тиісінше, әдепкі файлдық жүйені іске асыру виртуалды файлдық жүйе (VFS) деп аталады.

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Егер біз нысанды аша, оқи және жаза алатын болсақ, онда бұл нысан файл болып саналады, мұны жоғарыдағы консольдегі мысалдан көреміз.
VFS феномені «барлығы файл» деген Unix тәрізді бақылауды ғана көрсетеді. Жоғарыдағы шағын /dev/console мысалы консольдің қалай жұмыс істейтінін көрсететін қаншалықты таңқаларлық екенін ойлап көріңіз. Суретте интерактивті Bash сеансы көрсетілген. Жолды консольге жіберу (виртуалды консоль құрылғысы) оны виртуалды экранда көрсетеді. VFS басқа, тіпті бейтаныс қасиеттерге ие. Мысалы, ол бойынша іздеуге мүмкіндік береді ол.

Ext4, NFS және /proc сияқты таныс жүйелердің C деректер құрылымында үш маңызды функциясы бар. файл_операциялары. Сонымен қатар, белгілі бір файлдық жүйелер VFS функционалдығын таныс нысанға бағытталған жолмен кеңейтеді және қайта анықтайды. Роберт Лав атап өткендей, VFS абстракциясы Linux пайдаланушыларына файлдарды үшінші тарап операциялық жүйелеріне немесе құбырлар сияқты дерексіз нысандарға олардың ішкі деректер пішіміне алаңдамай көшіруге мүмкіндік береді. Пайдаланушы жағында (пайдаланушы кеңістігі) жүйелік шақыруды пайдалана отырып, процесс файлдан ядро ​​деректер құрылымдарына әдісті пайдалана отырып көшіре алады. read() бір файлдық жүйе, содан кейін әдісті пайдаланыңыз write () деректерді шығаруға арналған басқа файлдық жүйе.

Негізгі VFS түрлеріне жататын функция анықтамалары файлдарда бар fs/*.c ішкі каталогтар болса, ядроның бастапқы коды fs/ белгілі бір файлдық жүйелерді қамтиды. Сондай-ақ, ядро ​​сияқты нысандар бар cgroups, /dev и tmpfs, олар жүктеу процесі кезінде қажет, сондықтан ядроның ішкі каталогында анықталады init/. Соны байқа cgroups, /dev и tmpfs «Үлкен үш» функцияларды атамаңыз file_operations, бірақ жадқа тікелей оқу және жазу.
Төмендегі диаграмма пайдаланушы кеңістігі Linux жүйелерінде әдетте орнатылған файлдық жүйелердің әртүрлі түрлеріне қалай қол жеткізетінін көрсетеді. Құрылымдар көрсетілмеген pipes, dmesg и POSIX clocks, ол да құрылымды жүзеге асырады file_operations, VFS қабаты арқылы қол жеткізіледі.

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

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, иә?

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Бұл қойманы бәрі біледі / tmp физикалық ортада - ақылсыздық! Көзі.

Неліктен сақтау қажет емес /tmp физикалық медиада? Өйткені ішіндегі файлдар /tmp уақытша және сақтау құрылғылары tmpfs жасалған жадқа қарағанда баяуырақ. Сонымен қатар, физикалық медиа жадқа қарағанда қайта жазылған кезде тозуға бейім. Соңында, /tmp файлдарында құпия ақпарат болуы мүмкін, сондықтан оларды әрбір қайта жүктеу кезінде жоғалту маңызды мүмкіндік болып табылады.

Өкінішке орай, кейбір Linux таратуды орнату сценарийлері әдепкі бойынша сақтау құрылғысында /tmp жасайды. Бұл сіздің жүйеңізде де болса, үмітіңізді үзбеңіз. Бірнеше қарапайым нұсқауларды орындаңыз Arch Wikiоны түзету үшін және жадтың бөлінгенін ескеріңіз tmpfs басқа мақсаттар үшін қолжетімсіз болып қалады. Басқаша айтқанда, алып tmpf және үлкен файлдары бар жүйенің жады таусылып, істен шығуы мүмкін. Тағы бір кеңес: файлды өңдеу кезінде /etc/fstab, ол жаңа жолмен аяқталуы керек екенін есте сақтаңыз, әйтпесе жүйеңіз жүктелмейді.

/proc және /sys

одан басқа /tmp, Linux пайдаланушыларына ең таныс VFS (виртуалды файлдық жүйелер). /proc и /sys. (/dev ортақ жадта орналасады және жоқ file_operations). Неліктен бұл екі компонент? Осы мәселені қарастырайық.

procfs ядроның және ол бақылайтын процестердің суретін жасайды userspace. The /proc ядро үзілістер, виртуалды жад және жоспарлаушы сияқты қол жетімді ақпарат туралы ақпаратты басып шығарады. Сонымен қатар, /proc/sys пәрменмен конфигурацияланған параметрлердің орны болып табылады sysctl, үшін қолжетімді userspace. Жеке процестердің күйі мен статистикасы каталогтарда көрсетіледі /proc/.

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Бұл /proc/meminfo бос файл, соған қарамастан құнды ақпарат бар.

Мінез-құлық /proc файлдар VFS дискінің файлдық жүйелерінің әртүрлі болуы мүмкін екенін көрсетеді. Бір жағынан, /proc/meminfo пәрменімен көруге болатын ақпаратты қамтиды free. Екінші жағынан, ол бос! Бұл қалай жұмыс істейді? Жағдай деген атақты мақаланы еске түсіреді Айға ешкім қарамаса бар ма? Шындық және кванттық теория»Корнелл университетінің физика профессоры Дэвид Мермин 1985 жылы жазған. Мәселе мынада, ядро ​​сұрау жасалған кезде жад статистикасын жинайды /proc, және шын мәнінде файлдарда /proc ешкім қарамаған кезде ештеңе жоқ. Айтқандай Мермин, «Негізгі кванттық доктринада өлшеу әдетте өлшенетін мүліктің бұрыннан бар мәнін ашпайтынын айтады». (Ай туралы сұрақты үй тапсырмасы ретінде қарастырыңыз!)
Бос болып көрінетін procfs мағынасы бар, себебі ондағы ақпарат динамикалық. Сәл басқаша жағдай sysfs. Өлшемі кемінде бір байт болатын қанша файл бар екенін салыстырайық /proc мен /sys.

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Procfs бір файлы бар, атап айтқанда экспортталған ядро ​​конфигурациясы, ол ерекшелік болып табылады, себебі оны жүктеу үшін тек бір рет жасау қажет. Екінші жағынан, в /sys көптеген үлкенірек файлдар бар, олардың көпшілігі жадтың бүкіл бетін алады. Әдетте файлдар sysfs сияқты файлдарды оқудан алынған ақпарат кестелерінен айырмашылығы, дәл бір санды немесе жолды қамтиды /proc/meminfo.

Максат sysfs - ядро ​​шақыратын нәрсенің оқу/жазу қасиеттерін қамтамасыз ету «kobjects» пайдаланушы кеңістігінде. Жалғыз мақсат kobjects сілтеме санау болып табылады: кобъектке соңғы сілтеме жойылғанда, жүйе онымен байланысты ресурстарды қалпына келтіреді. Дегенмен, /sys атақтылардың көпшілігін құрайды «пайдаланушылар кеңістігі үшін тұрақты ABI» өзегі, оны ешкім ешқашан, кез келген жағдайда жасай алмайды «үзіліс». Бұл sysfs файлдарының статикалық екенін білдірмейді, бұл тұрақсыз нысандардың анықтамалық санауына сәйкес келмейді.
Ядроның тұрақты ABI ішінде не пайда болуы мүмкін екенін шектейді /sys, сол сәтте шын мәнінде бар нәрсе емес. Sysfs ішіндегі файл рұқсаттарының тізімі құрылғылардың, модульдердің, файлдық жүйелердің және т.б. үшін конфигурацияланатын параметрлерді түсінуге мүмкіндік береді. конфигурациялауға немесе оқуға болады. Логикалық қорытынды мынада: procfs сонымен қатар ядроның тұрақты ABI бөлігі болып табылады, бірақ бұл нақты көрсетілмеген. құжаттама.

Linux жүйесіндегі виртуалды файлдық жүйелер: олар не үшін қажет және олар қалай жұмыс істейді? 1 бөлім

Файлдар sysfs әрбір нысан үшін белгілі бір сипатты сипаттаңыз және оқылатын, жазылатын немесе екеуі де болуы мүмкін. Файлдағы «0» SSD дискісін жою мүмкін емес дегенді білдіреді.

Аударманың екінші бөлімін eBPF және bcc құралдары арқылы VFS бақылау жолынан бастайық, енді біз сіздің пікірлеріңізді күтеміз және дәстүрлі түрде сізді шақырамыз. ашық вебинар, ол 9 сәуірде оқытушымыз өткізеді - Владимир Дроздецкий.

Ақпарат көзі: www.habr.com

пікір қалдыру