Aggiunta umount2 e riscritto il resto di mount
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 17 Jan 2002 01:04:22 +0000 (01:04 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 17 Jan 2002 01:04:22 +0000 (01:04 +0000)
system.tex

index 9f07508f66e22de651a6092ec88c39c42758c40d..1572830cfcf158113051ad811ee6444a661aab0e 100644 (file)
@@ -75,7 +75,7 @@ avere un valore minimo di 8.
     \hline
     \hline
     \macro{MB\_LEN\_MAX}&       16  & massima dimensione di un 
-                                      carattere multibyte\\
+                                      carattere esteso\\
     \macro{CHAR\_BIT} &          8  & bit di \type{char}\\
     \macro{UCHAR\_MAX}&        255  & massimo di \type{unsigned char}\\
     \macro{SCHAR\_MIN}&       -128  & minimo di \type{signed char}\\
@@ -340,7 +340,7 @@ spiegazioni, si pu
 In generale ogni limite o caratteristica del sistema per cui è definita una
 macro, sia dagli standard ANSI C e ISO C90, che da POSIX.1 e POSIX.2, può
 essere ottenuto attraverso una chiamata a \func{sysconf}. Il valore si otterrà
-speficando come valore del parametro \param{name} il nome ottenuto aggiungendo
+specificando come valore del parametro \param{name} il nome ottenuto aggiungendo
 \code{\_SC\_} ai nomi delle macro definite dai primi due, o sostituendolo a
 \code{\_POSIX\_} per le macro definite dagli gli altri due.
 
@@ -497,7 +497,7 @@ definita in \file{sys/utsname.h} come:
 \end{lstlisting}
 e le informazioni memorizzate nei suoi membri indicano rispettivamente:
 \begin{itemize*}
-\item il nome del systema operativo;
+\item il nome del sistema operativo;
 \item il nome della release del kernel;
 \item il nome della versione del kernel;
 \item il tipo di macchina in uso;
@@ -524,7 +524,8 @@ standardizzazione della sezione precedente, e per i quali occorre, oltre al
 meccanismo di settaggio, pure un meccanismo di lettura.
 
 Affronteremo questi argomenti in questa sezione, insieme alle funzioni che si
-usano per la gestione ed il controllo dei filesystem. 
+usano per il controllo di altre caratteristiche generali del sistema, come
+quelle per la gestione dei filesystem e di utenti e gruppi.
 
 
 \subsection{La funzione \func{sysctl} ed il filesystem \file{/proc}}
@@ -587,8 +588,8 @@ essere trovati in \file{sysctl.h}, essi inoltre dipendono anche dallo stato
 corrente del kernel (ad esempio dai moduli che sono stati caricati nel
 sistema) e in genere i loro nomi possono variare da una versione di kernel
 all'altra; per questo è sempre il caso di evitare l'uso di \func{sysctl}
-quando esistono modalità alternative per ottenere le stesse informazioni,
-alcuni esempi di parametri ottenibili sono:
+quando esistono modalità alternative per ottenere le stesse informazioni.
+Alcuni esempi di parametri ottenibili sono:
 \begin{itemize*}
 \item il nome di dominio
 \item i parametri del meccanismo di \textit{paging}.
@@ -599,14 +600,14 @@ alcuni esempi di parametri ottenibili sono:
 \end{itemize*}
 
 Come accennato in Linux si ha una modalità alternativa per accedere alle
-stesse informazioni di \func{sysctl} attaverso l'uso del filesystem
+stesse informazioni di \func{sysctl} attraverso l'uso del filesystem
 \file{/proc}. Questo è un filesystem virtuale, generato direttamente dal
 kernel, che non fa riferimento a nessun dispositivo fisico, ma presenta in
 forma di file alcune delle strutture interne del kernel stesso.
 
 In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
 di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
-speficando un pathname e leggendo e scrivendo sul file corrispondente al
+specificando un pathname e leggendo e scrivendo sul file corrispondente al
 parametro scelto.  Il kernel si occupa di generare al volo il contenuto ed i
 nomi dei file corrispondenti, e questo ha il grande vantaggio di rendere
 accessibili i vari parametri a qualunque comando di shell e di permettere la
@@ -618,7 +619,7 @@ commenti in \file{linux/sysctl.h}, la informazione disponibile in
 del kernel, nella directory \file{Documentation/sysctl}.
 
 
-\subsection{La configurazione dei filesystem}
+\subsection{La gestione delle proprietà dei filesystem}
 \label{sec:sys_file_config}
 
 Come accennato in \secref{sec:file_organization} per poter accedere ai file
@@ -638,7 +639,7 @@ sulla directory \param{target}.
   fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono
   essere restituiti in \var{errno} sono:
   \begin{errlist}
-  \item[\macro{EPERM}] il processo non ha i provilegi di amministratore.
+  \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
   \item[\macro{ENODEV}] \param{filesystemtype} non esiste o non è configurato
     nel kernel.
   \item[\macro{ENOTBLK}] non si è usato un \textit{block device} per
@@ -663,23 +664,50 @@ sulla directory \param{target}.
   \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
 \end{prototype}
 
+
 La funzione monta sulla directory \param{target}, detta \textit{mount point},
-il filesystem contenuto in \param{source}. Di norma questo è un file di
-dispositivo che fa riferimento al disco (o al device a blocchi) che deve
-essere montato, ma può anche essere un file normale che contiene un
-filesystem, (che può essere montato \textit{in loopback}) o anche una
-directory. Dal kernel 2.4.x infatti è divenuto possibile sia spostare
-atomicamente un \textit{mount point} da una directory ad un'altra, che montare
-in più punti lo stesso filesystem.
-
-Con \param{filesystemtype} si indica il tipo di filesystem (che
-deve essere supportato dal kernel) indicato dalla stringa che lo identifica
-(che per quelli supportati è mantenuta in \file{/proc/filesystems}).
-
-Il parametro \param{mountflags} serve invece per specificare le opzioni di
-montaggio, esso è passato come intero a 32 bit i cui 16 più significativi
-devono essere \code{0xC0ED} mentre i 16 meno significativi costituiscono una
-maschera specificabile con un and binario dei valori riportati in \ntab.
+il filesystem contenuto in \param{source}. In generale un filesystem è
+contenuto su un disco, e l'operazione di montaggio corrisponde a rendere
+visibile al sistema il contenuto del suddetto disco, identificato attraverso
+il file di dispositivo ad esso associato.
+
+Ma la struttura del virtual filesystem vista in \secref{sec:file_vfs} è molto
+più 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 da \param{filesystemtype}, che deve essere
+una delle stringhe riportate in \file{/proc/filesystems}, che contiene
+l'elenco dei filesystem supportati dal kernel; nel caso si sia indicato uno
+dei filesystem virtuali, il contenuto di \param{source} viene ignorato.
+
+Dopo l'esecuzione della funzione il contenuto del filesystem viene resto
+disponibile nella directory specificata come \textit{mount point}, il
+precedente contenuto di detta directory viene mascherato dal contenuto della
+directory radice del filesystem montato.
+
+Dal kernel 2.4.x inoltre è divenuto possibile sia spostare atomicamente un
+\textit{mount point} da una directory ad un'altra, che montare in diversi
+\textit{mount point} lo stesso filesystem, che montare più filesystem sullo
+stesso \textit{mount point} (nel qual caso vale quanto appena detto, e solo il
+contenuto dell'ultimo filesystem montato sarà visibile).
+
+Ciascun filesystem è dotato di caratteristiche specifiche che possono essere
+attivate o meno, alcune di queste sono generali (anche se non è detto siano
+disponibili in ogni filesystem), e vengono specificate come opzioni di
+montaggio con l'argomento \param{mountflags}.  
+
+In Linux \param{mountflags} deve essere un intero a 32 bit i cui 16 più
+significativi sono un \textit{magic number}\footnote{cioè un numero speciale
+  usato come identificativo, che nel caso è \code{0xC0ED}; si può usare la
+  costante \macro{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
+  riservata al \textit{magic number}.} mentre i 16 meno significativi sono
+usati per specificare le opzioni; essi sono usati come maschera binaria e
+vanno settati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i
+valori riportati in \ntab.
 
 \begin{table}[htb]
   \centering
@@ -688,18 +716,22 @@ maschera specificabile con un and binario dei valori riportati in \ntab.
     \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \macro{MS\_RDONLY}     &  1 & montain sola lettura\\
-    \macro{MS\_NOSUID}     &  2 & ignora i bit \acr{suig} e \acr{sgid}\\
+    \macro{MS\_RDONLY}     &  1 & monta in sola lettura\\
+    \macro{MS\_NOSUID}     &  2 & ignora i bit \acr{suid} e \acr{sgid}\\
     \macro{MS\_NODEV}      &  4 & impedisce l'accesso ai file di dispositivo\\
     \macro{MS\_NOEXEC}     &  8 & impedisce di eseguire programmi \\
     \macro{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\
     \macro{MS\_REMOUNT}    & 32 & rimonta il filesystem cambiando i flag\\
     \macro{MS\_MANDLOCK}   & 64 & consente il \textit{mandatory locking} (vedi
-                                 \secref{sec:file_mand_locking})\\
+                                  \secref{sec:file_mand_locking})\\
+    \macro{S\_WRITE}      & 128 & scrive normalmente \\
+    \macro{S\_APPEND}     & 256 & consente la scrittura solo in \textit{append
+                                  mode} (vedi \secref{sec:file_sharing})\\
+    \macro{S\_IMMUTABLE}  & 512 & impedisce che si possano modificare i file \\
     \macro{MS\_NOATIME}   &1024 & non aggiorna gli \textit{access time} (vedi
-                                 \secref{sec:file_file_times})\\
+                                  \secref{sec:file_file_times})\\
     \macro{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle
-                                 directory\\
+                                  directory\\
     \macro{MS\_BIND}      &4096 & monta il filesystem altrove\\
     \macro{MS\_MOVE}      &8192 & sposta atomicamente il punto di montaggio \\
     \hline
@@ -708,13 +740,19 @@ maschera specificabile con un and binario dei valori riportati in \ntab.
   \label{tab:sys_mount_flags}
 \end{table}
 
-Infine l'aromento \param{data} serve per passare ulteriori informazioni che
-possono essere necessarie ai vari filesystem e che variano da filesystem a
-filesystem. 
+Per il settaggio delle caratteristiche particolari di ciascun filesystem si
+usa invece l'argomento \param{data} che serve per passare le ulteriori
+informazioni necessarie, che ovviamente variano da filesystem a filesystem.
+
+La funzione \func{mount} può essere utilizzata anche per effettuare il
+\textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo
+alcune delle caratteristiche di funzionamento (ad esempio passare da sola
+lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei
+bit di \param{mountflags}, \macro{MS\_REMOUNT}, che se settato specifica che
+deve essere effettuato il rimontaggio del filesystem (con le opzioni
+specificate dagli altri bit), anche in questo caso il valore di \param{source}
+viene ignorato.
 
-Si tenga presente inoltre che, sempre a partire dal kernel 2.4.x, è possibile
-sovrapporre più montaggi su una stessa directory, nel qual caso si vedrà
-sempre l'ultimo filesystem che è stato montato. 
 
 Una volta che non si voglia più utilizzare un certo filesystem è possibile
 \textsl{smontarlo} usando la funzione \func{umount}, il cui prototipo è:
@@ -725,7 +763,7 @@ Una volta che non si voglia pi
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
     fallimento, nel qual caso \var{errno} viene settata a:
   \begin{errlist}
-  \item[\macro{EPERM}] il processo non ha i provilegi di amministratore.
+  \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
   \item[\macro{EBUSY}]  \param{target} è la directory di lavoro di qualche
   processo, o contiene dei file aperti, o un altro mount point.
   \end{errlist}
@@ -733,10 +771,19 @@ Una volta che non si voglia pi
   \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
 \end{prototype}
 \noindent la funzione prende il nome della directory su cui il filesystem è
-montato e non il file che è stato montato, in quanto con il kernel 2.4.x è
-possibile montare lo stesso dispositivo in più punti; inoltre nel caso più di
-un filesystem sia stato montato sullo stesso \textit{mount point} viene
-smontato quello che è stato montato per ultimo.
+montato e non il file o il dispositivo che è stato montato\footnote{questo è
+  vero a partire dal kernel 2.3.99-pre7, prima esistevano due chiamate
+  separate e la funzione poteva essere usata anche specificando il file di
+  dispositivo.}, in quanto con il kernel 2.4.x è possibile montare lo stesso
+dispositivo in più punti. Nel caso più di un filesystem sia stato montato
+sullo stesso \textit{mount point} viene smontato quello che è stato montato
+per ultimo.
+
+Linux provvede inoltre una seconda funzione \func{umount2}, che, in alcuni
+casi, permette di forzare lo smontaggio di un filesystem nei casi in cui mount
+fallirebbe; il suo prototipo è:
+
+
 
 Due funzioni, utili per ottenere in maniera diretta informazioni riguardo al
 filesystem su cui si trova un certo file, sono \func{statfs} e \func{fstatfs},