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
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."
Ano ang isang file system? Batay sa mga salita ng isa sa mga unang nag-ambag at may-akda ng Linux
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
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
Ang mga pamilyar na sistema tulad ng ext4, NFS, at /proc ay may tatlong mahahalagang function sa isang C data structure na tinatawag na 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/
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.
Ang VFS ay isang "wrapper layer" sa pagitan ng mga system call at pagpapatupad ng ilang partikular file_operations
tulad 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
/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?
Alam ng lahat ang imbakan na iyon / tmp
sa isang pisikal na daluyan - kabaliwan!
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 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/
.
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 /proc
, at talagang nasa mga file /proc
wala kapag walang nakatingin. Gaya ng sinabi
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
.
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
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
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
Pinagmulan: www.habr.com