Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Kamusta kayong lahat! Patuloy kaming naglulunsad ng mga bagong stream para sa mga kursong nagustuhan mo na at ngayon ay nagmamadali kaming ipahayag na magsisimula kami ng bagong hanay ng mga kurso "Linux Administrator"na ilulunsad sa katapusan ng Abril. Isang bagong publikasyon ang mapepetsahan para sa kaganapang ito. Gamit ang orihinal na materyal, magagawa mo basahin dito.

Ang mga virtual file system ay nagsisilbing isang uri ng mahiwagang abstraction na nagpapahintulot sa pilosopiya ng Linux na sabihin na "lahat ng bagay ay isang file."

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Ano ang isang file system? Batay sa mga salita ng isa sa mga unang nag-ambag at may-akda ng Linux Roberta Lava, "Ang file system ay isang hierarchical storage ng data na binuo ayon sa isang partikular na istraktura." Magkagayunman, ang kahulugan na ito ay pantay na angkop sa VFAT (Virtual File Allocation Table), Git at Cassandra (database ng NoSQL). Kaya kung ano ang eksaktong tumutukoy sa isang bagay bilang isang "file system"?

Mga Pangunahing Kaalaman sa Filesystem

Ang Linux kernel ay may ilang mga kinakailangan para sa isang entity na maaaring ituring na isang file system. Dapat itong ipatupad ang mga pamamaraan open(), read() ΠΈ write() para sa mga persistent object na may mga pangalan. Mula sa isang object-oriented na punto ng view programa, tinukoy ng kernel ang isang generic na filesystem bilang abstract interface, at ang tatlong malalaking function na ito ay itinuturing na "virtual" at walang konkretong kahulugan. Alinsunod dito, ang default na pagpapatupad ng file system ay tinatawag na virtual file system (VFS).

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Kung maaari tayong magbukas, magbasa, at sumulat sa isang entity, kung gayon ang entity na iyon ay maituturing na isang file, gaya ng makikita natin mula sa halimbawa sa console sa itaas.
Ang kababalaghan ng VFS ay binibigyang-diin lamang ang pagmamasid na tulad ng Unix na "lahat ay isang file". Isipin kung gaano kakaiba na ang maliit na /dev/console na halimbawa sa itaas ay nagpapakita kung paano gumagana ang console. Ang larawan ay nagpapakita ng isang interactive na Bash session. Ang pagpapadala ng string sa console (virtual console device) ay ipinapakita ito sa isang virtual na screen. Ang VFS ay may iba, kahit na hindi kilalang mga katangian. Halimbawa, pinapayagan ka nitong maghanap sa pamamagitan ng ito.

Ang mga pamilyar na sistema tulad ng ext4, NFS, at /proc ay may tatlong mahahalagang function sa isang C data structure na tinatawag na file_operations. Bilang karagdagan, ang ilang mga file system ay nagpapalawak at nagre-redefine ng VFS functionality sa isang pamilyar na object-oriented na paraan. Gaya ng itinuturo ni Robert Love, ang VFS abstraction ay nagbibigay-daan sa mga user ng Linux na walang pakialam na kumopya ng mga file papunta o mula sa mga third party na operating system o abstract entity tulad ng mga pipe nang hindi nababahala tungkol sa kanilang internal na format ng data. Sa panig ng gumagamit (userspace), gamit ang isang tawag sa system, maaaring kopyahin ng isang proseso mula sa isang file patungo sa mga istruktura ng data ng kernel gamit ang pamamaraan. read() isang file system at pagkatapos ay gamitin ang pamamaraan write () isa pang file system para sa output ng data.

Ang mga kahulugan ng function na kabilang sa mga batayang uri ng VFS ay nasa mga file fs/*.c kernel source code, habang ang mga subdirectory fs/ naglalaman ng ilang mga file system. Ang core ay naglalaman din ng mga entity tulad ng cgroups, /dev ΠΈ tmpfs, na kinakailangan sa panahon ng proseso ng boot at samakatuwid ay tinukoy sa kernel subdirectory init/. Pansinin mo yan cgroups, /dev ΠΈ tmpfs huwag tawagan ang "big three" function file_operations, ngunit direktang basahin at isulat sa memorya.
Ipinapakita ng diagram sa ibaba kung paano ina-access ng userspace ang iba't ibang uri ng mga filesystem na karaniwang naka-mount sa mga Linux system. Hindi ipinapakita ang mga istruktura pipes, dmesg ΠΈ POSIX clocks, na nagpapatupad din ng istraktura file_operations, na-access sa pamamagitan ng VFS layer.

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Ang VFS ay isang "wrapper layer" sa pagitan ng mga system call at pagpapatupad ng ilang partikular file_operationstulad ng ext4 ΠΈ procfs. Mga pag-andar file_operations maaaring makipag-ugnayan sa alinman sa mga device driver o memory access device. tmpfs, devtmpfs ΠΈ cgroups Huwag gamitin file_operations, ngunit direktang i-access ang memorya.
Ang pagkakaroon ng VFS ay nagbibigay ng kakayahang muling gamitin ang code, dahil ang mga pangunahing pamamaraan na nauugnay sa mga file system ay hindi kailangang muling ipatupad ng bawat uri ng file system. Ang muling paggamit ng code ay isang karaniwang kasanayan sa mga software engineer! Gayunpaman, kung naglalaman ang reusable code malubhang pagkakamali, lahat ng pagpapatupad na nagmamana ng mga karaniwang pamamaraan ay nagdurusa sa kanila.

/tmp: Simpleng pahiwatig

Ang isang madaling paraan upang makita na ang VFS ay naroroon sa isang system ay ang pag-type mount | grep -v sd | grep -v :/, na magpapakita ng lahat ng naka-mount (mounted) mga filesystem na hindi residente ng disk at hindi NFS, na totoo sa karamihan ng mga computer. Isa sa mga nakalistang mount (mounts) Ang VFS ay walang alinlangan /tmp, tama ba?

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Alam ng lahat ang imbakan na iyon / tmp sa isang pisikal na daluyan - kabaliwan! Pinagmulan.

Bakit hindi kanais-nais na mag-imbak /tmp sa pisikal na media? Dahil ang mga file sa /tmp ay pansamantala at ang mga storage device ay mas mabagal kaysa sa memorya kung saan nilikha ang mga tmpfs. Bukod dito, ang pisikal na media ay mas madaling isuot kapag na-overwrite kaysa sa memorya. Sa wakas, ang mga file sa /tmp ay maaaring maglaman ng sensitibong impormasyon, kaya ang pagkawala ng mga ito sa bawat pag-reboot ay isang mahalagang tampok.

Sa kasamaang palad, ang ilang mga script sa pag-install ng pamamahagi ng Linux ay gumagawa ng /tmp sa storage device bilang default. Huwag mawalan ng pag-asa kung nangyari rin ito sa iyong sistema. Sundin ang ilang simpleng tagubilin gamit ang Arch Wikiupang ayusin ito, at magkaroon ng kamalayan na ang memorya ay inilaan para sa tmpfs nagiging hindi magagamit para sa iba pang mga layunin. Sa madaling salita, ang isang system na may higanteng tmpfs at malalaking file dito ay maaaring maubusan ng memorya at mag-crash. Isa pang pahiwatig: habang nag-e-edit ng file /etc/fstab, tandaan na dapat itong magtapos sa isang bagong linya, kung hindi ay hindi magbo-boot ang iyong system.

/proc at /sys

Bukod sa /tmp, VFS (virtual file system) na pinakapamilyar sa mga gumagamit ng Linux ay /proc ΠΈ /sys. (/dev naninirahan sa shared memory at wala file_operations). Bakit ang dalawang sangkap na ito? Tingnan natin ang isyung ito.

procfs lumilikha ng snapshot ng kernel at ang mga prosesong sinusubaybayan nito userspace. Sa /proc ang kernel ay nagpi-print ng impormasyon tungkol sa kung ano ang magagamit nito, tulad ng mga interrupts, virtual memory, at ang scheduler. Bukod sa, /proc/sys ay ang lugar kung saan na-configure ang mga parameter gamit ang command sysctl, magagamit para sa userspace. Ang katayuan at istatistika ng mga indibidwal na proseso ay ipinapakita sa mga direktoryo /proc/.

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Dito /proc/meminfo ay isang walang laman na file na gayunpaman ay naglalaman ng mahalagang impormasyon.

Pag-uugali /proc Ipinapakita ng mga file kung gaano kaiba ang mga VFS disk file system. Sa isang tabi, /proc/meminfo naglalaman ng impormasyon na maaaring matingnan gamit ang utos free. Sa kabilang banda, ito ay walang laman! Paano ito gumagana? Ang sitwasyon ay nakapagpapaalaala sa sikat na artikulo na pinamagatang Umiiral ba ang buwan kapag walang nakatingin dito? Reality at Quantum Theory"isinulat ng propesor sa pisika ng Cornell University na si David Mermin noong 1985. Ang katotohanan ay ang kernel ay nangongolekta ng mga istatistika ng memorya kapag ang isang kahilingan ay ginawa sa /proc, at talagang nasa mga file /proc wala kapag walang nakatingin. Gaya ng sinabi Mermin, "Sinasabi ng pangunahing quantum doctrine na ang pagsukat sa pangkalahatan ay hindi naghahayag ng dati nang halaga ng property na sinusukat." (At isaalang-alang ang tanong tungkol sa buwan bilang takdang-aralin!)
Tila kawalan ng laman procfs may katuturan dahil dinamiko ang impormasyon doon. Ang isang bahagyang naiibang sitwasyon sa sysfs. Ihambing natin kung gaano karaming mga file na hindi bababa sa isang byte ang laki /proc at /sys.

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Procfs ay may isang file, katulad ng na-export na kernel configuration, na isang exception dahil kailangan lang itong mabuo ng isang beses bawat boot. Sa kabilang banda, sa /sys mayroong maraming mas malalaking file, marami sa mga ito ay tumatagal ng isang buong pahina ng memorya. Karaniwang mga file sysfs naglalaman ng eksaktong isang numero o linya, hindi tulad ng mga talahanayan ng impormasyon na nakuha mula sa pagbabasa ng mga file tulad ng /proc/meminfo.

Layunin sysfs - magbigay ng read/write properties ng tinatawag ng kernel Β«kobjectsΒ» sa userspace. Ang tanging layunin kobjects ay nagbibilang ng link: kapag naalis ang huling link sa isang kobject, ire-restore ng system ang mga mapagkukunang nauugnay dito. gayunpaman, /sys bumubuo sa karamihan ng mga sikat "stable ABI para sa userspace" core, na hindi kailanman magagawa ng sinuman, sa anumang pagkakataon "pahinga". Hindi ito nangangahulugan na ang mga file sa sysfs ay static, na hindi naaayon sa reference na pagbibilang ng mga hindi matatag na bagay.
Nililimitahan ng stable ABI ng kernel kung ano ang maaaring lumabas /sys, hindi kung ano ang aktwal na naroroon sa partikular na sandali. Ang paglista ng mga pahintulot ng file sa sysfs ay nagbibigay ng insight sa kung paano i-configure ang mga setting para sa mga device, module, filesystem, atbp. maaaring i-configure o basahin. Ang lohikal na konklusyon ay ang mga procf ay bahagi din ng stable na ABI ng kernel, kahit na hindi ito tahasang nakasaad sa dokumentasyon.

Virtual file system sa Linux: bakit kailangan ang mga ito at paano ito gumagana? Bahagi 1

Mga file sa sysfs ilarawan ang isang partikular na ari-arian para sa bawat entity at maaaring mabasa, maisulat, o pareho. Ang ibig sabihin ng "0" sa file ay hindi maalis ang SSD.

Simulan natin ang ikalawang bahagi ng pagsasalin kung paano subaybayan ang VFS gamit ang mga tool na eBPF at bcc, at ngayon ay hinihintay namin ang iyong mga komento at tradisyonal na iniimbitahan ka bukas na webinar, na gaganapin ng aming guro sa Abril 9 - Vladimir Drozdetsky.

Pinagmulan: www.habr.com

Magdagdag ng komento