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

Салом ба ҳама! Мо оғоз кардани ҷараёнҳои навро барои курсҳое, ки шумо аллакай ба онҳо ошиқ шудаед, идома медиҳем ва ҳоло мо шитоб дорем эълон кунем, ки маҷмӯи нави курсҳоро оғоз мекунем. "Администратори Linux"ки дар охири мохи апрель ба истифода дода мешавад. Барои ин чорабинӣ нашрияи нав нашр мешавад. Бо маводи аслӣ, шумо метавонед инҷо хонед.

Системаҳои файлии виртуалӣ ҳамчун як навъ абстраксияи ҷодугарӣ хидмат мекунанд, ки ба фалсафаи Linux имкон медиҳад, ки "ҳама чиз файл аст".

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

Системаи файлӣ чист? Бар асоси суханони яке аз аввалин саҳмгузорон ва муаллифони Linux Роберта Лава, "Системаи файлӣ ин нигоҳдории иерархивии додаҳост, ки мувофиқи сохтори мушаххас ҷамъ оварда шудаанд." Новобаста аз он, ки ин таъриф ба VFAT (Ҷадвали тақсимоти файлҳои виртуалӣ), 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, VFS (системаҳои файлии виртуалӣ), ки барои корбарони Linux бештар шиносанд /proc и /sys. (/dev дар хотираи муштарак ҷойгир аст ва надорад file_operations). Чаро ин ду компонент? Биёед ин масъаларо дида бароем.

procfs тасвири ядро ​​ва равандҳои назоратшавандаро эҷод мекунад userspace. Дар /proc ядро маълумотро дар бораи он чизе, ки дар он мавҷуд аст, чоп мекунад, ба монанди қатъкунӣ, хотираи виртуалӣ ва нақшакаш. Гайр аз ин, /proc/sys ҷойест, ки параметрҳо бо фармон танзим карда мешаванд sysctl, дастрас барои userspace. Ҳолат ва омори равандҳои алоҳида дар феҳристҳо нишон дода мешаванд /proc/.

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

Ин аст, /proc/meminfo файли холӣ аст, ки бо вуҷуди ин дорои маълумоти арзишманд аст.

Behavior /proc файлҳо нишон медиҳанд, ки чӣ тавр системаҳои файлии диски VFS гуногун буда метавонанд. Аз як тараф, /proc/meminfo дорои маълумотест, ки онҳоро бо фармон дидан мумкин аст free. Аз тарафи дигар, он холӣ аст! Он чӣ гуна кор мекунад? Вазъият маколаи машхурро ба хотир меорад Оё моҳ вуҷуд дорад, вақте ки касе ба он нигоҳ намекунад? Воқеият ва назарияи квантӣ»аз ҷониби профессори физикаи Донишгоҳи Корнелл Дэвид Мермин соли 1985 навишта шудааст. Гап дар он аст, ки ядро ​​ҳангоми дархост ба он омори хотира ҷамъоварӣ мекунад /proc, ва дар асл дар файлҳо /proc чизе нест, вақте ки касе нигоҳ намекунад. Чунон ки гуфта шуд Мермин, "Доктринаи фундаменталии квантӣ мегӯяд, ки андозагирӣ умуман арзиши қаблан мавҷудбудаи амволи ченшавандаро ошкор намекунад." (Ва саволро дар бораи моҳ ҳамчун вазифаи хонагӣ баррасӣ кунед!)
Ба назар холӣ procfs маъно дорад, зеро маълумот дар он ҷо динамикӣ аст. Вазъияти каме дигар бо sysfs. Биёед муқоиса кунем, ки дар ҳаҷми ҳадди аққал як байт чанд файл мавҷуд аст /proc ва дар /sys.

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

Procfs дорои як файл, яъне конфигуратсияи ядрои содиршуда, ки ин истисно аст, зеро он бояд танҳо як бор дар як боркунӣ тавлид шавад. Аз тарафи дигар, дар /sys бисёр файлҳои калонтар вуҷуд доранд, ки бисёре аз онҳо як саҳифаи тамоми хотираро ишғол мекунанд. Одатан файлҳо sysfs Бар хилофи ҷадвалҳои иттилооте, ки аз хондани файлҳо ба даст омадаанд, маҳз як рақам ё сатрро дар бар мегирад /proc/meminfo.

Мақсад sysfs - хосиятҳои хондан/навиштаи он чизеро, ки ядро ​​даъват мекунад, таъмин кунед «kobjects» дар фазои корбарон. Ягона мақсад kobjects ҳисоб кардани истинод аст: вақте ки пайванди охирин ба kobject хориҷ карда мешавад, система захираҳои бо он алоқамандро барқарор мекунад. Бо вуҷуди ин, /sys аксарияти машхурро ташкил медихад "ABI устувор барои фазои корбарон" аслӣ, ки ҳеҷ кас ҳеҷ гоҳ наметавонад, дар ҳеҷ шароит "танаффус". Ин маънои онро надорад, ки файлҳои sysfs статикӣ мебошанд, ки бо ҳисобкунии истинодҳои объектҳои ноустувор мувофиқат намекунад.
ABI устувори ядро ​​он чизеро, ки дар он пайдо шуда метавонад, маҳдуд мекунад /sys, на он чизе ки воқеан дар он лаҳза мавҷуд аст. Рӯйхати иҷозатҳои файл дар sysfs фаҳмишро дар бораи он, ки чӣ гуна танзимоти конфигуратсияшаванда барои дастгоҳҳо, модулҳо, системаҳои файлӣ ва ғайра фароҳам меорад. конфигуратсия кардан ё хондан мумкин аст. Хулосаи мантиқӣ ин аст, ки procfs инчунин як қисми устувори ядрои ABI мебошад, гарчанде ки ин дар возеҳ гуфта нашудааст хуччатхо.

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

Файлҳо дар sysfs як моликияти мушаххасро барои ҳар як объект тавсиф мекунад ва метавонад хониш, навиштан ё ҳарду бошад. "0" дар файл маънои онро дорад, ки SSD нест карда намешавад.

Биёед қисми дуюми тарҷумаро бо чӣ гуна назорат кардани VFS бо истифода аз абзорҳои eBPF ва bcc оғоз кунем ва ҳоло мо шарҳҳои шуморо интизорем ва шуморо ба таври анъанавӣ даъват мекунем вебинар кушод, ки онро муаллими мо 9 апрель мегузаронад - Владимир Дроздецкий.

Манбаъ: will.com

Илова Эзоҳ