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 
     \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}\\
     \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à
 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.
 
 \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*}
 \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;
 \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
 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}}
 
 
 \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}
 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}.
 \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
 \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
 \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
 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}.
 
 
 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
 \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}
   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
   \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}
 
   \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
 \end{prototype}
 
+
 La funzione monta sulla directory \param{target}, detta \textit{mount point},
 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
 
 \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
     \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
     \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
     \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
     \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
     \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}
 
   \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 è:
 
 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}
   \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}
   \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 è
   \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},
 
 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},