Ўсім прывітанне! Мы працягваем запускі новых патокаў па ўжо ўпадабаных вам курсах і зараз спяшаемся паведаміць аб тым, што ў нас стартуе новы набор па курсе.
Віртуальныя файлавыя сістэмы выконваюць ролю нейкай чароўнай абстракцыі, якая дазваляе філасофіі Linux казаць, што "ўсё з'яўляецца файлам".
Што такое файлавая сістэма? Абапіраючыся на словы аднаго з першых кантрыб'ютараў і аўтараў Linux
Асновы файлавай сістэмы
Ядро Linux мае пэўныя патрабаванні да сутнасці, якая можа лічыцца файлавай сістэмай. Яна павінна рэалізоўваць метады open()
, read()
и write()
для пастаянных аб'ектаў, якія маюць імёны. З пункту гледжання аб'ектна-арыентаванага
Калі мы можам адчыняць, чытаць і запісваць у сутнасць, то гэтая сутнасць лічыцца файлам, як мы бачым з прыкладу ў кансолі зверху.
Феномен VFS толькі падкрэслівае назіранне, характэрнае для Unix-падобных сістэм, якое абвяшчае, што "усё з'яўляецца файлам". Падумайце, наколькі дзіўна, што той маленькі прыклад зверху з /dev/console паказвае, як насамрэч працуе кансоль. На малюнку намалявана інтэрактыўная Bash сесія. Адпраўка радка ў кансоль (virtual console device) адлюстроўвае яе на віртуальным экране. VFS мае іншыя, яшчэ дзіўнейшыя ўласцівасці. Напрыклад, яна дае магчымасць ажыццяўляць пошук па
Знаёмыя нам сістэмы, такія як ext4, NFS і /proc маюць тры важныя функцыі ў структуры дадзеных З, якая завецца read()
адной файлавай сістэмы, а затым выкарыстоўваць метад write ()
іншы файлавай сістэмы для вываду дадзеных.
Азначэнні функцый, якія прыналежаць да базавых тыпаў VFS, знаходзяцца ў файлах fs/
утрымоўваюць вызначаныя файлавыя сістэмы. У ядры таксама змяшчаюцца сутнасці, такія як cgroups
, /dev
и tmpfs
, якія патрабуюцца ў працэсе загрузкі і таму вызначаюцца ў падкаталогу ядра init/
. Заўважце, што cgroups
, /dev
и tmpfs
не выклікаюць "вялікую тройку" функцый file_operations
, а наўпрост чытаюць і пішуць у памяць.
На прыведзенай ніжэй дыяграме паказана, як userspace звяртаецца да розных тыпаў файлавых сістэм, звычайна якія мантуюцца ў сістэмах 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
становіцца недаступнай для іншых мэт. Іншымі словамі, сістэма з гіганцкай tmpfs і вялікімі файламі ў ёй можа выдаткаваць усю памяць і зваліцца. Іншая падказка: падчас рэдагавання файла /etc/fstab
, памятаеце аб тым, што ён павінен заканчвацца новым радком, інакш ваша сістэма не загрузіцца.
/proc і /sys
Акрамя /tmp
, VFS (віртуальныя файлавыя сістэмы), якія найболей знаёмыя карыстачам Linux – гэта /proc
и /sys
, (/dev
размяшчаецца ў агульнай памяці і не мае file_operations
). Чаму менавіта гэтыя два кампаненты? Давайце разбяромся ў гэтым пытанні.
procfs
стварае здымак імгненнага стану ядра і працэсаў, якія ён кантралюе для userspace
. У /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»
у userspace. Адзіная мэта kobjects
- гэта падлік спасылак: калі выдаляецца апошняя спасылка на kobject, сістэма адновіць рэсурсы, звязаныя з ім. Тым не менш, /sys
складае большую частку знакамітага
Стабільны двайковы інтэрфейс прыкладанняў ядра (kernel's stable ABI) абмяжоўвае тое, што можа з'явіцца ў /sys
, а не тое, што на самой справе прысутнічае ў дадзены канкрэтны момант. Лістынг дазволаў на файлы ў sysfs забяспечвае разуменне таго, як канфігуруемыя параметры прылад, модуляў, файлавых сістэм і г.д. могуць быць настроены ці прачытаныя. Які робіцца лагічная выснова, што procfs таксама з'яўляецца часткай stable ABI ядра, хоць гэта не паказана відавочна ў
Файлы ў sysfs
апісваюць адну канкрэтную ўласцівасць для кожнай сутнасці і могуць быць чытэльнымі, перазапісвальнымі або і тое і іншае адразу. "0" у файле кажа аб тым, што SSD не можа быць выдалены.
Другую частку перакладу пачнем з таго, як назіраць за VFS з дапамогай інструментаў eBPF і bcc, а зараз чакаем вашыя каментары і традыцыйна запрашаем на
Крыніца: habr.com