Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

Salut à tutti ! Continuemu à lancià novi flussi per i corsi chì avete digià innamuratu è avà avemu a fretta di annunzià chì avemu principiatu un novu gruppu di corsi "Amministratore Linux"chì serà lanciatu à a fini d'aprile. Una nova publicazione serà datata per questu avvenimentu. Cù u materiale originale, pudete leghje quì.

I sistemi di schedarii virtuali servenu cum'è un tipu d'astrazione magica chì permette à a filusufìa di Linux per dì chì "tuttu hè un schedariu".

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

Cosa hè un sistema di schedari? Basatu nantu à e parolle di unu di i primi cuntributori è autori di Linux Roberta Lava, "Un sistema di schedari hè un almacenamentu gerarchicu di dati assemblati secondu una struttura specifica". In ogni casu, sta definizione hè ugualmente adatta à VFAT (Virtual File Allocation Table), Git è Cassandra (basa di dati NoSQL). Allora chì definisce esattamente una cosa cum'è "sistema di schedari"?

Principi di u sistema di filesystem

U kernel Linux hà certi requisiti per una entità chì pò esse cunsideratu un sistema di fugliale. Deve implementà i metudi open(), read() и write() per ughjetti persistenti chì anu nomi. Da un puntu di vista orientatu à l'ughjettu prugrammazione, u kernel definisce un filesystem genericu cum'è una interfaccia astratta, è sti trè grandi funzioni sò cunsiderate "virtuali" è ùn anu micca una definizione concreta. In cunsiquenza, l'implementazione di u sistema di fugliale predeterminatu hè chjamatu sistema di file virtuale (VFS).

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

Se pudemu apre, leghje è scrive à una entità, allora quella entità hè cunsiderata un schedariu, cum'è pudemu vede da l'esempiu in a cunsola sopra.
U fenomenu VFS sottumette solu l'osservazione Unix-like chì "tuttu hè un schedariu". Pensate quantu stranu chì quellu pocu /dev/console esempiu sopra mostra cumu a cunsola funziona veramente. A stampa mostra una sessione Bash interattiva. Mandatu una stringa à a cunsola (dispositivu di cunsola virtuale) a mostra nantu à una pantalla virtuale. VFS hà altre proprietà, ancu più strane. Per esempiu, vi permette di circà da da ellu.

I sistemi familiari cum'è ext4, NFS è / proc anu trè funzioni impurtanti in una struttura di dati C chjamata file_operations. Inoltre, certi sistemi di fugliali estendenu è redefinenu a funziunalità VFS in una manera familiar orientata à l'ughjettu. Cum'è Robert Love indica, l'astrazione VFS permette à l'utilizatori di Linux di copià i fugliali in modu indispensabile à o da sistemi operativi di terze parti o entità astratte cum'è tubi senza preoccupassi di u so formatu di dati internu. Da u latu di l'utilizatori (userspace), utilizendu una chjama di sistema, un prucessu pò copià da un schedariu à strutture di dati di u kernel utilizendu u metudu read() un sistema di schedariu è dopu aduprà u metudu write () un altru sistema di schedari per a pruduzzioni di dati.

E definizioni di funzioni chì appartenenu à i tipi di basa VFS sò in i schedari fs/*.c u codice fonte di u kernel, mentri i subdirectorii fs/ cuntene certi sistemi di schedari. U core cuntene ancu entità cum'è cgroups, /dev и tmpfs, chì sò necessarii durante u prucessu di boot è sò dunque definiti in u subdirectory di u kernel init/. Avvisu chì cgroups, /dev и tmpfs Ùn chjamate micca e funzioni "big three". file_operations, ma direttamente leghje è scrive in memoria.
U diagramma quì sottu mostra cumu u spaziu di l'utilizatori accede à i diversi tipi di filesystems cumunamenti muntati in sistemi Linux. Strutture micca mostrate pipes, dmesg и POSIX clocks, chì implementanu ancu a struttura file_operations, accede à traversu a strata VFS.

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

VFS hè un "layer wrapper" trà e chjama di u sistema è implementazioni di certi file_operations, cum'è ext4 и procfs. Funzioni file_operations pò interagisce cù i cunduttori di u dispositivu o i dispositi d'accessu à a memoria. tmpfs, devtmpfs и cgroups ùn aduprà file_operations, ma accede direttamente à a memoria.
L'esistenza di VFS furnisce l'uppurtunità di riutilizà u codice, postu chì i metudi basi assuciati cù i sistemi di schedari ùn anu micca esse riimplementati da ogni tipu di sistema di schedari. A riutilizazione di u codice hè una pratica cumuna trà ingegneri di software! Tuttavia, se u codice reusable cuntene sbagli seri, tutte l'implementazioni chì eredite i metudi cumuni soffrenu da elli.

/tmp: Suggerimentu simplice

Un modu faciule per detectà chì VFS sò prisenti nantu à un sistema hè di scrive mount | grep -v sd | grep -v :/, chì mostrarà tutte e muntagne (mounted) filesystems chì ùn sò micca residenti di discu è micca NFS, chì hè vera in a maiò parte di l'urdinatori. Unu di i monti elencati (mounts) VFS sarà senza dubbitu /tmp, diritta?

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

Tuttu u mondu sanu chì u almacenamentu / tmp nantu à un mediu fisicu - follia! Source.

Perchè ùn hè micca desideratu di almacenà /tmp nantu à i media fisichi? Perchè i schedari in /tmp sò tempuranee è i dispositi di almacenamento sò più lenti cà a memoria induve tmpfs hè creatu. Inoltre, i media fisichi sò più suscettibili à l'usura quandu sò soprascritti da a memoria. Infine, i fugliali in / tmp ponu cuntene infurmazioni sensittivi, cusì fà sparisce in ogni reboot hè una funzione essenziale.

Sfurtunatamente, certi script di installazione di distribuzione Linux creanu /tmp in u dispositivu di almacenamento per automaticamente. Ùn disperate micca s'ellu hè accadutu ancu à u vostru sistema. Segui uni pochi di struzzioni simplici cù Arch Wikiper riparà questu, è esse cuscenti chì a memoria attribuita per tmpfs diventa indisponibile per altri scopi. In altri palori, un sistema cù un tmpfs giganti è grandi schedari nantu à ellu pò esce da memoria è crash. Un altru suggerimentu: mentre editate un schedariu /etc/fstab, ricordate chì deve finisce cù una nova linea, altrimenti u vostru sistema ùn hà micca avviatu.

/proc è /sys

stringhjendu /tmp, VFS (sistemi di schedarii virtuali) chì sò più familiari per l'utilizatori di Linux sò /proc и /sys. (/dev risiede in memoria spartuta è ùn hà micca file_operations). Perchè sti dui cumpunenti? Fighjemu in stu prublema.

procfs crea un snapshot di u kernel è i prucessi chì monitoreghja userspace. L' /proc u kernel stampa l'infurmazioni nantu à ciò chì hà dispunibule, cum'è interruzioni, memoria virtuale è u pianificatore. In più, /proc/sys hè u locu induve i paràmetri cunfigurati cù u cumandimu sysctl, dispunibule per userspace. U statutu è e statistiche di i prucessi individuali sò visualizati in cartulari /proc/.

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

/proc/meminfo hè un schedariu viotu chì cuntene quantunque informazioni preziose.

Cumpurtamentu /proc i schedarii mostra quantu ponu esse diversi sistemi di schedarii di discu VFS. Da una parte, /proc/meminfo cuntene infurmazione chì pò esse vistu cù u cumandamentu free. D'altronde, hè viotu ! Cumu funziona? A situazione hè reminiscente di u famosu articulu intitulatu A luna esiste quandu nimu a fighja ? A Realità è a Teoria Quantistica "scrittu da u prufissore di fisica di l'Università Cornell David Mermin in u 1985. U fattu hè chì u kernel raccoglie statistiche di memoria quandu una dumanda hè fatta /proc, è in fatti in i schedari /proc ùn ci hè nunda quandu nimu cerca. Comu dettu Mermin, "A duttrina quantum fundamentale dice chì a misurazione in generale ùn palesa micca un valore pre-esistente di a pruprietà esse misurata". (E cunzidira a quistione nantu à a luna cum'è i travaglii!)
Viotu apparente procfs hè sensu perchè l'infurmazione hè dinamica. Una situazione un pocu sfarente cù sysfs. Comparamu quanti fugliali chì sò almenu un byte di dimensione sò in /proc è in /sys.

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

Procfs hà un schedariu, vale à dì a cunfigurazione di u kernel esportatu, chì hè una eccezzioni perchè solu deve esse generatu una volta per boot. D'altra parte, in /sys Ci sò parechji schedarii più grande, assai di quali occupanu una pagina intera di memoria. Di solitu i schedari sysfs cuntene esattamente un numeru o una linea, à u cuntrariu di e tavule d'infurmazioni ottenute da leghje i schedari cum'è /proc/meminfo.

Goal sysfs - furnisce proprietà di lettura / scrittura di ciò chì u kernel chjama «kobjects» in u spaziu utilizatori. L'unicu scopu kobjects hè u contu di ligami: quandu l'ultimu ligame à un kobject hè sguassatu, u sistema restaurà e risorse assuciate cun ellu. Tuttavia, /sys custituisce a maiò parte di i famosi "ABI stabile per u spaziu d'utilizatori" core, chì nimu pò mai, in ogni circustanza "rupture". Questu ùn significa micca chì i fugliali in sysfs sò statichi, chì saria inconsistente cù u cuntu di riferimentu di l'uggetti instabili.
L'ABI stabile di u kernel limita ciò chì pò appare /sys, micca ciò chì hè veramente presente in quellu mumentu particulare. A lista di i permessi di u schedariu in sysfs furnisce un insight in quantu paràmetri configurabili per i dispositi, i moduli, i filesystems, etc. pò esse cunfiguratu o leghje. A cunclusione logica hè chì procfs hè ancu parte di l'ABI stabile di u kernel, ancu s'ellu ùn hè micca esplicitamente dichjaratu in ducumentazione.

Sistemi di schedarii virtuali in Linux: perchè sò necessarii è cumu funzionanu? Parte 1

I schedari in sysfs descrive una pruprietà particulare per ogni entità è pò esse leggibile, scrivibile, o i dui. "0" in u schedariu significa chì u SSD ùn pò micca esse eliminatu.

Cuminciamu a seconda parte di a traduzzione cù cumu monitorà VFS cù l'arnesi eBPF è bcc, è avà aspittemu i vostri cumenti è tradiziunale vi invitemu à webinar apertu, chì serà tenuta da u nostru maestru u 9 d'aprile - Vladimir Drozdetsky.

Source: www.habr.com

Add a comment