Системаҳои файлии виртуалӣ дар Linux: чаро онҳо лозиманд ва онҳо чӣ гуна кор мекунанд? Қисми 2

Салом ба ҳама, мо бо шумо қисми дуюми нашрияи "Системаҳои файлии виртуалӣ дар Linux: чаро онҳо лозиманд ва чӣ гуна кор мекунанд?" Шумо метавонед қисми аввалро хонед дар ин ҷо. Ёдовар мешавем, ки ин силсилаи нашрияҳо ба муносибати ифтитоҳи ҷараёни нав дар курс пешбинӣ шудааст "Администратори Linux", ки хеле зуд оғоз меёбад.

Чӣ тавр VFS-ро бо истифода аз абзорҳои eBPF ва bcc назорат кардан мумкин аст

Роҳи осонтарини фаҳмидани он, ки ядро ​​дар файлҳо чӣ гуна кор мекунад sysfs дидани он дар амал аст ва роҳи осонтарини тамошои ARM64 ин истифодаи eBPF мебошад. eBPF (кӯтоҳ барои Berkeley Packet Filter) аз мошини виртуалӣ иборат аст, ки дар он кор мекунад аслӣ, ки корбарони имтиёздор метавонанд дархост кунанд (query) аз сатри фармон. Сарчашмаҳои ядро ​​​​ба хонанда мегӯянд, ки ядро ​​чӣ кор карда метавонад; кор кардани асбобҳои eBPF дар системаи пурбор нишон медиҳад, ки ядро ​​​​воқеан чӣ кор мекунад.

Системаҳои файлии виртуалӣ дар Linux: чаро онҳо лозиманд ва онҳо чӣ гуна кор мекунанд? Қисми 2

Хушбахтона, оғози истифодаи eBPF бо ёрии асбобҳо хеле осон аст нусхабардорӣ, ки ҳамчун бастаҳо аз тақсимоти умумӣ дастрасанд Linux ва муфассал ҳуҷҷатгузорӣ шудааст Бернард Грег. Воситаҳо bcc скриптҳои Python бо воридкунии хурди рамзи C мебошанд, ки маънои онро дорад, ки ҳар касе, ки бо ҳарду забон шинос аст, метавонад онҳоро ба осонӣ тағир диҳад. ДАР bcc/tools 80 скрипти Python вуҷуд дорад, ки ин маънои онро дорад, ки эҳтимолан таҳиягар ё мудири система метавонад чизи мувофиқро барои ҳалли мушкилот интихоб кунад.
Барои гирифтани ҳадди ақалл тасаввуроти рӯякӣ дар бораи он, ки VFS дар системаи коркунанда чӣ кор мекунад, кӯшиш кунед vfscount ё vfsstat. Ин нишон медихад, ки гуем, даххо занг vfs_open() ва «дӯстони ӯ» айнан ҳар сония рӯй медиҳанд.

Системаҳои файлии виртуалӣ дар Linux: чаро онҳо лозиманд ва онҳо чӣ гуна кор мекунанд? Қисми 2

vfsstat.py як скрипти Python бо воридкунии рамзи C мебошад, ки зангҳои функсияи VFS-ро танҳо ҳисоб мекунад.

Биёед мисоли ночизтаре диҳем ва бубинем, ки вақте мо флеши USB-ро ба компютер ворид мекунем ва система онро муайян мекунад, чӣ мешавад.

Системаҳои файлии виртуалӣ дар Linux: чаро онҳо лозиманд ва онҳо чӣ гуна кор мекунанд? Қисми 2

Бо истифода аз eBPF шумо метавонед бубинед, ки дар он чӣ рӯй дода истодааст /sysвақте ки диски флеши USB ҷойгир карда мешавад. Як мисоли оддӣ ва мураккаб дар ин ҷо нишон дода шудааст.

Дар мисоли дар боло нишон додашуда, bcc восита trace.py вақте ки фармон иҷро мешавад, паём чоп мекунад sysfs_create_files(). Мо инро мебинем sysfs_create_files() ба истифода дода шуд kworker ҷараёнро дар посух ба он, ки флешдор гузошта шудааст, аммо кадом файл офарида шудааст? Мисоли дуюм қудрати eBPF-ро нишон медиҳад. Ин ҷо trace.py Бозгашти ядро ​​(опсияи -K) ва номи файли сохташударо чоп мекунад sysfs_create_files(). Воридкунии изҳороти ягона рамзи C мебошад, ки сатри формати ба осонӣ шинохташавандаро дар бар мегирад, ки аз ҷониби скрипти Python пешниҳод шудааст, ки LLVM-ро идора мекунад компилятори сари вақт. Он ин сатрро тартиб медиҳад ва онро дар мошини виртуалӣ дар дохили ядро ​​иҷро мекунад. Имзои пурраи функсия sysfs_create_files () бояд дар фармони дуюм такрор карда шавад, то сатри формат метавонад ба яке аз параметрҳо муроҷиат кунад. Хатогиҳо дар ин порчаи рамзи C боиси хатогиҳои шинохташавандаи компилятори C мешаванд. Масалан, агар параметри -l партофта шуда бошад, шумо хоҳед дид, ки "Матни BPF тартиб дода нашуд." Таҳиягароне, ки бо C ва Python шиносанд, асбобҳоро пайдо мекунанд bcc васеъ кардан ва тагйир додан осон аст.

Вақте ки диски USB ҷойгир карда мешавад, паси ядро ​​нишон медиҳад, ки PID 7711 ришта аст kworkerки файлро офаридааст «events» в sysfs. Мувофики он занг аз sysfs_remove_files() нишон медиҳад, ки хориҷ кардани диск боиси нест шудани файл шудааст events, ки ба консепсияи умумии ҳисобкунии истинодҳо мувофиқат мекунад. Дар баробари ин тамошо sysfs_create_link () бо eBPF ҳангоми ворид кардани диски USB нишон медиҳад, ки ҳадди аққал 48 истинодҳои рамзӣ сохта шудаанд.

Пас, нуқтаи файли рӯйдодҳо чист? Истифода cscope Барои ҷустуҷӯ __device_add_disk(), нишон медиҳад, ки он чиро ба вуҷуд меорад disk_add_events (), ва ё "media_change", ё "eject_request" дар файли ҳодиса сабт кардан мумкин аст. Дар ин ҷо қабати блоки ядро ​​​​ба фазои корбарон хабар медиҳад, ки "диск" пайдо ва хориҷ карда шудааст. Аҳамият диҳед, ки ин усули тадқиқот тавассути ворид кардани диски USB то чӣ андоза иттилоотӣ аст, дар муқоиса бо кӯшиши фаҳмидани он, ки корҳо аз манбаъ чӣ гуна кор мекунанд.

Системаҳои файлии решавӣ танҳо барои хондан ба дастгоҳҳои дарунсохт имкон медиҳанд

Албатта, ҳеҷ кас сервер ё компютери худро бо кашидани сими розетка хомӯш намекунад. Аммо барои чӣ? Сабаб дар он аст, ки системаҳои файлии васлшуда дар дастгоҳҳои нигаҳдории физикӣ метавонанд дар навиштаҷот ақиб монда бошанд ва сохторҳои маълумоте, ки ҳолати онҳоро сабт мекунанд, бо навиштан ба анбор ҳамоҳанг карда намешаванд. Вақте ки ин рӯй медиҳад, соҳибони система бояд то бори дигар интизор шаванд, то утилитаро оғоз кунанд. fsck filesystem-recovery ва дар бадтарин ҳолат, гум кардани маълумот.

Аммо, ҳамаи мо медонем, ки бисёре аз дастгоҳҳои IoT, инчунин роутерҳо, термостатҳо ва мошинҳо ҳоло Linux-ро идора мекунанд. Бисёре аз ин дастгоҳҳо интерфейси корбар надоранд ва ҳеҷ роҳе барои хомӯш кардани онҳо "тоза" нест. Тасаввур кунед, ки вақте ки қувваи барқ ​​ба шӯъбаи идоракунӣ мавҷуд аст, мошинро бо батареяи мурда оғоз кунед Linux пайваста ба боло ва поён ҷаҳида. Чӣ тавр он аст, ки система бе тӯлонӣ пурбор мешавад fsckмуҳаррик кай ба кор шурӯъ мекунад? Ва ҷавоб оддӣ аст. Дастгоҳҳои дарунсохт ба системаи файлии реша такя мекунанд танҳо барои хондан (ихтисоршуда) ro-rootfs (системаи файлии решавӣ танҳо барои хондан)).

ro-rootfs бартариҳои зиёде пешниҳод мекунанд, ки нисбат ба ҳаққоният камтар аёнанд. Як бартарият дар он аст, ки нармафзори зараровар ба он навишта наметавонад /usr ё /lib, агар ягон раванди Linux дар он ҷо навишта наметавонад. Дигар ин аст, ки системаи файлии асосан тағйирнопазир барои дастгирии саҳроии дастгоҳҳои дурдаст муҳим аст, зеро кормандони дастгирӣ ба системаҳои маҳаллӣ, ки номиналӣ ба системаҳои саҳроӣ шабеҳанд, такя мекунанд. Шояд манфиати муҳимтарин (вале аз ҳама маккорона) он аст, ки ro-rootfs таҳиягаронро маҷбур мекунад, ки қарор кунанд, ки кадом объектҳои система дар марҳилаи тарҳрезии система тағирнопазир хоҳанд буд. Кор бо ro-rootfs метавонад заҳматталаб ва дардовар бошад, зеро тағирёбандаҳои const аксар вақт дар забонҳои барномасозӣ ҳастанд, аммо манфиатҳои онҳо хароҷоти иловагиро ба осонӣ сафед мекунанд.

офариниш rootfs Барои таҳиягарони дохилшуда танҳо барои хондан як кӯшиши иловагиро талаб мекунад ва дар ин ҷо VFS ба расм меояд. Linux талаб мекунад, ки файлҳо дар /var навишташаванда буданд ва илова бар ин, бисёре аз барномаҳои маъмуле, ки системаҳои дарунсохтро иҷро мекунанд, кӯшиш мекунанд, ки конфигуратсия эҷод кунанд dot-files в $HOME. Як ҳалли файлҳои конфигуратсия дар феҳристи хонагӣ одатан пеш аз тавлид ва сохтани онҳо мебошад rootfs. барои /var Як равиши имконпазир ин аст, ки онро дар як қисмати алоҳидаи навишташаванда насб кунед, дар ҳоле ки / танҳо барои хондан насб карда шудааст. Дигар алтернативаи маъмул ин истифода бурдани васлкунакҳо ё қабати болопӯшӣ мебошад.

Дастгоҳҳои пайвастшаванда ва stackable, истифодаи онҳо дар контейнерҳо

Иҷрои фармон man mount роҳи беҳтарини омӯхтани васлҳои ҳатмӣ ва такроршаванда мебошад, ки ба таҳиягарон ва маъмурони система имкон медиҳад, ки системаи файлиро дар як роҳ эҷод кунанд ва сипас онро ба замимаҳо дар роҳи дигар фош кунанд. Барои системаҳои дарунсохт, ин маънои қобилияти нигоҳ доштани файлҳоро дар /var дар флеши танҳо барои хондан, аммо қабати болопӯш ё роҳи пайвастшаванда аз tmpfs в /var ҳангоми боркунӣ, он ба барномаҳо имкон медиҳад, ки дар он ҷо қайдҳо нависанд (скрол). Дафъаи дигар, ки шумо тағиротро ба кор меандозед /var гум мешавад. Монтажи қабати байни онҳо иттиҳодия эҷод мекунад tmpfs ва системаи файлии аслӣ ва ба шумо имкон медиҳад, ки ба файлҳои мавҷуда дар ro-tootf дар ҳоле, ки монтажи ҳатмӣ метавонад навҳоро холӣ кунад tmpfs ҷузвдонҳое, ки дар онҳо навиштан мумкин аст ro-rootfs роххо. Дар ҳоле ки overlayfs ин дуруст аст (proper) навъи системаи файлӣ, пайвасти ҳатмӣ дар амалӣ карда мешавад Фазои номи VFS.

Дар асоси тавсифи қабати болопӯш ва васлшаванда, ҳеҷ кас ҳайрон нест Контейнерҳои Linux аз онхо фаъолона истифода бурда мешаванд. Биёед бубинем, ки вақте ки мо истифода мебарем, чӣ мешавад systemd-nspawn ба кор андохтани зарф бо воситаи асбоб mountsnoop аз он bcc.

Мушкилот system-nspawn контейнерро ҳангоми кор оғоз мекунад mountsnoop.py.

Биёед бубинем, ки чӣ шуд:

Запуск mountsnoop дар ҳоле ки контейнер "бор карда истодааст" нишон медиҳад, ки вақти кори контейнер аз васлшаванда вобаста аст (Танҳо оғози баромади дароз нишон дода шудааст).

Ин аст, systemd-nspawn файлҳои интихобшударо дар procfs и sysfs мизбон ба контейнер ҳамчун роҳ ба он rootfs. Ба истиснои MS_BIND парчам, ки монтажи ҳатмиро муқаррар мекунад, баъзе парчамҳои дигар дар mount муносибати байни тағиротро дар фазои номҳои ҳост ва контейнер муайян мекунанд. Масалан, васлаки пайвастшуда метавонад ё тағиротро ба он гузаред /proc и /sys ба контейнер гузоред ё вобаста ба занг онҳоро пинҳон кунед.

хулоса

Фаҳмидани кори ботинии Linux метавонад кори ғайриимкон ба назар расад, зеро худи ядро ​​миқдори зиёди кодро дар бар мегирад ва замимаҳои фазои корбарии Linux ва интерфейсҳои занги системаро дар китобхонаҳои C, ба монанди glibc. Яке аз роҳҳои пешрафт ин хондани рамзи сарчашмаи як зерсистемаи ядро ​​бо таваҷҷӯҳ ба фаҳмидани зангҳои система ва сарлавҳаҳои фазои корбар ва инчунин интерфейсҳои асосии дохилии ядро, ба монанди ҷадвал мебошад. file_operations. Амалиётҳои файлӣ принсипи "ҳама чиз як файл аст" -ро таъмин намуда, идоракунии онҳоро махсусан ҷолиб мегардонад. Файлҳои сарчашмаи ядрои C дар директорияи сатҳи боло fs/ татбиқи системаҳои файлии маҷозӣ, ки як қабати бастабандӣ мебошанд, ки мутобиқати васеъ ва нисбатан соддаро байни системаҳои маъмули файлӣ ва дастгоҳҳои нигаҳдорӣ таъмин мекунанд. Пайвастшавӣ ва васлкунӣ тавассути фазоҳои номҳои Linux ҷодугарии VFS мебошад, ки сохтани контейнерҳо ва системаҳои файлии решаро имконпазир месозад. Дар якҷоягӣ бо санҷиши рамзи сарчашма, воситаи асосии eBPF ва интерфейси он bcc
кофтукови ядроиро беш аз пеш осонтар мекунад.

Дӯстон, нависед, оё ин мақола барои шумо муфид буд? Шояд шумо ягон шарҳ ё изҳорот дошта бошед? Ва онҳое, ки ба курси Administrator Linux таваҷҷӯҳ доранд, даъват карда мешаванд рӯзи кушода, ки 18 апрель барпо мегардад.

Қисми якум.

Манбаъ: will.com

Илова Эзоҳ