ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

Aloha kākou! Ke hoʻomau nei mākou i ka hoʻomaka ʻana i nā kahawai hou no nā papa āu i aloha ai a i kēia manawa ke wikiwiki nei mākou e hoʻolaha e hoʻomaka ana mākou i kahi papa papa hou. "Ka Luna Hoʻokele Linux"e hoʻomaka ana i ka hopena o ʻApelila. E hoʻopaʻa ʻia kahi puke hou no kēia hanana. Me ka mea kumu, hiki iā ʻoe heluhelu maanei.

Hoʻohana ʻia nā ʻōnaehana faila ma ke ʻano he ʻano abstraction kupua e hiki ai i ka philosophy o Linux ke ʻōlelo "he faila nā mea āpau."

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

He aha ka waihona waihona? Ma muli o nā ʻōlelo a kekahi o nā mea kōkua mua a me nā mea kākau o Linux Roberta Lava, "ʻO kahi ʻōnaehana waihona kahi waihona hierarchical o nā ʻikepili i hōʻuluʻulu ʻia e like me kahi ʻano kikoʻī." ʻOiai paha, ua kūpono kēia wehewehe i ka VFAT (Virtual File Allocation Table), Git a me Cassandra (NoSQL waihona). No laila he aha ka mea e wehewehe pono ai i kahi mea e like me ka "system file"?

Nā kumu waihona waihona

Loaʻa i ka Linux kernel kekahi mau koi no kahi hui i hiki ke manaʻo ʻia he ʻōnaehana faila. Pono e hoʻokō i nā ʻano hana open(), read() и write() no nā mea hoʻomau i loaʻa nā inoa. Mai kahi manaʻo hoʻohālikelike hoʻolālā, wehewehe ka kernel i ka waihona waihona ma ke ʻano he kikowaena abstract, a ua manaʻo ʻia kēia mau hana nui ʻekolu he "virtual" a ʻaʻohe wehewehe kikoʻī. No laila, ua kapa ʻia ka hoʻokō ʻana o ka ʻōnaehana faila he ʻōnaehana file virtual (VFS).

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

Inā hiki iā mākou ke wehe, heluhelu, a kākau i kahi hui, a laila ua manaʻo ʻia kēlā hui he faila, e like me kā mākou e ʻike ai mai ka laʻana ma ka console ma luna.
Hōʻike wale ka VFS i ka nānā ʻana e like me Unix "he faila nā mea āpau". E noʻonoʻo i ke ʻano o kēlā ʻano liʻiliʻi / dev / console ma luna e hōʻike ana i ka hana maoli o ka console. Hōʻike ke kiʻi i kahi hālāwai Bash interactive. ʻO ka hoʻouna ʻana i kahi kaula i ka console (mea hoʻohana virtual console) e hōʻike iā ia ma ka pale virtual. Loaʻa i ka VFS kekahi mau waiwai ʻē aʻe. No ka laʻana, hiki iā ʻoe ke ʻimi ma e ia.

ʻO nā ʻōnaehana maʻamau e like me ext4, NFS, a me / proc he ʻekolu mau hana koʻikoʻi i loko o kahi hoʻolālā data C i kapa ʻia. file_operations. Eia kekahi, hoʻonui a wehewehe hou kekahi mau ʻōnaehana faila i ka hana VFS ma kahi ala maʻamau. E like me kā Robert Love i kuhikuhi ai, hiki i ka VFS abstraction ke hiki i nā mea hoʻohana Linux ke kope kope ʻole i nā faila a i ʻole mai nā ʻōnaehana hana ʻekolu a i ʻole nā ​​​​mea abstract e like me nā paipu me ka hopohopo ʻole e pili ana i kā lākou ʻano ʻikepili kūloko. Ma ka ʻaoʻao mea hoʻohana (userspace), me ka hoʻohana ʻana i kahi kelepona ʻōnaehana, hiki i kahi kaʻina hana ke kope mai kahi faila i nā hale ʻikepili kernel me ka hoʻohana ʻana i ke ʻano. read() hoʻokahi waihona waihona a laila hoʻohana i ke ʻano write () ʻōnaehana waihona ʻē aʻe no ka hoʻopuka ʻikepili.

Aia nā wehewehe hana e pili ana i nā ʻano VFS kumu i nā faila fs/*.c kernel source code, ʻoiai nā subdirectories fs/ loaʻa i kekahi ʻōnaehana waihona. Aia i loko o ke kumu nā mea e like me cgroups, /dev и tmpfs, i koi ʻia i ka wā o ke kaʻina hana boot a no laila ua wehewehe ʻia ma ka subdirectory kernel init/. E hoʻomaopopo i kēlā cgroups, /dev и tmpfs mai kāhea i nā hana "nui ʻekolu". file_operations, akā heluhelu pololei a kākau i ka hoʻomanaʻo.
Hōʻike ke kiʻikuhi ma lalo nei i ke komo ʻana o ka mea hoʻohana i nā ʻano waihona waihona like ʻole i kau ʻia ma nā ʻōnaehana Linux. Hōʻike ʻole ʻia nā hale pipes, dmesg и POSIX clocks, ka mea i hoʻokō i ka hale file_operations, loaʻa ma o ka papa VFS.

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

ʻO VFS kahi "wrapper layer" ma waena o nā kelepona ʻōnaehana a me nā hoʻokō o kekahi file_operationse like me ext4 и procfs. Nā hana file_operations hiki ke launa pū me nā mea hoʻokele a i ʻole nā ​​mea hoʻomanaʻo. tmpfs, devtmpfs и cgroups mai hoohana file_operations, akā komo pololei i ka hoʻomanaʻo.
Hāʻawi ka noho ʻana o VFS i ka hiki ke hoʻohana hou i ke code, no ka mea, ʻaʻole pono e hoʻokō hou ʻia nā ʻano kumu e pili ana i nā ʻōnaehana faila e kēlā me kēia ʻano o ka ʻōnaehana faila. He hana maʻamau ka hoʻohana hou ʻana o ke code ma waena o nā ʻenekini polokalamu! Eia naʻe, inā loaʻa i ka code reusable hewa nui, nā hoʻokō a pau e hoʻoili i nā ʻano hana maʻamau e loaʻa iā lākou.

/tmp: Hōʻike maʻalahi

ʻO kahi ala maʻalahi e ʻike ai aia ʻo VFS ma kahi ʻōnaehana ʻo ke kākau ʻana mount | grep -v sd | grep -v :/, e hōʻike ana i nā mea i kau ʻia (mounted) nā ʻōnaehana waihona ʻaʻole noho disk a me NFS ʻole, ʻoiaʻiʻo ma ka hapa nui o nā kamepiula. ʻO kekahi o nā mea i helu ʻia (mounts) VFS e kanalua /tmp, akau?

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

Ua ʻike nā kānaka a pau i kēlā waihona / tmp ma ke kino kino - pupule! Puna.

No ke aha i makemake ʻole ai e mālama /tmp ma nā pāpaho kino? No ka mea, aia nā faila i loko /tmp ʻOi aku ka lohi ma mua o ka hoʻomanaʻo kahi i hana ʻia ai nā tmpfs. Eia kekahi, ʻoi aku ka maʻalahi o ka hoʻopaʻa ʻana i ke kino ma mua o ka hoʻomanaʻo. ʻO ka mea hope loa, hiki i nā faila i /tmp ke loaʻa i ka ʻike koʻikoʻi, no laila e nalo iā lākou i kēlā me kēia reboot he mea nui.

ʻO ka mea pōʻino, hoʻokumu kekahi mau palapala hoʻonohonoho Linux i ka /tmp ma ka hāmeʻa mālama ma ka paʻamau. Mai hopohopo inā hiki kēia i kāu ʻōnaehana pū kekahi. E hahai i kekahi mau kuhikuhi maʻalahi me Kālena Wikie hoʻoponopono i kēia, a e makaʻala i ka hoʻomanaʻo i hoʻokaʻawale ʻia no tmpfs lilo ʻole no nā kumu ʻē aʻe. I nā huaʻōlelo ʻē aʻe, hiki i kahi ʻōnaehana me kahi tmpfs nunui a me nā faila nui ma luna ona hiki ke pau i ka hoʻomanaʻo a hāʻule. ʻO kekahi manaʻo: ʻoiai e hoʻoponopono ana i kahi faila /etc/fstab, E hoʻomanaʻo pono e hoʻopau me kahi laina hou, inā ʻaʻole e hoʻomaka kāu ʻōnaehana.

/proc a me /sys

Ma waho aʻe /tmp, VFS (virtual file system) i kamaʻāina loa i nā mea hoʻohana Linux /proc и /sys. (/dev noho ma ka hoʻomanaʻo like ʻana a ʻaʻole loaʻa file_operations). No ke aha kēia mau ʻāpana ʻelua? E nānā kākou i kēia pilikia.

procfs hana i kahi kiʻi o ka kernel a me nā kaʻina hana e nānā ai userspace. ka /proc paʻi ka kernel i ka ʻike e pili ana i nā mea i loaʻa iā ia, e like me nā interrupts, virtual memory, a me ka mea hoʻonohonoho. Eia kekahi, /proc/sys kahi i hoʻonohonoho ʻia ai nā ʻāpana me ke kauoha sysctl, loaʻa no userspace. Hōʻike ʻia ke kūlana a me nā ʻikepili o nā kaʻina hana pākahi ma nā papa kuhikuhi /proc/.

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

he mea /proc/meminfo he waihona ʻole i loaʻa naʻe ka ʻike waiwai.

Nā hana /proc Hōʻike nā faila i ke ʻano o nā ʻōnaehana faila disk VFS. Ma kekahi aoao, /proc/meminfo loaʻa ka ʻike i hiki ke nānā ʻia me ke kauoha free. Ma kekahi ʻaoʻao, ua kaʻawale! Pehea e hana ai? Hoʻomanaʻo ke kūlana i ka ʻatikala kaulana i kapa ʻia Aia ka mahina ke nānā ʻole kekahi? ʻOiaʻiʻo a me Quantum Theory"i kākau ʻia e Cornell University physics professor David Mermin i ka makahiki 1985. ʻO ka ʻoiaʻiʻo, ʻohi ka kernel i nā helu hoʻomanaʻo i ka wā i noi ʻia ai /proc, a i loko o nā faila /proc ʻaʻohe mea ke nānā ʻole. E like me ka olelo Mermin, "Ke ʻōlelo nei ka ʻōlelo aʻo kumu kumu ʻaʻole hōʻike ʻia ke ana ʻana i kahi waiwai o ka waiwai i ana ʻia." (A noʻonoʻo i ka nīnau e pili ana i ka mahina ma ke ʻano he haʻawina home!)
Me he mea ʻole procfs kūpono no ka mea he dynamic ka ʻike ma laila. He kūlana ʻokoʻa iki me sysfs. E hoʻohālikelike kākou i ka nui o nā faila i loko o hoʻokahi paita ka nui /proc a i /sys.

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

Procfs he hoʻokahi faila, ʻo ia ka hoʻonohonoho kernel i lawe ʻia, ʻokoʻa ia no ka mea pono e hana ʻia i hoʻokahi manawa no kēlā me kēia pahu. Ma kekahi ʻaoʻao, in /sys nui nā faila nui, nui ka nui o ia mau mea e lawe i kahi ʻaoʻao holoʻokoʻa o ka hoʻomanaʻo. Nā faila maʻamau sysfs hoʻokahi helu a laina paha, ʻaʻole like me nā papa ʻike i loaʻa mai ka heluhelu ʻana i nā faila e like me /proc/meminfo.

Holomua sysfs - hāʻawi i nā waiwai heluhelu/kākau i ka mea i kapa ʻia e ka kernel «kobjects» i loko o ka mea hoʻohana. ʻO ka pahuhopu wale nō kobjects ka helu ʻana: ke wehe ʻia ka ʻōlelo hope loa i kahi kobject, e hoʻihoʻi ka ʻōnaehana i nā kumuwaiwai pili me ia. Eia naʻe, /sys hana i ka hapa nui o nā mea kaulana "ABI paʻa no ka mea hoʻohana" kumu, ʻaʻole hiki i kekahi ke hiki, ma lalo o nā kūlana "haha". ʻAʻole kēia manaʻo he paʻa nā faila i nā sysfs, ʻaʻole i kūlike me ka helu kuhikuhi o nā mea paʻa ʻole.
Hoʻopili ka ABI paʻa o ka kernel i ka mea hiki ke ʻike ʻia i loko /sys, ʻaʻole ka mea i loaʻa i kēlā manawa. Hāʻawi ka papa inoa i nā ʻae faila ma sysfs i ka ʻike pehea e hoʻonohonoho ʻia ai nā hoʻonohonoho no nā polokalamu, modules, filesystems, etc. hiki ke hoʻonohonoho a heluhelu paha. ʻO ka hopena kūpono, ʻo ka procfs kekahi ʻāpana o ka ABI paʻa o ka kernel, ʻoiai ʻaʻole i hōʻike ʻia kēia ma palapala.

ʻO nā ʻōnaehana file virtual ma Linux: no ke aha lākou e pono ai a pehea lākou e hana ai? Mahele 1

Nā waihona i loko sysfs wehewehe i hoʻokahi waiwai no kēlā me kēia hui a hiki ke heluhelu, kākau ʻia, a i ʻole nā ​​mea ʻelua. "0" i loko o ka faila ʻaʻole hiki ke wehe ʻia ka SSD.

E hoʻomaka kākou i ka ʻāpana ʻelua o ka unuhi me ka nānā ʻana iā VFS me ka hoʻohana ʻana i nā mea hana eBPF a me bcc, a ke kali nei mākou i kāu mau manaʻo a kono aku iā ʻoe e wehe i ka webinar, e mālama ʻia ana e ko mākou kumu i ka lā 9 ʻApelila - ʻO Vladimir Drozdetsky.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka