\itindex{magic~number} \textit{magic number} \code{0xC0ED}, si può usare la
costante \const{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
riservata al \textit{magic number}, mentre per specificarlo si può dare un
- OR aritmetico con la costante \const{MS\_MGC\_VAL}.} oggi invece sono
-ignorati mentre i 16 meno significativi sono usati per specificare le opzioni
-come maschera binaria e vanno impostati con un OR aritmetico dei valori
-riportati nell'elenco seguente:
+ OR aritmetico con la costante \const{MS\_MGC\_VAL}.} e si potevano usare
+solo i 16 meno significativi. Oggi invece, con un numero di opzioni superiore,
+sono utilizzati tutti e 32 i bit, ma qualora nei 16 più significativi sia
+presente detto valore, che non esprime una combinazione valida, esso viene
+ignorato. Il valore dell'argomento deve essere espresso come maschera binaria
+e i vari bit devono essere impostati con un OR aritmetico dei rispettivi flag,
+identificati dalle costanti riportate nell'elenco seguente:
\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
\itindbeg{bind~mount}
\item[\const{MS\_BIND}] Effettua un cosiddetto \textit{bind mount}, in cui è
possibile montare una directory di un filesystem in un'altra directory,
l'opzione è disponibile a partire dai kernel della serie 2.4. In questo caso
- verranno presi in considerazione solo gli argomenti \texttt{source}, che
+ verranno presi in considerazione solo gli argomenti \param{source}, che
stavolta indicherà la directory che si vuole montare (e non un file di
- dispositivo) e \texttt{target} che indicherà la directory su cui verrà
+ dispositivo) e \param{target} che indicherà la directory su cui verrà
effettuato il \textit{bind mount}. Gli argomenti \param{filesystemtype}
e \param{data} vengono ignorati.
In sostanza quello che avviene è che in corrispondenza del \index{pathname}
- \textit{pathname} indicato da \texttt{target} viene montato l'\textit{inode}
- di \texttt{source}, così che la porzione di albero dei file presente sotto
- \texttt{source} diventi visibile allo stesso modo sotto
- \texttt{target}. Trattandosi esattamente di dati dello stesso filesystem,
+ \textit{pathname} indicato da \param{target} viene montato l'\textit{inode}
+ di \param{source}, così che la porzione di albero dei file presente sotto
+ \param{source} diventi visibile allo stesso modo sotto
+ \param{target}. Trattandosi esattamente dei dati dello stesso filesystem,
ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile
nell'altro, visto che entrambi faranno riferimento agli stessi
\textit{inode}.
Dal punto di vista del \itindex{Virtual~File~System} VFS l'operazione è
analoga al montaggio di un filesystem proprio nel fatto che anche in questo
caso si inserisce in corripondenza della \textit{dentry} di \texttt{target}
- un diverso \textit{inode}, che stavolta invece di essere quello della radice
- del filesystem indicato da un file di dispositivo è quello di una directory
- già montata.
+ un diverso \textit{inode}, che stavolta, invece di essere quello della
+ radice del filesystem indicato da un file di dispositivo, è quello di una
+ directory già montata.
- Si tenga presente che proprio per questo sotto \texttt{target} comparirà il
- contenuto che è presente sotto \texttt{source} all'interno del filesystem in
+ Si tenga presente che proprio per questo sotto \param{target} comparirà il
+ contenuto che è presente sotto \param{source} all'interno del filesystem in
cui quest'ultima è contenuta. Questo potrebbe non corrispondere alla
- porzione di albero che sta sotto \texttt{source} qualora in una
+ porzione di albero che sta sotto \param{source} qualora in una
sottodirectory di quest'ultima si fosse effettuato un altro montaggio. In
- tal caso infatti nella porzione di albero sotto \texttt{source} si
- troverebbe il contenuto del nuovo filesystem (o di un altro \textit{bind
- mount}) mentre sotto \texttt{target} ci sarebbe il contenuto presente nel
- filesystem originale.\footnote{questo evita anche il problema dei
- \textit{loop} di fig.~\ref{fig:file_link_loop}, dato che se anche si
- montasse su \texttt{target} una directory in cui essa è contenuta, il
- cerchio non potrebbe chiudersi perché ritornati a \texttt{target} dentro
- il \textit{bind mount} vi si troverebbe solo il contenuto originale e non
- si potrebbe tornare indietro.}
+ tal caso infatti nella porzione di albero sotto \param{source} si troverebbe
+ il contenuto del nuovo filesystem (o di un altro \textit{bind mount}) mentre
+ sotto \param{target} ci sarebbe il contenuto presente nel filesystem
+ originale.\footnote{questo evita anche il problema dei \textit{loop} di
+ fig.~\ref{fig:file_link_loop}, dato che se anche si montasse su
+ \param{target} una directory in cui essa è contenuta, il cerchio non
+ potrebbe chiudersi perché ritornati a \param{target} dentro il
+ \textit{bind mount} vi si troverebbe solo il contenuto originale e non si
+ potrebbe tornare indietro.}
Fino al kernel 2.6.26 questo flag doveva essere usato da solo, in quanto il
\textit{bind mount} continuava ad utilizzare le stesse opzioni del montaggio
originale, dal 2.6.26 è stato introdotto il supporto per il cosiddetto
\textit{read-only bind mount} e viene onorata la presenza del flag
\const{MS\_RDONLY}. In questo modo si ottiene che l'accesso ai file sotto
- \texttt{target} sia effettuabile esclusivamente in sola lettura.
+ \param{target} sia effettuabile esclusivamente in sola lettura.
Il supporto per il \textit{bind mount} consente di superare i limiti
presenti per gli \textit{hard link} (di cui parleremo in
\item[\const{MS\_DIRSYNC}] Richiede che ogni modifica al contenuto di una
directory venga immediatamente registrata su disco in maniera sincrona
- (introdotta a partire dai kernel della serie 2.6). Questo significa che la
- bufferizzazione effettuata dal
-
-\item[\const{MS\_MANDLOCK}] Consente il \textit{mandatory locking}
- \itindex{mandatory~locking} (vedi sez.~\ref{sec:file_mand_locking}).
-
-\item[\const{MS\_MOVE}] Sposta atomicamente il punto di montaggio.
-
-\item[\const{MS\_NOATIME}] Non aggiorna gli \textit{access time} (vedi
- sez.~\ref{sec:file_file_times}).
-
-\item[\const{MS\_NODEV}] Impedisce l'accesso ai file di dispositivo.
-
-\item[\const{MS\_NODIRATIME}] Non aggiorna gli \textit{access time} delle
- directory.
-\item[\const{MS\_NOEXEC}] Impedisce di eseguire programmi.
-
-\item[\const{MS\_NOSUID}] Ignora i bit \itindex{suid~bit} \acr{suid} e
- \itindex{sgid~bit} \acr{sgid}.
+ (introdotta a partire dai kernel della serie 2.6). L'opzione si applica a
+ tutte le directory del filesystem, ma su alcuni filesystem è possibile
+ impostarla a livello di singole directory o per i sottorami di una directory
+ con il comando \cmd{lsattr}.\footnote{questo avviene tramite delle opportune
+ \texttt{ioctl} (vedi sez.~\ref{sec:file_ioctl}).}
+
+ Questo consente di ridurre al minimo il rischio di perdita dei dati delle
+ directory in caso di crollo improvviso del sistema, al costo di una perdita
+ di prestazioni dato che le funzioni di scrittura relative ad operazioni
+ sulle directory non saranno più bufferizzate e si bloccheranno fino
+ all'arrivo dei dati sul disco prima che un programma possa proseguire.
+
+\item[\const{MS\_MANDLOCK}] Consente l'uso del \textit{mandatory locking}
+ \itindex{mandatory~locking} (vedi sez.~\ref{sec:file_mand_locking}) sui file
+ del filesystem. Per poterlo utilizzare effettivamente però esso dovrà essere
+ comunque attivato esplicitamente per i singoli file impostando i permessi
+ come illustrato in sez.~\ref{sec:file_mand_locking}.
+
+\item[\const{MS\_MOVE}] Effettua uno del spostamento del \itindex{mount~point}
+ \textit{mount point} di un filesystem. La directory del
+ \itindex{mount~point} \textit{mount point} originale deve essere indicata
+ nell'argomento \param{source}, e la sua nuova posizione
+ nell'argomento \param{target}. Tutti gli altri argomenti della funzione
+ vengono ignorati.
+
+ Lo spostamento avviene atomicamente, ed il ramo di albero presente
+ sotto \param{source} sarà immediatamante visibile sotto \param{target}. Non
+ esiste cioè nessun momento in cui il filesystem non risulti montato in una o
+ nell'altra directory e pertanto è garantito che la risoluzione di
+ \textit{pathname} relativi all'interno del filesystem non possa fallire.
+
+\item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
+ degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per
+ qualunque tipo di file. Dato che l'aggiornamento degli \textit{access time}
+ è una funzionalità la cui utilità è spesso irrilevante ma comporta un costo
+ elevato visto che una qualunque lettura comporta comunque una scrittura su
+ disco,\footnote{e questo ad esempio ha conseguenze molto pesanti nell'uso
+ della batteria sui portatili.} questa opzione consente di disabilitarla
+ completamente. La soluzione può risultare troppo drastica dato che
+ l'informazione viene comunque utilizzata da alcuni programmi, per cui nello
+ sviluppo del kernel sono state introdotte altre opzioni che forniscono
+ soluzioni più appropriate e meno radicali.
+
+\item[\const{MS\_NODEV}] Viene disabilitato sul filesystem l'accesso ai file
+ di dispositivo eventualmente presenti su di esso. L'opzione viene usata come
+ misura di precauzione per rendere inutile la presenza di eventuali file di
+ dispositivo su filesystem che non dovrebbero contenerne.\footnote{si ricordi
+ che le convenzioni del \itindex{Filesystem~Hierarchy~Standard~(FHS)}
+ \textit{Linux Filesystem Hierarchy Standard} richiedono che questi siano
+ mantenuti esclusivamente sotto \texttt{/dev}.}
+
+ Viene utilizzata, assieme a \const{MS\_NOEXEC} e \const{MS\_NOSUID}, per
+ fornire un accesso più controllato a quei filesystem di cui gli utenti hanno
+ il controllo dei contenuti, in particolar modo quelli posti su dispositivi
+ rimuovibili. In questo modo si evitano alla radice possibili situazioni in
+ cui un utente malizioso inserisce su uno di questi filesystem dei file di
+ dispositivo con permessi ``opportunamente'' ampliati che gli consentano di
+ accedere anche a risorse cui non dovrebbe.
+
+\item[\const{MS\_NODIRATIME}] Viene disabilitato sul filesystem
+ l'aggiornamento degli \textit{access time} (vedi
+ sez.~\ref{sec:file_file_times}), ma soltanto per le directory. Costituisce
+ una alternativa per \const{MS\_NOATIME}, che elimina l'informazione per le
+ directory, che in pratica che non viene mai utilizzata, mantenendola per i
+ file in cui invece ha un impiego, sia pur limitato.
+
+\item[\const{MS\_NOEXEC}] Viene disabilitata sul filesystem l'esecuzione di un
+ qualunque file eseguibile eventualmente presente su di esso. L'opzione viene
+ usata come misura di precauzione per rendere impossibile l'uso di programmi
+ posti su filesystem che non dovrebbero contenerne.
+
+ Anche in questo caso viene utilizzata per fornire un accesso più controllato
+ a quei filesystem di cui gli utenti hanno il controllo dei contenuti. Da
+ questo punto di vista l'opzione è meno importante delle analoghe
+ \const{MS\_NODEV} e \const{MS\_NOSUID} in quanto l'esecuzione di un
+ programma creato dall'utente pone un livello di rischio nettamente
+ inferiore, ed è in genere consentita per i file contenuti nella sua home
+ directory.\footnote{cosa che renderebbe superfluo l'attivazione di questa
+ opzione, il cui uso ha senso solo per ambienti molto controllati in cui si
+ vuole che gli utenti eseguano solo i programmi forniti
+ dall'amministratore.}
+
+\item[\const{MS\_NOSUID}] Viene disabilitato sul filesystem l'effetto dei bit
+ dei permessi \itindex{suid~bit} \acr{suid} e \itindex{sgid~bit} \acr{sgid}
+ (vedi sez.~\ref{sec:file_special_perm}) eventualmente presenti sui file in
+ esso contenuti. L'opzione viene usata come misura di precauzione per rendere
+ inefficace l'effetto di questi bit per filesystem in cui non ci dovrebbero
+ essere file dotati di questi permessi.
+
+ Di nuovo viene utilizzata, analogamente a \const{MS\_NOEXEC} e
+ \const{MS\_NODEV}, per fornire un accesso più controllato a quei filesystem
+ di cui gli utenti hanno il controllo dei contenuti. In questo caso si evita
+ che un utente malizioso possa inserire su uno di questi filesystem un
+ eseguibile con il bit \itindex{suid~bit} \acr{suid} attivo e di proprietà
+ dell'amministratore o di un altro utente, che gli consentirebbe di eseguirlo
+ per conto di quest'ultimo.
\item[\const{MS\_PRIVATE}] (non documentato).
-\item[\const{MS\_RDONLY}] Monta in sola lettura.
+\item[\const{MS\_RDONLY}] Esegue il montaggio del filesystem in sola lettura,
+ non sarà possibile nessuna modifica ai suoi contenuti. Viene usato tutte le
+ volte che si deve accedere ai contenuti di un filesystem con la certezza che
+ questo non venga modificato (ad esempio per ispezionare un filesystem
+ corrotto). All'avvio di default il kernel monta la radice in questa
+ modalità.
\item[\const{MS\_RELATIME}] .
-\item[\const{MS\_REMOUNT}] Rimonta il filesystem cambiando le opzioni.
+\item[\const{MS\_REMOUNT}] Consente di rimontare un filesystem già montato
+ cambiandone le opzioni di montaggio in maniera atomica. In questo modo si
+ possono modificare le opzioni del filesystem anche se questo è in uso. Gli
+ argomenti \param{source} e \param{target} devono essere gli stessi usati per
+ il montaggio originale, mentre \param{data} che \param{mountflags}
+ conterranno le nuove opzioni, \param{filesystemtype} viene ignorato.
+
+ Qualunque opzione specifica del filesystem indicata con \param{data} può
+ essere modificata, mentre con \param{mountflags} possono essere modificate
+ solo alcune opzioni generiche. Con i kernel più recenti queste sono soltanto
+ \const{MS\_MANDLOCK}, \const{MS\_RDONLY} e \const{MS\_SYNCHRONOUS}, prima
+ del kernel 2.6.16 potevano essere modificate anche le ulteriori
+ \const{MS\_NOATIME} e \const{MS\_NODIRATIME}, ed infine prima del kernel
+ 2.4.10 anche \const{MS\_NODEV}, \const{MS\_NOEXEC} e \const{MS\_NOSUID}.
\item[\const{MS\_SHARE}] Shared mount (non documentato).