TAGS CLOUD
Incrementa dimensioniDecrementa dimensioni
La "vita'' dei file in un sistema GNU/Linux
Il file system è soggetto a mutamenti continui e in costante evoluzione ma il kernel sa sempre cosa accade e agisce di conseguenza. Scopri come
(pagina 1 di 10)
Il concetto di file è fondamentale in tutti i sistemi operativi. In particolare lo è in quelli Unix, o derivati come GNU/ Linux. In pratica, rappresenta l’entità fondamentale attraverso la quale il sistema riesce ad eseguire le operazioni fondamentali. È ovvia, quindi, la necessità di dover monitorare in tempo reale i file, tracciandone i cambiamenti per poi poter agire di conseguenza. Ad esempio, per un software di ricerca come Beagle questo aspetto è fondamentale. Immaginate cosa succederebbe se ogni volta che un file presente all’interno del file system subisce una modifica il programma dovesse indicizzare nuovamente tutto il contenuto del disco. Sarebbe uno spreco inutile di tempo e risorse. Ma per fortuna, il sistema operativo dispone di uno strumento in grado di “intercettare” i cambiamenti e comunicarli tempestivamente ai programmi. In particolare, nel caso del kernel Linux esiste da tempo una prima soluzione chiamata dnotify per la gestione di questo aspetto; dnotify ha però delle grosse limitazioni, infatti, è ancora presente nel kernel solo per garantire il buon funzionamento di vecchi programmi e di parti del kernel stesso che ne fanno ancora uso. Oggi la scelta d’elezione per questo tipo di problematica è inotify ovvero il nuovo sistema di notifica automatica degli eventi che subiscono i file. Inotify è incluso nel kernel dalla versione 2.6.13 in poi; senza entrare troppo nel dettaglio elenchiamo alcune importanti differenze tra dnotify e inotify e i principali vantaggi dell’utilizzo di quest’ultimo:
  • inotify non richiede che il file da controllare sia aperto e ciò, oltre a  ridurre il numero dei cosiddetti file descriptor utilizzati e mantenerlo al di sotto dei limiti di sistema, permette di monitorare anche i file su supporti removibili senza impedirne l’eventuale rimozione;
  • con inotify il kernel non si serve dei segnali per comunicare i  cambiamenti sui file ma li notifica utilizzando un particolare file descriptor. Questo facilita la gestione in tempo reale degli eventi, in generale difficoltosa tramite i segnali ma agevole se si possono usare le system call (chiamate di sistema) di tipo select e poll;
  •  inotify permette di monitorare il singolo file (la “  i” sta per inode) mentre la granularità di dnotify non va oltre la directory (la “d” indica directory) costringendo il programmatore a costruirsi un meccanismo di cache per individuare il file coinvolto nel cambiamento.
L’argomento come potete vedere è abbastanza complesso, ma è fondamentale capirne la dinamica per comprendere il funzionamento del sistema operativo e come questo risponde agli eventi.
Requisiti da soddisfare
Come accennato nel paragrafo precedente, dalla versione 2.6.13, inotify è incluso nei sorgenti ufficiali del kernel. Per utilizzarne i servizi basta abilitare la voce CONFIG_INOTIFY nel file di configurazione. Tramite lo strumento di configurazione del kernel (make menuconfig) basta optare per le seguenti scelte:
File systems --->
[*] Inotify file change notification support
[*] Inotify support for userspace
A questo punto il kernel così compilato è pronto ad offrire i servizi della piattaforma inotify tramite interfacciamento di basso livello ovvero programmi C che utilizzano particolari system call. Ovviamente, se utilizzate il comando make xconfig per configurare il kernel, l’opzione per abilitare inotify è accessibile dalla voce File systems.

Configurazione di inotify nel kernel Linux

Una fase della configurazione di base di logsend

I programmi necessari
Esistono molti pacchetti software che utilizzano i servizi di inotify e permettono un utilizzo più agevole di tale infrastruttura del kernel laddove sia richiesto il monitoraggio in tempo reale dei file. Possiamo suddividere le applicazioni in più categorie:
  • binding o wrapper per sviluppatori. Sono particolari librerie che permettono un interfacciamento con linguaggi di livello più alto o linguaggi script. Tra questi troviamo: inotify-cxx (C++),Linux::Inotify2 (Perl), Pyinotify (Python), JNotify (Java), Ocaml Inotify (Ocaml);
  • programmi veri e propri che danno soluzioni a necessità ben precise, tra i quali: inotify-tools, incron, logsend, inotail, IWatch, mswatch.
Nel corso dell’articolo analizzeremo alcuni di questi programmi utilizzando come sistema di riferimento una distro Debian GNU/Linux.
Lascia un commento
Tag: file system, linux, kernel, udev, sistema di notifica, inotify, applicazione logsend, utility incron
Condividi