X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=8e317862cf1ed7b01f7d793b0b4f9dc5f5a24468;hp=9cd3f899b0918211007e63bb589573863ebd8c10;hb=bacb94a4e700a52b66cb5808f7e99b8a4b8be828;hpb=9ae76fdeacb0ff52559c8bf310b20d485ccc9328 diff --git a/filedir.tex b/filedir.tex index 9cd3f89..8e31786 100644 --- a/filedir.tex +++ b/filedir.tex @@ -287,12 +287,12 @@ di dati) dovrà invece ricorrere a quelle fornite dal driver del dispositivo. \end{figure} Come si può notare dall'estratto di fig.~\ref{fig:kstruct_file}, la struttura -contiene, oltre ad alcune informazioni usate dall'interfaccia dei file -descriptor il cui significato emergerà più avanti, il puntatore \struct{f\_op} -ad una struttura \kstruct{file\_operation}. Questa è l'analoga per i file di -\kstruct{inode\_operation}, e definisce le operazioni generiche fornite dal -VFS per i file. Si sono riportate in tab.~\ref{tab:file_file_operations} le -più significative. +\kstruct{file} contiene, oltre ad alcune informazioni usate dall'interfaccia +dei file descriptor il cui significato emergerà più avanti, il puntatore +\struct{f\_op} ad una struttura \kstruct{file\_operation}. Questa è l'analoga +per i file di \kstruct{inode\_operation}, e definisce le operazioni generiche +fornite dal VFS per i file. Si sono riportate in +tab.~\ref{tab:file_file_operations} le più significative. \begin{table}[htb] \centering @@ -332,7 +332,7 @@ Anche in questo caso tutte le volte che deve essere eseguita una \textit{system call} o una qualunque altra operazione sul file il VFS andrà ad utilizzare la funzione corrispondente attraverso il puntatore \var{f\_op}. Dato che è cura del VFS quando crea la struttura all'apertura del -file, assegnare a \var{f\_op} il puntatore alla versione di +file assegnare a \var{f\_op} il puntatore alla versione di \kstruct{file\_operation} corretta per quel file, sarà possibile scrivere allo stesso modo sulla porta seriale come su un normale file di dati, e lavorare sui file allo stesso modo indipendentemente dal filesystem. @@ -340,12 +340,12 @@ sui file allo stesso modo indipendentemente dal filesystem. Il VFS realizza la quasi totalità delle operazioni relative ai file grazie alle funzioni presenti nelle due strutture \kstruct{inode\_operation} e \kstruct{file\_operation}. Ovviamente non è detto che tutte le operazioni -possibili siano poi disponibili in tutti i casi, ad esempio una \code{seek} -non è realizzabile per un dispositivo come la porta seriale o per una fifo, -mentre sui file del filesystem \texttt{vfat} non sono disponibili i permessi, -ma resta il fatto che grazie al VFS le \textit{system call} per le operazioni -sui file restano sempre le stesse nonostante le enormi differenze che possono -esserci negli oggetti a cui si applicano. +possibili siano poi disponibili in tutti i casi, ad esempio \code{llseek} non +sarà presente per un dispositivo come la porta seriale o per una fifo, mentre +sui file del filesystem \texttt{vfat} non saranno disponibili i permessi, ma +resta il fatto che grazie al VFS le \textit{system call} per le operazioni sui +file possono restare sempre le stesse nonostante le enormi differenze che +possono esserci negli oggetti a cui si applicano. \itindend{Virtual~File~System} @@ -355,6 +355,8 @@ esserci negli oggetti a cui si applicano. % * http://thecoffeedesk.com/geocities/rkfs.html % * http://www.linux.it/~rubini/docs/vfs/vfs.html + + \subsection{Il funzionamento di un filesystem Unix} \label{sec:file_filesystem} @@ -461,17 +463,17 @@ opportuno tenere sempre presente che: è la modalità in cui opera normalmente il comando \cmd{mv} attraverso la funzione \func{rename} (vedi sez.~\ref{sec:file_remove}). Questa operazione non modifica minimamente neanche l'\textit{inode} del file, dato che non si - opera su questo ma sulla directory che lo contiene. + opera sul file ma sulla directory che lo contiene. -\item Gli \textit{inode} dei file, che contengono i \textsl{metadati} ed i +\item Gli \textit{inode} dei file, che contengono i \textsl{metadati}, ed i blocchi di spazio disco, che contengono i dati, sono risorse indipendenti ed in genere vengono gestite come tali anche dai diversi filesystem; è pertanto possibile esaurire sia lo spazio disco (il caso più comune) che lo spazio per gli \textit{inode}. Nel primo caso non sarà possibile allocare ulteriore spazio, ma si potranno creare file (vuoti), nel secondo non si potranno creare nuovi file, ma si potranno estendere quelli che ci - sono.\footnote{questo comportamento non è generale, alcuni filesystem evoluti - possono evitare il problema dell'esaurimento degli \textit{inode} + sono.\footnote{questo comportamento non è generale, alcuni filesystem + evoluti possono evitare il problema dell'esaurimento degli \textit{inode} riallocando lo spazio disco libero per i blocchi.} \end{enumerate} @@ -506,19 +508,18 @@ tre, in quanto adesso sarà referenziata anche dalla voce ``\texttt{..}'' di \label{sec:file_ext2} -Benché non esista il filesystem di Linux, dato che esiste un supporto nativo -di diversi filesystem che sono in uso da anni, quello che gli avvicina di più -è la famiglia di filesystem evolutasi a partire dal \textit{second extended - filesystem}, o \acr{ext2}, che nonostante il nome è stato il primo ad essere -usato in maniera estensiva. Il filesystem \acr{ext2} ha subito un grande -sviluppo e diverse evoluzioni, fra cui l'aggiunta del \textit{journaling} con -\acr{ext3}, probabilmente ancora il filesystem più diffuso, ed una serie di -ulteriori miglioramento con il successivo \acr{ext4}, che sta iniziando a -sostituirlo gradualmente. In futuro è previsto che questo debba essere -sostituito da un filesystem completamente diverso, \acr{btrfs}, che dovrebbe -diventare il filesystem standard di Linux, ma questo al momento è ancora in -fase di sviluppo.\footnote{si fa riferimento al momento dell'ultima revisione - di di questo paragrafo, l'inizio del 2012.} +Benché non esista ``il'' filesystem di Linux, dato che esiste un supporto +nativo di diversi filesystem che sono in uso da anni, quello che gli avvicina +di più è la famiglia di filesystem evolutasi a partire dal \textit{second + extended filesystem}, o \acr{ext2}. Il filesystem \acr{ext2} ha subito un +grande sviluppo e diverse evoluzioni, fra cui l'aggiunta del +\textit{journaling} con \acr{ext3}, probabilmente ancora il filesystem più +diffuso, ed una serie di ulteriori miglioramento con il successivo \acr{ext4}, +che sta iniziando a sostituirlo gradualmente. In futuro è previsto che questo +debba essere sostituito da un filesystem completamente diverso, \acr{btrfs}, +che dovrebbe diventare il filesystem standard di Linux, ma questo al momento è +ancora in fase di sviluppo.\footnote{si fa riferimento al momento dell'ultima + revisione di di questo paragrafo, l'inizio del 2012.} Il filesystem \acr{ext2} nasce come filesystem nativo per Linux a partire dalle prime versioni del kernel e supporta tutte le caratteristiche di un @@ -610,15 +611,15 @@ contenenti un gran numero di file. % in caso di crash del sistema) -\subsection{La gestione dei filesystem} +\subsection{La gestione dell'uso dei filesystem} \label{sec:sys_file_config} Come accennato in sez.~\ref{sec:file_arch_overview} per poter accedere ai file occorre prima rendere disponibile al sistema il filesystem su cui essi sono memorizzati; l'operazione di attivazione del filesystem è chiamata -\textsl{montaggio}, per far questo in Linux si usa la funzione \funcd{mount} -il cui prototipo è:\footnote{la funzione è una versione specifica di Linux e - non è portabile.} +\textsl{montaggio}, per far questo in Linux si usa la funzione \funcd{mount}, +il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che + usa la omonima \textit{system call} e non è portabile.} \begin{funcproto}{ \fhead{sys/mount.h} @@ -668,35 +669,33 @@ passaggio di un argomento di una funzione, si intende che questi devono essere indicati con la stringa contenente il loro \itindex{pathname} \textit{pathname}. -In generale un filesystem è contenuto su un disco, e come illustrato in -sez.~\ref{sec:file_vfs_work} l'operazione di montaggio corrisponde a rendere -visibile il contenuto del suddetto disco, identificato attraverso il file di -dispositivo ad esso associato, all'interno di una directory dell'albero dei -file. - -Ma la struttura del \textit{Virtual File System} vista in -sez.~\ref{sec:file_vfs_work} è estremamente flessibile e può essere usata -anche per oggetti diversi da un disco. Ad esempio usando il \textit{loop - device} si può montare un file qualunque (come l'immagine di un CD-ROM o di -un floppy) che contiene un filesystem, inoltre alcuni filesystem, come -\file{proc} o \file{devfs} sono del tutto virtuali, i loro dati sono generati -al volo ad ogni lettura, e passati al kernel ad ogni scrittura. - -Il tipo di filesystem è specificato dall'argomento \param{filesystemtype}, che -deve essere una delle stringhe riportate nel file -\procfile{/proc/filesystems}, che come accennato in -sez.~\ref{sec:file_vfs_work} contiene l'elenco dei filesystem supportati dal -kernel. Nel caso si sia indicato uno dei filesystem virtuali, che non è -associato a nessun file di dispositivo, il contenuto di \param{source} viene -ignorato. +Normalmente un filesystem è contenuto su un disco o una partizione, ma come +illustrato in sez.~\ref{sec:file_vfs_work} la struttura del \textit{Virtual + File System} è estremamente flessibile e può essere usata anche per oggetti +diversi da un disco. Ad esempio usando il \textit{loop device} si può montare +un file qualunque (come l'immagine di un CD-ROM o di un floppy) che contiene +l'immagine di un filesystem, inoltre alcuni tipi di filesystem, come +\texttt{proc} o \texttt{sysfs} sono virtuali e non hanno un supporto che ne +contenga i dati, che invece sono generati al volo ad ogni lettura, e passati +indietro al kernel ad ogni scrittura.\footnote{costituiscono quindi un + meccanismo di comunicazione, attraverso l'ordinaria interfaccia dei file, + con il kernel.} + +Il tipo di filesystem che si vuole montare è specificato +dall'argomento \param{filesystemtype}, che deve essere una delle stringhe +riportate nel file \procfile{/proc/filesystems} che, come accennato in +sez.~\ref{sec:file_vfs_work}, contiene l'elenco dei filesystem supportati dal +kernel. Nel caso si sia indicato un filesystem virtuale, che non è associato a +nessun file di dispositivo, il contenuto di \param{source} viene ignorato. L'argomento \param{data} viene usato per passare le impostazioni relative alle caratteristiche specifiche di ciascun filesystem. Si tratta di una stringa di -parole chiave (separate da virgole e senza spazi) che indicano le opzioni del -filesytem che devono essere impostate, in sostanza viene usato il contenuto -del parametro dell'opzione \texttt{-o} del comando \texttt{mount}. I valori -utilizzabili dipendono dal tipo di filesystem e ciascuno ha i suoi, pertanto -si rimanda alla documentazione della pagina di manuale di questo comando. +parole chiave (separate da virgole e senza spazi) che indicano le cosiddette +opzioni del filesystem che devono essere impostate, in sostanza viene usato il +contenuto del parametro dell'opzione \texttt{-o} del comando \texttt{mount}. I +valori utilizzabili dipendono dal tipo di filesystem e ciascuno ha i suoi, +pertanto si rimanda alla documentazione della pagina di manuale di questo +comando. Dopo l'esecuzione della funzione il contenuto del filesystem viene resto disponibile nella directory specificata come \itindex{mount~point} @@ -727,32 +726,36 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}. \begin{table}[htb] \footnotesize \centering - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|p{8cm}|} \hline - \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\ + \textbf{Parametro} & \textbf{Significato}\\ \hline \hline - \const{MS\_RDONLY} & 1 & Monta in sola lettura.\\ - \const{MS\_NOSUID} & 2 & Ignora i bit \itindex{suid~bit} \acr{suid} e - \itindex{sgid~bit} \acr{sgid}.\\ - \const{MS\_NODEV} & 4 & Impedisce l'accesso ai file di dispositivo.\\ - \const{MS\_NOEXEC} & 8 & Impedisce di eseguire programmi.\\ - \const{MS\_SYNCHRONOUS}& 16 & Abilita la scrittura sincrona.\\ - \const{MS\_REMOUNT} & 32 & Rimonta il filesystem cambiando le opzioni.\\ - \const{MS\_MANDLOCK} & 64 & Consente il \textit{mandatory locking} - \itindex{mandatory~locking} (vedi - sez.~\ref{sec:file_mand_locking}).\\ - \const{S\_WRITE} & 128 & Scrive normalmente.\\ - \const{S\_APPEND} & 256 & Consente la scrittura solo in - \itindex{append~mode} \textit{append mode} - (vedi sez.~\ref{sec:file_sharing}).\\ - \const{S\_IMMUTABLE} & 512 & Impedisce che si possano modificare i file.\\ - \const{MS\_NOATIME} &1024 & Non aggiorna gli \textit{access time} (vedi - sez.~\ref{sec:file_file_times}).\\ - \const{MS\_NODIRATIME}&2048 & Non aggiorna gli \textit{access time} delle - directory.\\ - \const{MS\_BIND} &4096 & Monta il filesystem altrove.\\ - \const{MS\_MOVE} &8192 & Sposta atomicamente il punto di montaggio.\\ + \const{MS\_BIND} & Monta il filesystem altrove.\\ + \const{MS\_DIRSYNC} & .\\ + \const{MS\_MANDLOCK} & Consente il \textit{mandatory locking} + \itindex{mandatory~locking} (vedi + sez.~\ref{sec:file_mand_locking}).\\ + \const{MS\_MOVE} & Sposta atomicamente il punto di montaggio.\\ + \const{MS\_NOATIME} & Non aggiorna gli \textit{access time} (vedi + sez.~\ref{sec:file_file_times}).\\ + \const{MS\_NODEV} & Impedisce l'accesso ai file di dispositivo.\\ + \const{MS\_NODIRATIME} & Non aggiorna gli \textit{access time} delle + directory.\\ + \const{MS\_NOEXEC} & Impedisce di eseguire programmi.\\ + \const{MS\_NOSUID} & Ignora i bit \itindex{suid~bit} \acr{suid} e + \itindex{sgid~bit} \acr{sgid}.\\ + \const{MS\_RDONLY} & Monta in sola lettura.\\ + \const{MS\_RELATIME} & .\\ + \const{MS\_REMOUNT} & Rimonta il filesystem cambiando le opzioni.\\ + \const{MS\_SILENT} & .\\ + \const{MS\_STRICTATIME}& .\\ + \const{MS\_SYNCHRONOUS}& Abilita la scrittura sincrona.\\ + % \const{S\_WRITE} & Scrive normalmente.\\ + % \const{S\_APPEND} & Consente la scrittura solo in + % \itindex{append~mode} \textit{append mode} + % (vedi sez.~\ref{sec:file_sharing}).\\ + % \const{S\_IMMUTABLE} & Impedisce che si possano modificare i file.\\ \hline \end{tabular} \caption{Tabella dei codici dei flag di montaggio di un filesystem.} @@ -760,7 +763,6 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}. \end{table} % TODO aggiornare con i nuovi flag di man mount -% gli S_* non esistono più come segnalato da Alessio... % verificare i readonly mount bind del 2.6.26 La funzione \func{mount} può essere utilizzata anche per effettuare il @@ -6823,7 +6825,7 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % LocalWords: second linked journaled source filesystemtype unsigned device % LocalWords: mountflags NODEV ENXIO dummy devfs magic MGC RDONLY NOSUID MOVE % LocalWords: NOEXEC SYNCHRONOUS REMOUNT MANDLOCK NODIRATIME umount MNT statfs -% LocalWords: fstatfs fstab mntent ino bound orig new setpcap +% LocalWords: fstatfs fstab mntent ino bound orig new setpcap metadati sysfs %%% Local Variables: %%% mode: latex