Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

Moni nonse! Tikupitiriza kuyambitsa mitsinje yatsopano ya maphunziro omwe mwawakonda kale ndipo tsopano tikufulumira kulengeza kuti tikuyamba maphunziro atsopano. "Linux Administrator"yomwe idzayambike kumapeto kwa April. Kusindikiza kwatsopano kudzalembedwa pamwambowu. Ndi zinthu zoyambirira, mungathe werengani apa.

Mafayilo owoneka bwino amakhala ngati mawonekedwe amatsenga omwe amalola filosofi ya Linux kunena kuti "chilichonse ndi fayilo."

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

Kodi file system ndi chiyani? Kutengera mawu a m'modzi mwa omwe adathandizira komanso olemba a Linux Roberta Lava, "Fayilo yamafayilo ndi malo osungirako deta omwe amasonkhanitsidwa molingana ndi dongosolo linalake." Zikhale momwe zingakhalire, tanthauzo ili ndiloyeneranso VFAT (Virtual File Allocation Table), Git ndi Cassandra (NoSQL database). Ndiye chimatanthauza chiyani kwenikweni ngati "fayilo system"?

Filesystem Basics

Linux kernel ili ndi zofunikira zina pagulu lomwe lingatengedwe ngati fayilo. Iyenera kukhazikitsa njira open(), read() ΠΈ write() kwa zinthu zolimbikira zomwe zili ndi mayina. Kuchokera pamalingaliro olunjika mapulogalamu, kernel imatanthawuza mawonekedwe amtundu wamba ngati mawonekedwe osamveka, ndipo ntchito zazikuluzikuluzikulu zitatuzi zimawonedwa ngati "zapafupi" ndipo zilibe tanthauzo lenileni. Chifukwa chake, kukhazikitsa mafayilo osasintha kumatchedwa virtual file system (VFS).

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

Ngati titha kutsegula, kuwerenga, ndi kulemba ku bungwe, ndiye kuti bungweli limatengedwa ngati fayilo, monga momwe tikuonera pachitsanzo chomwe chili pamwambapa.
Chochitika cha VFS chimangotsimikizira zomwe Unix-zowona kuti "chilichonse ndi fayilo". Ganizirani zachilendo kuti chitsanzo chaching'ono /dev/console pamwambapa chikuwonetsa momwe console imagwirira ntchito. Chithunzichi chikuwonetsa gawo la Bash lolumikizana. Kutumiza chingwe ku konsoli (chida cholumikizira) kumawonetsa pazenera. VFS ili ndi zina, ngakhale zachilendo. Mwachitsanzo, imakulolani kuti mufufuze mwa iye.

Machitidwe odziwika bwino monga ext4, NFS, ndi / proc ali ndi ntchito zitatu zofunika mu C data structure yotchedwa file_operations. Kuphatikiza apo, makina ena amafayilo amakulitsa ndikutanthauziranso magwiridwe antchito a VFS m'njira yodziwika bwino yolunjika pa chinthu. Monga Robert Love akunenera, kutulutsa kwa VFS kumalola ogwiritsa ntchito a Linux kuti azikopera mafayilo kupita kapena kuchokera kumakina ena kapena mabungwe osamveka ngati mapaipi osadandaula ndi mawonekedwe awo amkati. Kumbali ya ogwiritsa (userspace), pogwiritsa ntchito kuyimba foni, njira imatha kukopera kuchokera pafayilo kupita kumagulu a data a kernel pogwiritsa ntchito njirayo. read() mmodzi wapamwamba dongosolo ndiyeno ntchito njira write () mtundu wina wamafayilo otulutsa deta.

Matanthauzidwe a ntchito omwe ali amitundu yoyambira ya VFS ali m'mafayilo fs/*.c kernel source code, pomwe subdirectories fs/ zili ndi mafayilo ena. Pakatikati palinso zinthu monga cgroups, /dev ΠΈ tmpfs, zomwe zimafunika panthawi ya boot ndipo zimatanthauzidwa mu kernel subdirectory init/. Zindikirani izo cgroups, /dev ΠΈ tmpfs musatchule "akulu atatu" ntchito file_operations, koma werengani ndi kulemba mwachindunji.
Chithunzi chomwe chili pansipa chikuwonetsa momwe malo ogwiritsira ntchito amafikira mitundu yosiyanasiyana yamafayilo yomwe nthawi zambiri imayikidwa pamakina a Linux. Mapangidwe osawonetsedwa pipes, dmesg ΠΈ POSIX clocks, zomwe zimagwiritsanso ntchito dongosolo file_operations, yofikiridwa ndi VFS layer.

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

VFS ndi "wrapper layer" pakati pa mafoni adongosolo ndi kukhazikitsa zina file_operationsmonga ext4 ΠΈ procfs. Ntchito file_operations imatha kulumikizana ndi madalaivala a chipangizo kapena zida zofikira kukumbukira. tmpfs, devtmpfs ΠΈ cgroups osagwiritsa ntchito file_operations, koma lowani pamtima mwachindunji.
Kukhalapo kwa VFS kumapereka mwayi wogwiritsanso ntchito kachidindo, popeza njira zoyambira zolumikizidwa ndi mafayilo amafayilo siziyenera kukhazikitsidwanso ndi mtundu uliwonse wa fayilo. Kugwiritsanso ntchito ma code ndichizoloΕ΅ezi chofala pakati pa akatswiri opanga mapulogalamu! Komabe, ngati reusable code lili zolakwa zazikulu, machitidwe onse omwe amatengera njira zofanana amavutika nawo.

/tmp: Malangizo osavuta

Njira yosavuta yodziwira kuti VFS ilipo pamakina ndikulemba mount | grep -v sd | grep -v :/, zomwe zikuwonetsa zonse zokwera (mounted) mafayilo omwe sakhala pa disk komanso omwe si a NFS, zomwe ndizoona pamakompyuta ambiri. Chimodzi mwazinthu zomwe zalembedwa (mounts) VFS mosakayika /tmp, chabwino?

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

Aliyense amadziwa kusungirako / tmp pathupi - misala! Kuchokera.

N'chifukwa chiyani osafunika kusunga /tmp pa media media? Chifukwa mafayilo ali mu /tmp zida zosakhalitsa komanso zosungirako ndizochedwa kuposa kukumbukira komwe tmpfs imapangidwira. Kuphatikiza apo, zinthu zakuthupi ndizosavuta kuvala zikalembedwa kuposa kukumbukira. Pomaliza, mafayilo mu /tmp amatha kukhala ndi zidziwitso zodziwika bwino, kotero kuwapangitsa kuzimiririka pakuyambiranso kulikonse ndikofunikira.

Tsoka ilo, zolemba zina zogawa za Linux zimapanga /tmp pa chipangizo chosungira mwachisawawa. Musataye mtima ngati izi zidachitikanso ndi dongosolo lanu. Tsatirani malangizo ochepa osavuta ndi Arch Wikikukonza izi, ndipo dziwani kuti kukumbukira komwe kwaperekedwa tmpfs zimakhala zosapezeka pazifukwa zina. Mwa kuyankhula kwina, kachitidwe kamene kali ndi tmpfs yaikulu ndi mafayilo akuluakulu pa izo akhoza kutha kukumbukira ndi kuwonongeka. Lingaliro lina: mukamakonza fayilo /etc/fstab, kumbukirani kuti iyenera kutha ndi mzere watsopano, apo ayi dongosolo lanu silingayambe.

/proc ndi /sys

kusiya /tmp, VFS (mafayilo enieni) omwe amadziwika kwambiri kwa ogwiritsa ntchito a Linux ndi /proc ΠΈ /sys. (/dev amakhala mu kukumbukira nawo ndipo alibe file_operations). Chifukwa chiyani zigawo ziwirizi? Tiyeni tikambirane nkhaniyi.

procfs imapanga chithunzithunzi cha kernel ndi njira yomwe imayang'anira userspace. The /proc kernel imasindikiza zambiri za zomwe ili nazo, monga zosokoneza, kukumbukira, ndi ndondomeko. Komanso, /proc/sys ndi malo omwe magawo adakhazikitsidwa ndi lamulo sysctl, kupezeka kwa userspace. Mkhalidwe ndi ziwerengero za njira zapayekha zikuwonetsedwa muzolemba /proc/.

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

ndi /proc/meminfo ndi fayilo yopanda kanthu yomwe ili ndi chidziwitso chofunikira.

Makhalidwe /proc mafayilo akuwonetsa momwe mafayilo amafayilo a VFS disk angasinthire. Ku mbali imodzi, /proc/meminfo muli ndi chidziwitso chomwe mungawone ndi lamulo free. Kumbali ina, ilibe kanthu! Zimagwira ntchito bwanji? Mkhalidwewu ukukumbutsa nkhani yotchuka yotchedwa Kodi mwezi umakhalapo ngati palibe amene akuuona? Reality ndi Quantum Theory"lolembedwa ndi pulofesa wa sayansi ya ku yunivesite ya Cornell David Mermin mu 1985. Chowonadi ndi chakuti kernel imasonkhanitsa ziwerengero zamakumbukiro pomwe pempho likufunsidwa /proc, ndipo kwenikweni mumafayilo /proc palibe pamene palibe akuyang'ana. Monga ananenera Mermin, "Chiphunzitso chofunika kwambiri cha quantum chimanena kuti kuyeza nthawi zambiri sikumasonyeza mtengo umene unalipo kale wa katundu womwe ukuyesedwa." (Ndipo ganizirani funso lokhudza mwezi ngati homuweki!)
Zowoneka zopanda pake procfs zimamveka chifukwa chidziwitso chomwe chilipo ndi champhamvu. Mkhalidwe wosiyana pang'ono ndi sysfs. Tiyerekeze kuti ndi mafayilo angati omwe ali ndi kukula kwa byte imodzi /proc ndi /sys.

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

Procfs ili ndi fayilo imodzi, yomwe ndi kasinthidwe ka kernel, zomwe ndizosiyana chifukwa zimangofunika kupangidwa kamodzi pa boot. Kumbali ina, in /sys pali mafayilo akuluakulu ambiri, ambiri omwe amatenga tsamba lonse lokumbukira. Nthawi zambiri mafayilo sysfs zili ndi nambala kapena mzere umodzi ndendende, mosiyana ndi matebulo azidziwitso zopezedwa powerenga mafayilo monga /proc/meminfo.

Cholinga sysfs - perekani zowerengera / kulemba zomwe kernel imayitana Β«kobjectsΒ» mu userspace. Cholinga chokha kobjects ndi kuwerengera ulalo: pomwe ulalo womaliza wa kobject wachotsedwa, dongosololi lidzabwezeretsanso zinthu zomwe zikugwirizana nazo. Komabe, /sys amapanga ambiri otchuka "Stable ABI for userspace" core, zomwe palibe amene angakhoze konse, muzochitika zilizonse "kuswa". Izi sizikutanthauza kuti mafayilo mu sysfs ndi static, zomwe sizingagwirizane ndi kuwerengera kwazinthu zosakhazikika.
ABI yokhazikika ya kernel imachepetsa zomwe zingawonekere /sys, osati zomwe zilipo panthawi imeneyo. Kulemba zilolezo zamafayilo mu sysfs kumapereka chidziwitso chamomwe mungasinthire zida, ma module, mafayilo amafayilo, ndi zina. ikhoza kukhazikitsidwa kapena kuwerenga. Zotsatira zomveka ndizakuti ma procfs nawonso ndi gawo la kernel's ABI yokhazikika, ngakhale izi sizinatchulidwe mwatsatanetsatane mu zolemba.

Mafayilo a Virtual mu Linux: chifukwa chiyani amafunikira ndipo amagwira ntchito bwanji? Gawo 1

Mafayilo mu sysfs fotokozani chinthu chimodzi pagulu lililonse ndipo imatha kuwerengeka, kulembedwa, kapena zonse ziwiri. "0" mufayilo zikutanthauza kuti SSD sangathe kuchotsedwa.

Tiyeni tiyambe gawo lachiwiri la kumasulira ndi momwe mungayang'anire VFS pogwiritsa ntchito zida za eBPF ndi bcc, ndipo tsopano tikuyembekezera ndemanga zanu ndipo mwachizolowezi tikukuitanani tsegulani webinar, yomwe idzachitike ndi aphunzitsi athu pa Epulo 9 - Vladimir Drozdetsky.

Source: www.habr.com

Kuwonjezera ndemanga