[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

48. Gestione di dischi e filesystem

I sistemi Unix gestiscono sempre solo un unico filesystem globale. Questo può essere anche composto da più filesystem di dimensioni inferiori, uno principale (radice) e gli altri secondari, collegati fra loro in modo da formare un'unica struttura.

La tabella 48.1 elenca i programmi e i file a cui si accenna in questo capitolo.

Nome Descrizione
fdformat Formattazione a basso livello dei dischetti.
badblocks Controllo dell'integrità di un disco o di una partizione.
fdisk Creazione e modifica delle partizioni.
cfdisk Creazione e modifica delle partizioni (programma più amichevole).
mke2fs | mkfs.ext2 Creazione di un filesystem Second-extended.
mkdosfs | mkfs.msdos Creazione di un filesystem Dos-FAT.
mkfs programma frontale per l'utilizzo dei programmi di creazione dei filesystem.
e2fsck | fsck.ext2 Controllo di un filesystem Second-extended.
dosfsck | fsck.msdos Controllo di un filesystem Dos-FAT.
fsck Front-end per l'utilizzo dei programmi di controllo dei filesystem.
mount Collegamento (innesto) di un filesystem in quello globale.
umount Distacco di un filesystem da quello globale.
/etc/fstab Elenco di filesystem e punti di innesto predefiniti.
/etc/mtab Elenco dei montaggi (innesti) attivi.
df Utilizzo del disco.
quotacheck Scansione del filesystem di una partizione per fare il conteggio dell'utilizzo.
quotaon Attivazione del controllo delle quote.
quotaoff Disattivazione del controllo delle quote.
edquota Modifica delle quote assegnate.
repquota Informazioni sulle quote assegnate e sulla situazione effettiva.
quota Verifica della quota personale.
update (bdflush) Programma demone per lo scarico periodico della memoria cache dei dischi.
sync Scarico manuale della memoria cache dei dischi.
automount Gestione dei montaggi automatici.

Tabella 48.1: Riepilogo dei programmi e dei file per la gestione dei dischi e dei filesystem.

48.1 Preparazione dei filesystem

Prima di poter utilizzare un filesystem, occorre costruirlo. Quando si parla di dischi si distinguono tre fasi fondamentali:

  1. l'inizializzazione a basso livello;

  2. l'eventuale suddivisione in partizioni;

  3. la creazione della struttura iniziale del tipo di filesystem che si intende utilizzare.

L'inizializzazione a basso livello è spesso compito di programmi residenti nel firmware (o nel BIOS se si preferisce il termine), a eccezione dei dischi rimovibili. In quest'ultimo caso, a parte i dischetti, si deve quasi sempre utilizzare quanto fornito insieme alle unità di memorizzazione, anche se si tratta di programmi fatti per altri sistemi operativi.

Per l'inizializzazione a basso livello dei dischetti si può utilizzare fdformat, per la suddivisione in partizioni dei dischi più grandi si può utilizzare fdisk (o cfdisk), per creare i vari filesystem si devono utilizzare programmi diversi a seconda del tipo di filesystem.

Tutte queste operazioni vengono svolte facendo riferimento ai file di dispositivo relativi. Di conseguenza, possono essere compiute solo dagli utenti che hanno i permessi di accesso in lettura e scrittura per questi file. Generalmente, solo l'utente root può intervenire in questo modo.

48.1.1 # fdformat

fdformat [-n] <dispositivo>

fdformat esegue un'inizializzazione a basso livello di un dischetto. Il nome del file di dispositivo indica l'unità a dischetti in cui si vuole compiere l'operazione e anche il formato che si vuole ottenere. Per questo motivo è meglio evitare di utilizzare semplicemente nomi di dispositivo generici come /dev/fd0 e /dev/fd1. Molto probabilmente si utilizzeranno maggiormente i formati relativi a /dev/fd0u1440 e /dev/fd1u1440 che si riferiscono al formato da 1440 Kbyte dei dischetti da 3,5 pollici. *1*

L'opzione -n serve a saltare la fase di controllo successiva all'inizializzazione: in generale è meglio non utilizzarla in modo da verificare la riuscita dell'inizializzazione.

Se si vuole consentire agli utenti comuni di compiere questa operazione occorre regolare i permessi dei file di dispositivo dei dischetti in modo da permettere loro l'accesso in lettura e scrittura.

Esempi

fdformat /dev/fd0u1440

Inizializza un dischetto da 1440 Kbyte nella prima unità a dischetti.

fdformat /dev/fd1u1440

Inizializza un dischetto da 1440 Kbyte nella seconda unità a dischetti.

48.1.2 # badblocks

badblocks [<opzioni>] <dispositivo> <dimensione-in-blocchi> [<blocco-iniziale>] 

badblocks è un programma in grado di verificare l'integrità di un disco o di una partizione. Il controllo è fatto a basso livello senza considerare la struttura del filesystem. Normalmente i programmi di inizializzazione, sia a basso livello che a livello superiore, sono in grado di fare questo controllo da soli. Per questo badblocks viene usato raramente.

Il tipo di controllo può essere in lettura oppure anche in scrittura. È evidente che, se si specifica attraverso le opzioni che si intende effettuare un controllo in scrittura, i dati contenuti nel disco o nella partizione sono perduti.

Alcune opzioni

-b <dimensione-dei-blocchi>

Permette di definire la dimensione dei blocchi espressa in byte. Il valore predefinito è 1024.

-w

Esegue un test in scrittura controllando successivamente l'esito. Questa opzione deve essere usata con prudenza dal momento che, in questo modo, si cancellano i dati del disco o della partizione da controllare.

Esempi

badblocks /dev/fd0u1440 1440

Esegue il controllo del dischetto, in sola lettura, per tutta la sua estensione: 1440 blocchi di 1 Kbyte. Trattandosi di un controllo in sola lettura, badblocks può essere eseguito da un utente comune (sempre che tali utenti abbiano i permessi in lettura per il dispositivo che si va a leggere).

48.1.3 # fdisk

fdisk [<opzioni>] [<dispositivo>]

fdisk è un programma interattivo per la modifica della tabella delle partizioni di un disco che possa essere organizzato in questo modo. Il nome del file di dispositivo fa riferimento all'intero disco, quindi si possono utilizzare nomi come /dev/hda, /dev/hdb, /dev/hdc,... /dev/sda, /dev/sdb,... a seconda che si tratti di dischi IDE o SCSI.

Una volta avviato fdisk, si interagisce con questo attraverso comandi composti da una sola lettera. In particolare, la lettera m richiama l'elenco dei comandi disponibili.

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatiblity flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   p   print the partition table
   q   quit without saving changes
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Quando viene creata una nuova partizione, questa viene definita automaticamente del tipo Linux-nativa, ma in certi casi può essere necessario modificare il tipo di partizione creato attraverso il comando t. Ogni tipo di partizione ha un codice (espresso in esadecimale) che può essere conosciuto anche attraverso fdisk stesso, durante il suo funzionamento.

 0  Empty            9  AIX bootable    75  PC/IX           b7  BSDI fs
 1  DOS 12-bit FAT   a  OS/2 Boot Manag 80  Old MINIX       b8  BSDI swap
 2  XENIX root      40  Venix 80286     81  Linux/MINIX     c7  Syrinx
 3  XENIX usr       51  Novell?         82  Linux swap      db  CP/M
 4  DOS 16-bit <32M 52  Microport       83  Linux native    e1  DOS access
 5  Extended        63  GNU HURD        93  Amoeba          e3  DOS R/O
 6  DOS 16-bit >=32 64  Novell Netware  94  Amoeba BBT      f2  DOS secondary
 7  OS/2 HPFS       65  Novell Netware  a5  BSD/386         ff  BBT
 8  AIX

Le modifiche alla tabella delle partizioni vengono registrate solo nel momento in cui si termina l'esecuzione del programma con il comando w. Se fdisk segnala qualche tipo di errore in questo momento, potrebbe essere necessario riavviare il sistema prima di utilizzare il disco su cui sono state apportate queste modifiche.

Alcune opzioni

-l

Emette l'elenco delle partizioni esistenti nelle unità IDE e SCSI. Non inizia alcuna attività interattiva.

-s <partizione>

Utilizzando questa opzione seguita dal nome del file di dispositivo che fa riferimento a una partizione (/dev/hda1, /dev/hda2, ecc.) si ottiene la sua dimensione. Questa informazione è importante nel momento in cui si vuole creare al suo interno un filesystem e il programma utilizzato non è in grado di determinarla da solo.

48.1.4 # cfdisk

cfdisk [<opzioni>] [<dispositivo>]

cfdisk è un programma interattivo per la modifica della tabella delle partizioni di un disco che possa essere organizzato in questo modo. Si tratta di un programma che svolge le stesse funzioni di fdisk offrendo un sistema di interazione meno spartano.

Dal momento che richiede delle librerie particolari per la gestione dello schermo (ncurses), è poco indicato il suo utilizzo in presenza di sistemi estremamente ridotti o di emergenza. Ciò significa che il programma fdisk tradizionale non può essere abbandonato per adottare esclusivamente cfdisk.

48.1.5 # mke2fs | mkfs.ext2

mke2fs [<opzioni>] <dispositivo> [<dimensione-in-blocchi>]

mkfs.ext2 [<opzioni>] <dispositivo> [<dimensione-in-blocchi>]

mke2fs permette di creare un filesystem di tipo Ext2 (Second-extended) in un'unità di memorizzazione. Questa viene indicata nel modo consueto, attraverso il nome del file di dispositivo corrispondente (/dev/...).

La dimensione è espressa in blocchi. Se questo valore non viene specificato, mke2fs cerca di determinarlo da solo, ma non sempre il valore risulta corretto, quindi conviene fornire questa indicazione.

Vedere mke2fs(8).

Alcune opzioni

-b <dimensione-del-blocco>

Permette di definire la dimensione dei blocchi, espressa in byte.

-c

Prima di creare il filesystem controlla i blocchi in modo da isolare quelli difettosi. Il controllo viene eseguito in sola lettura.

-i <byte-per-inode>

Definisce il rapporto byte/inode. mke2fs crea un inode a ogni intervallo stabilito espresso in byte. Il valore predefinito è di 4 Kbyte (4096) e non può essere inferiore a 1 Kbyte (1024).

-q

Esegue l'operazione senza emettere informazioni di alcun tipo, in modo da poter essere utilizzato agevolmente all'interno di script.

-S

Scrive solo il superblocco e il descrittore di gruppo. Ciò può essere utile se, sia il superblocco principale che quelli di riserva sono rovinati e si intende tentare, come ultima risorsa, un recupero dei dati. In questo modo, la tabella degli inode e altre informazioni non vengono modificate. Subito dopo è necessario utilizzare il programma e2fsck ( 48.2.1), ma non c'è alcuna garanzia che il recupero funzioni.

48.1.6 # mkdosfs | mkfs.msdos

mkdosfs [<opzioni>] <dispositivo> [<dimensione-in-blocchi>]

mkfs.msdos [<opzioni>] <dispositivo> [<dimensione-in-blocchi>]

mkdosfs permette di creare un filesystem Dos-FAT. Può essere usato per tutti i tipi di unità a disco, compresi i dischetti.

Vedere mkdosfs(8).

Alcune opzioni

-c

Prima di creare il filesystem controlla i blocchi in modo da isolare quelli difettosi. Il controllo viene eseguito in sola lettura.

Esempi

mkdosfs -c /dev/fd0

Crea un filesystem Dos-FAT nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie e determinando automaticamente la dimensione in blocchi.

48.1.7 # mkfs

mkfs [-t <tipo-di-filesystem>] [<opzioni-specifiche>] <dispositivo> [<dimensione-in-blocchi>]

mkfs è un programma che uniforma l'utilizzo dei programmi specifici per la creazione dei vari tipi di filesystem. In questi casi si può parlare anche di programma frontale oppure si usa il termine inglese front-end.

L'opzione -t serve per specificare il tipo di filesystem da creare, in questo modo mkfs sa a quale programma deve rivolgersi. Le opzioni specifiche dipendono dal tipo di filesystem, ovvero dal programma che si prenderà cura effettivamente dell'inizializzazione.

Esempi

mkfs -t msdos -c /dev/fd0

Crea un filesystem Dos-FAT nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie e determinando automaticamente la dimensione in blocchi.

mkfs -t ext2 -c /dev/fd0 1440

Crea un filesystem Ext2 nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie. La dimensione in blocchi viene indicata in modo esplicito.

48.2 Controllo dei filesystem

I dati contenuti all'interno di un filesystem sono organizzati in una struttura articolata e delicata. A volte, specie se succedono incidenti, conviene controllare questa struttura attraverso un programma che si occupa di risistemare le cose.

Tutte queste operazioni vengono svolte facendo riferimento ai file di dispositivo relativi. Di conseguenza, possono essere compiute solo dagli utenti che hanno i permessi di accesso necessari al tipo di operazione da compiere.

48.2.1 # e2fsck | fsck.ext2

e2fsck [<opzioni>] <dispositivo>

fsck.ext2 [<opzioni>] <dispositivo>

e2fsck permette di eseguire un controllo in un filesystem di tipo Ext2 (Second-extended) e di applicare le correzioni ritenute necessarie. In generale, è opportuno che il filesystem da controllare non sia montato.

Vedere e2fsck(8).

Alcune opzioni

-c

Avvia a sua volta il programma badblocks in modo da ricercare e segnare eventuali blocchi difettosi.

-f

Forza il controllo anche se il filesystem sembra in ordine (un filesystem che sembra non contenere errori viene definito «pulito»: clean).

-F

Prima di procedere, fa in modo di scaricare la memoria cache del filesystem su cui si vuole intervenire.

-n

Esegue il controllo in sola lettura, rispondendo automaticamente n, no, a tutte le domande che potrebbero essere fatte.

-p

Ripara automaticamente il filesystem senza fare alcuna domanda.

-y

Risponde automaticamente y, yes, a tutte le domande che potrebbero essere fatte, in modo da permetterne l'utilizzo non interattivo attraverso uno script.

Valore di uscita

Il valore restituito da e2fsck è il risultato della somma delle condizioni seguenti:

48.2.2 # dosfsck | fsck.msdos

dosfsck [<opzioni>] <dispositivo>

fsck.msdos [<opzioni>] <dispositivo>

dosfsck permette di eseguire un controllo in un filesystem di tipo Dos-FAT e di applicare le correzioni ritenute necessarie. In generale, è opportuno che il filesystem da controllare non sia montato. *2*

Per conoscere maggiori dettagli conviene consultare dosfsck(8).

Alcune opzioni

-a

Esegue automaticamente la riparazione del filesystem. Se esiste più di una possibilità per eseguire una correzione, viene scelta la meno distruttiva.

-r

Esegue la riparazione del filesystem in modo interattivo, richiedendo all'utente la scelta sul tipo di correzione da attuare quando esiste più di una scelta.

-t

Marca i cluster illeggibili come difettosi.

Valore di uscita

48.2.3 # fsck

fsck [<opzioni>] [-t <tipo-di-fs>] [<opzioni-specifiche>] <dispositivo>...

fsck è un programma che uniforma l'utilizzo dei programmi specifici per il controllo e la correzione dei vari tipi di filesystem. Si tratta di un programma frontale.

L'opzione -t serve per specificare il tipo di filesystem da analizzare, in questo modo fsck sa a quale programma deve rivolgersi. Le opzioni specifiche dipendono dal tipo di filesystem, ovvero dal programma che si prenderà cura effettivamente dell'operazione.

Vedere fsck(8).

48.3 Attivazione dei filesystem

Per poter accedere ai dati di una qualunque unità di memorizzazione organizzata con un filesystem, è necessario prima montare il suo filesystem in quello globale.

Prima di estrarre una di queste unità, o comunque, prima di poter spegnere un elaboratore, occorre eseguire l'operazione opposta di distacco. Occorre cioè smontarla (unmount).

In un sistema GNU/Linux devono essere necessariamente collegati il filesystem principale (root), e il filesystem virtuale /proc/ che però non fa capo ad alcuna unità fisica.

Se si utilizzano partizioni di scambio per la gestione della memoria virtuale, queste devono essere collegate con un'operazione concettualmente simile al montaggio, anche se poi non appaiono nella struttura generale del filesystem globale.

48.3.1 Tipi di filesystem

Quando si monta un filesystem è necessario che il modo con cui questo è organizzato (cioè il tipo) sia riconoscibile e gestito dal kernel. Nella tabella 48.2, sono elencati i nomi che identificano i tipi di filesystem riconoscibili da un kernel Linux.

Tipo di filesystem Descrizione
minix Minix
ext2 Second-extended
hpfs
umsdos GNU/Linux su Dos-FAT
msdos Dos-FAT (nomi 8.3)
vfat Dos-VFAT (nomi lunghi)
nfs NFS o filesystem di rete
iso9660 CD-ROM
smbfs SMB (rete NetBIOS-TCP/IP)
ncpfs
affs
ufs
sysv
proc filesystem virtuale /proc
swap partizione di scambio

Tabella 48.2: Elenco dei nomi di filesystem utilizzabili.

48.3.2 Implicazioni legate al mount

Il montaggio implica l'inserzione di un filesystem estraneo in quello generale. Questo fatto può far sorgere problemi di sicurezza e di compatibilità con il sistema. L'elenco seguente dovrebbe dare l'idea di alcuni dei problemi connessi con il montaggio.

48.3.3 Opzioni

In occasione del montaggio di un filesystem si possono definire alcune opzioni allo scopo di modificarne il comportamento predefinito. Quello che segue è un elenco parziale delle opzioni disponibili. Inizialmente vengono mostrate le opzioni che riguardano generalmente i filesystem compatibili con i sistemi operativi Unix, e possono essere utilizzate anche in presenza di filesystem differenti quando ciò può avere significato.

Vedere mount(8) e nfs(5).

Opzioni valide per i filesystem Unix

remount

Si tratta di un'opzione speciale che può essere usata solo quando il filesystem in questione è già montato, allo scopo di rimontarlo con delle opzioni differenti (quelle che vengono definite assieme a remount).

default

Utilizza le impostazioni predefinite: rw, suid, dev, exec, auto, atime, nouser, async.

sync | async

Esegue gli I/O sui filesystem in modo sincrono o asincrono. La modalità sincrona è più sicura, ma il suo utilizzo rallenta e appesantisce l'attività del disco.

atime | noatime

Aggiorna o meno la data di accesso ai file. Può essere utile eliminare questo tipo di aggiornamento per ridurre l'attività del disco.

auto | noauto

Permette o impedisce il montaggio automatico quando si utilizza il file /etc/fstab.

dev | nodev

Considera o esclude che si tratti di dispositivi a blocchi o a caratteri.

exec | noexec

Permette o impedisce l'esecuzione di file binari.

suid | nosuid

Consente o impedisce che i bit SUID (Set User ID) e SGID (Set Group ID) abbiano effetto. Disattivando questa possibilità (cioè utilizzando l'opzione nosuid), si vuole evitare che gli eseguibili contenuti nel filesystem che si intende montare, possano ottenere privilegi particolari.

user | nouser

Permette o impedisce all'utente comune di montare e smontare il filesystem. L'opzione user implica l'attivazione automatica di noexec, nosuid e nodev, a meno che queste siano annullate da successive indicazioni contrarie come nella lista seguente: user,exec,suid,dev.

ro

Sola lettura.

rw

Lettura e scrittura.

Opzioni valide per i filesystem FAT

Si tratta di ciò che è alla base dei filesystem umsdos, msdos e vfat. Tuttavia, occorre ricordare che un filesystem UMSDOS emula un filesystem Unix, quindi non sono valide le opzioni seguenti nel caso specifico di questo tipo di filesystem.

uid=<ID-utente>

Permette di stabilire il proprietario dei file e delle directory contenute nel filesystem. Se non viene specificato, si intende appartengano all'utente che esegue il montaggio.

gid=<ID-gruppo>

Permette di stabilire il gruppo proprietario dei file e delle directory contenute nel filesystem. Se non viene specificato, si intende appartengano al gruppo dell'utente che esegue il montaggio.

umask=<maschera>

Permette di stabilire quali permessi inibire nel filesystem. Si tratta del solito numero ottale, composto da tre cifre numeriche, dove la prima cifra rappresenta i permessi per il proprietario, la seconda per il gruppo, la terza per il resto degli utenti:

Di conseguenza,

Bisogna fare attenzione però che il valore che si inserisce rappresenta un impedimento all'uso di quel permesso, di conseguenza, la maschera 022 indica che è consentito al proprietario qualunque tipo di accesso (lettura, scrittura ed esecuzione), mentre agli altri utenti non è consentito l'accesso in scrittura.

Se non viene definito si utilizza il valore predefinito per la creazione dei file nei filesystem normali: umask appunto.

quiet

I filesystem FAT non sono in grado di memorizzare informazioni sulle proprietà e i permessi dei file. Di conseguenza, i programmi che tentano di modificare i valori predefiniti, ottengono una segnalazione di errore dalle funzioni di sistema. Questa opzione inibisce queste segnalazioni di errore.

Il dispositivo di loopback

Un caso particolare di opzione è loop che consente di accedere a file-immagine di dischi o partizioni. Questa particolarità viene descritta più avanti in questo capitolo.

48.3.4 # mount

mount [<opzioni>] [<dispositivo>] [<directory>]

mount permettere di montare un filesystem all'interno del sistema. Il programma opposto è umount e serve per smontare un filesystem montato precedentemente. La forma normale e più semplice di utilizzo di mount è la seguente:

mount -t <tipo-di-filesystem> <dispositivo> <punto-di-innesto>

In questo modo si richiede al kernel di montare il filesystem del dispositivo specificato nella directory indicata (punto di innesto).

Per conoscere la situazione dei dispositivi collegati attraverso questo sistema, si può usare la sintassi seguente:

mount [ -t <tipo-di-filesystem>]

Se viene specificato il tipo di filesystem, si ottiene un elenco limitato a quei dispositivi.

Il filesystem /proc/ non è associato ad alcun dispositivo speciale, e quando se ne vuole eseguire il montaggio, si può utilizzare un nome di dispositivo arbitrario, per esempio proc.

La maggior parte delle unità di memorizzazione sono indicate nel modo consueto utilizzando nomi di file di dispositivo (/dev/...), ma ci possono essere altre possibilità, come quando si vuole montare un filesystem di rete o NFS, dove si usa la forma <host>:/<directory>.

Il file /etc/fstab viene utilizzato per automatizzare il collegamento dei filesystem più importanti al momento dell'avvio del sistema. Questo viene letto utilizzando la forma seguente:

mount -a [ -t <tipo-di-filesystem>]

Di solito si trova una chiamata di questo tipo all'interno di uno degli script che compongono la procedura di inizializzazione del sistema (/etc/rc.d/rc*). La presenza del file di configurazione /etc/fstab è utile anche per semplificare il montaggio (e poi anche l'operazione inversa) di un filesystem che sia stato previsto al suo interno. Diventa sufficiente una delle due forme seguenti.

mount <dispositivo>

mount <punto-di-innesto>

In linea di principio, solo l'utente root può montare un filesystem. Per permettere agli utenti comuni di montare e smontare un'unità di memorizzazione (come nel caso di un CD-ROM o di un dischetto), la si può indicare nel file /etc/fstab con l'opzione user. Nell'esempio seguente, si vede un record di /etc/fstab attraverso il quale si definisce il montaggio facoltativo di un CD-ROM in sola lettura con la possibilità anche per gli utenti di eseguire l'operazione.

/dev/cdrom  /cdrom  iso9660  ro,user,noauto,unhide

In tal modo, qualunque utente potrà eseguire uno dei due possibili comandi seguenti.

mount /dev/cdrom

mount /cdrom

La coppia di programmi mount e umount mantiene una lista dei filesystem correntemente montati. Quando mount viene avviato senza argomenti si ottiene l'emissione del contenuto di questa lista.

Vedere mount(8).

Alcune opzioni

-a

Utilizza /etc/fstab per eseguire automaticamente l'operazione: Vengono montati tutti i filesystem a esclusione di quelli segnati come noauto.

-t [no]<tipo-di-filesystem>[,...]

Specifica il tipo di filesystem. Sono riconosciuti i nomi indicati nella tabella 48.2. Se il nome del tipo di filesystem viene preceduto dalla sigla no, si intende che quel tipo deve essere escluso. Se si vogliono indicare più tipi di filesystem questi vengono separati da virgole.

Quando si usa questa opzione con l'indicazione di più tipi, o con il prefisso no, lo si fa quasi sempre con l'uso dell'opzione -a, come nell'esempio seguente:

mount -a -t nomsdos,nonfs

In questo caso si intende eseguire il montaggio di tutti i filesystem indicati all'interno di /etc/fstab, a esclusione dei tipi msdos e nfs.

-o <opzione-di-filesystem>[,...]

Questa opzione permette di specificare uno o più nomi di opzioni, separati da virgole, legati alla gestione del filesystem. L'elenco di questi nomi si trova nella sezione 48.3.3.

Esempi

mount -t ext2 /dev/hda2 /mnt

Monta il filesystem di tipo Second-extended contenuto nella seconda partizione del primo disco fisso IDE, a partire dalla directory /mnt.

mount -t vfat /dev/fd0 /floppy

Monta il filesystem di tipo Dos-VFAT (Dos-FAT con le estensioni per i nomi lunghi) contenuto in un dischetto inserito nella prima unità, a partire dalla directory /floppy/.

mount -t nfs roggen.brot.dg:/pubblica /roggen

Monta il filesystem di rete offerto dall'elaboratore roggen.brot.dg, corrispondente alla sua directory /pubblica/ (e discendenti), nella directory locale /roggen/.

48.3.5 # umount

umount [<opzioni>] [<dispositivo>] [<directory>]

umount esegue l'operazione inversa di mount: smonta i filesystem. L'operazione può avvenire solo quando non ci sono più attività in corso su quei filesystem, altrimenti l'operazione fallisce.

Alcune opzioni

-a

Vengono smontati tutti i filesystem indicati in /etc/fstab.

-t [no]<tipo-di-filesystem>[,...]

Indica che l'azione deve essere eseguita solo sui filesystem specificati. Se si usa il prefisso no, l'azione si deve compiere su tutti i filesystem a esclusione di quelli indicati.

Esempi

umount /dev/hda2

Smonta il filesystem montato precedentemente, riferito al dispositivo /dev/hda2.

umount /mnt

Smonta il filesystem montato precedentemente nella directory /mnt.

umount -a

Smonta tutti i filesystem che trova annotati nel file /etc/mtab, escluso il filesystem proc. *3*

48.3.6 /etc/fstab

Il file /etc/fstab viene utilizzato per definire le caratteristiche e le directory di collegamento (punti di innesto) dei vari filesystem, usati di frequente nel sistema. Si tratta di un file che viene solo letto dai programmi, e il suo aggiornamento viene fatto in modo manuale dall'amministratore del sistema.

Il file è organizzato in record (corrispondenti alle righe) divisi in campi separati da uno o più spazi (inclusi i caratteri di tabulazione). Le righe che iniziano con il simbolo #, le righe vuote e quelle bianche sono ignorate e trattate eventualmente come commenti.

  1. Il primo campo definisce il tipo di dispositivo o il filesystem remoto da montare.

  2. Il secondo campo definisce la directory che funge da punto di innesto per il filesystem.

  3. Il terzo campo definisce il tipo di filesystem e ne viene indicato il nome in base alla tabella 48.2.

    Se in questo campo viene indicato il termine ignore, si intende fare riferimento a una partizione presente, ma inutilizzata, e per la quale non si vuole effettuare alcun collegamento. Di fatto, i record che contengono questa indicazione vengono ignorati.

  4. Il quarto campo descrive le opzioni speciali per il tipo di montaggio che si intende eseguire. Si tratta delle stesse opzioni speciali descritte in mount(8) e anche nella sezione 48.3.4 in occasione della spiegazione dell'uso dell'opzione -o (a esclusione dell'opzione remount).

  5. Il quinto campo viene utilizzato per determinare quali filesystem possono essere utilizzati per il dump. *4*

  6. Il sesto campo viene utilizzato dal programma fsck per determinare l'ordine in cui il controllo dell'integrità dei filesystem deve essere effettuato nel momento dell'avvio del sistema.

    Il filesystem principale dovrebbe avere il numero 1 in questo campo, mentre gli altri, il numero 2. Se questo campo contiene il valore 0, significa che il filesystem in questione non deve essere controllato.

Esempi

Nell'esempio seguente, tutte le unità che non sono unite stabilmente al corpo fisico dell'elaboratore, hanno l'opzione noauto che impedisce il montaggio automatico all'avvio del sistema. Queste possono essere attivate solo manualmente, attraverso mount, con il vantaggio di potere indicare semplicemente la directory di collegamento (punto di innesto) o il nome del dispositivo.

# nome               Innesto      Tipo     Opzioni            Dmp Chk

/dev/hda3            /            ext2     defaults           1   1
proc                 /proc        proc     defaults           0   0 
/dev/hda2            none         swap     sw
/dev/hda1            /mnt/dosc    vfat     quiet,umask=000    0   0
/dev/sda             /mnt/dosd    vfat     user,noauto,quiet  0   0
/dev/sda1            /mnt/scsimo  ext2     user,noauto        0   0
/dev/cdrom           /mnt/cdrom   iso9660  ro,user,noauto     0   0
roggen.brot.dg:/     /mnt/roggen  nfs      ro,user,noauto     0   0
/dev/fd0             /mnt/dosa    vfat     user,noauto,quiet  0   0

48.3.7 /etc/mtab

Il file /etc/mtab ha la stessa struttura di /etc/fstab, ma viene gestito automaticamente da mount e umount, e rappresenta i filesystem connessi nella struttura generale. Non deve essere modificato e dovrebbe essere creato automaticamente all'avvio del sistema.

48.3.8 $ df

df [<opzioni>] [<dispositivo>...]

df permette di conoscere lo spazio a disposizione di una o di tutte le partizioni che risultano montate. Se non vengono indicati i nomi dei dispositivi, si ottiene l'elenco completo di tutti i dispositivi attivi, altrimenti l'elenco si riduce a quelli specificati.

L'unità di misura con cui si esprime questo spazio è in blocchi la cui dimensione cambia a seconda delle opzioni utilizzate oppure dalla presenza di una variabile di ambiente: POSIXLY_CORRECT. La presenza di questa fa sì che, se non viene usata l'opzione -k, i blocchi siano di 512 byte come prevede lo standard POSIX. Diversamente, il valore predefinito dei blocchi è di 1024 byte.

Alcune opzioni

-a | --all

Emette le informazioni relative a tutti i dispositivi attivi, anche di quelli che normalmente vengono ignorati.

-h | --human-readable

Aggiunge una lettera alla dimensione, in modo da chiarire il tipo di unità di misura utilizzato.

-i | --inodes

Emette il risultato indicando l'utilizzo e la disponibilità di inode, invece che fare riferimento ai blocchi. Questa informazione è utile solo per il filesystem che utilizzano una struttura a inode.

-b | --byte

Emette le dimensioni in byte e non in Kbyte.

-k | --kilobytes

Emette le dimensioni in Kbyte. Questa opzione fa riferimento all'unità di misura predefinita, ma permette di fare ignorare a df l'eventuale presenza della variabile POSIXLY_CORRECT.

-m | --megabytes

Emette le dimensioni in Mbyte.

48.4 Quota

Generalmente, l'utilizzo dello spazio nel filesystem non è controllato, per cui gli utenti possono utilizzare teoricamente quanto spazio vogliono in modo indiscriminato. Per controllare l'utilizzo dello spazio nel filesystem si può attivare la gestione delle quote, cioè un sistema di registrazione dello spazio utilizzato in base all'appartenenza dei file a un utente o a un gruppo particolare. La gestione delle quote non si limita a questo: può impedire di fatto la creazione di file che superano lo spazio consentito.

Il controllo avviene a livello di partizione, per cui occorre stabilire per ognuna di queste quote di spazio utilizzabili. Generalmente, il problema di controllare le quote riguarda un numero ristretto di partizioni, precisamente quelle in cui gli utenti hanno la possibilità di accedere in scrittura.

Per il momento, il kernel Linux può gestire esclusivamente le quote di utilizzo delle partizioni di tipo Second-extended, cioè il suo tipo nativo.

48.4.1 Quota utente e quota di gruppo

Il controllo della quota può avvenire a livello di: singolo utente, di gruppo o di entrambi. In pratica, un file può essere aggiunto se la quota utente riferita all'UID del file lo consente, e nello stesso modo se la quota di gruppo riferita al GID del file non viene superata.

Il tracciamento e il controllo dei livelli di quota utente e di gruppo possono essere attivati indipendentemente l'uno dall'altro. In queste sezioni verrà mostrato come attivare entrambi i tipi di quota.

48.4.2 Kernel

GNU/Linux gestisce le quote attraverso il kernel, attivandole e controllandole attraverso una serie di programmi di utilità specifici. Pertanto è necessario che il kernel sia stato compilato attivando l'opzione della gestione delle quote.

48.4.3 Configurazione con /etc/fstab

La gestione delle quote delle partizioni deve essere attivata espressamente nel momento del montaggio. Per questo si preferisce intervenire nella configurazione contenuta nel file /etc/fstab, in modo da facilitare la cosa. Nella colonna delle opzioni si possono aggiungere due parole chiave: usrquota e grpquota. La prima serve per attivare il controllo delle quote riferite agli utenti e la seconda per il controllo riferito ai gruppi. Le due cose sono indipendenti.

L'esempio seguente mostra in che modo attivare entrambi i controlli nella partizione /dev/hda3.

# nome               Innesto      Tipo     Opzioni                      Dmp Chk

/dev/hda3            /            ext2     defaults,usrquota,grpquota    1   1
proc                 /proc        proc     defaults                      0   0 
/dev/hda2            none         swap     sw
/dev/cdrom           /mnt/cdrom   iso9660  ro,user,noauto                0   0

48.4.4 Registrazione delle quote

I livelli di quota dei vari utenti e dei gruppi sono contenuti in due file: quota.user e quota.group. Questi devono essere collocati nella directory principale della partizione da controllare, e richiedono solo i permessi in lettura e scrittura per l'utente root. Per fare in modo che tutto funzioni correttamente, è necessario creare tali file, lasciandoli vuoti inizialmente.

L'esempio seguente mostra il caso in cui si voglia controllare la partizione principale, ovvero quella che contiene l'origine del filesystem complessivo.

touch /quota.user

touch /quota.group

chmod 0600 /quota.user

chmod 0600 /quota.group

48.4.5 Attivazione del controllo

Prima che il sistema di controllo delle quote possa funzionare, occorre effettuare una scansione della partizione interessata, in modo da raccogliere tutte le informazioni necessarie sull'utilizzo dello spazio dal punto di vista degli utenti e dei gruppi. Queste informazioni sono poi contenute nei file quota.user e quota.group, già visti in precedenza.

La scansione si esegue con il programma quotacheck, e per sicurezza andrebbe ripetuta la sua esecuzione ogni volta che si avvia il sistema, oppure giornalmente, quando il sistema resta in funzione a lungo (per più giorni). Si può usare il comando seguente:

quotacheck -a -v -u -g

In questo modo si ottiene la scansione di tutte le partizioni che sono state indicate nel file /etc/fstab come soggette a controllo delle quote. Le opzioni -u e -g richiedono espressamente che la scansione si prenda cura sia dell'utilizzo in base all'utente, sia in base al gruppo.

Ogni volta che si monta una partizione che è soggetta a controllo delle quote, è poi necessario attivare il controllo attraverso il programma quotaon. Per esempio, quotaon /dev/hda3 attiva il controllo sulla partizione indicata. Tuttavia, generalmente si fa questo all'avvio del sistema, per attivare il controllo su tutte le partizioni specificate per questo nel solito file /etc/fstab. In pratica con il comando seguente:

quotaon -a -v -u -g

Anche in questo caso, le opzioni -u e -g indicano che si vuole espressamente il controllo dell'utilizzo in base all'utente e in base al gruppo.

A questo punto, conviene preoccuparsi di fare in modo che la procedura di inizializzazione del sistema sia in grado ogni volta di avviare la gestione delle quote. Se la propria distribuzione GNU/Linux non fornisce degli script già pronti, si possono aggiungere al file /etc/rc.d/rc.local (o simile) le istruzioni necessarie, come nell'esempio seguente:

#...

if /sbin/quotacheck -avug
then
    echo "Scansione delle quote eseguita."
fi

if /sbin/quotaon -avug
then
    echo "Attivazione del controllo delle quote eseguita."
fi

La prima volta che si predispone la gestione delle quote, se c'è anche la partizione principale tra quelle da controllare, l'unico modo per fare sì che il controllo delle quote sia operativo, è quello di riavviare il sistema.

48.4.6 # quotacheck

quotacheck [<opzioni>] [{<partizione>|<punto-di-innesto>}...]

quotacheck esegue una scansione di una o più partizioni, allo scopo di aggiornare i file di registrazione delle quote: quota.user e quota.group. È opportuno usare questo programma ogni volta che si avvia il sistema, e quando si montano delle partizioni soggette al controllo delle quote di utilizzo.

Alcune opzioni

-u

Questa opzione richiede una scansione per le quote di utilizzo riferite agli utenti. Questa è l'azione predefinita.

-g

Richiede una scansione per le quote di utilizzo riferite ai gruppi.

-a

Scandisce tutte le partizioni indicate nel file /etc/fstab come soggette a tale controllo.

-R

Questa opzione viene usata in congiunzione con -a e specifica di eseguire il controllo di tutte le partizioni indicate nel file /etc/fstab, a esclusione di quella principale.

Esempi

quotacheck /dev/hdb2

Esegue la scansione dell'utilizzo degli utenti della partizione /dev/hdb2, che deve essere già stata montata e deve risultare dal contenuto del file /etc/fstab. In questo caso, può funzionare solo se in questo file è stata specificata l'opzione di montaggio usrquota.

quotacheck /mnt/disco2

Esegue la scansione dell'utilizzo degli utenti della partizione che, da quanto si determina dal file /etc/fstab, si colloca a partire dalla directory /mnt/disco2. Per tutte le altre considerazioni, vale quanto detto per l'esempio precedente.

quotacheck -avug

Questo corrisponde all'utilizzo normale del programma, per scandire tutte le partizioni montate e registrate nel file /etc/fstab come soggette al controllo delle quote, sia degli utenti che dei gruppi.

48.4.7 # quotaon

quotaon [<opzioni>] [{<partizione>|<punto-di-innesto>}...]

quotaon attiva la gestione delle quote da parte del kernel. Non si tratta quindi di un demone, ma di un semplice programma che termina subito di funzionare.

Perché si possa attivare questa gestione, è necessario che i file quota.user e quota.group siano presenti nella directory principale delle partizioni per le quali si vuole la gestione delle quote.

Alcune opzioni

-u

Attiva la gestione delle quote utente. Questa è l'azione predefinita.

-g

Attiva la gestione delle quote dei gruppi.

-a

Attiva la gestione delle quote in base a quanto indicato nel file /etc/fstab.

Esempi

quotaon /dev/hdb2

Attiva la gestione delle quote utente nella partizione /dev/hdb2, che deve essere già stata montata e deve risultare dal contenuto del file /etc/fstab. In questo caso, può funzionare solo se in questo file è stata specificata l'opzione di montaggio usrquota.

quotaon /mnt/disco2

Attiva la gestione delle quote utente nella partizione che, da quanto si determina dal file /etc/fstab, si colloca a partire dalla directory /mnt/disco2. Per tutte le altre considerazioni, vale quanto detto per l'esempio precedente.

quotaon -avug

Questo corrisponde all'utilizzo normale del programma, per attivare la gestione delle quote in tutte le partizioni montate e registrate nel file /etc/fstab come soggette al controllo delle quote, sia degli utenti che dei gruppi.

48.4.8 # quotaoff

quotaoff [<opzioni>] [{<partizione>|<punto-di-innesto>}...]

quotaoff disattiva la gestione delle quote da parte del kernel. Le opzioni e la sintassi sono le stesse di quotaon.

48.4.9 Assegnazione e verifica delle quote

Le quote che si possono assegnare agli utenti e ai gruppi sono composte dell'indicazione di diversi dati. Lo spazio concesso viene espresso attraverso il numero di blocchi (unità di 1024 byte) e viene definito limite soft perché viene tollerato un leggero sconfinamento per tempi brevi. A fianco del limite soft si può stabilire un limite di sicurezza, o limite hard, che non può essere superato in alcun caso. Oltre ai limiti sui blocchi di byte, si stabiliscono normalmente dei limiti di utilizzo di inode, in pratica, il numero massimo di file. Dal momento che si ha a che fare con filesystem Second-extended che normalmente possono avere un inode ogni 4 Kbyte, si può stabilire facilmente una calcolo di corrispondenza tra blocchi di dati e quantità di inode.

Quando viene fissato il limite hard, soprattutto quando questo è superiore a quello soft, si intende consentire implicitamente lo sconfinamento del limite di utilizzo. In tal caso è necessario stabilire il tempo massimo per cui ciò è concesso. Generalmente, se non viene definito diversamente, si tratta di una settimana.

Le quote vengono assegnate o modificate attraverso il programma edquota; la verifica dei livelli può essere fatta dall'utente root con repquota, e ogni utente può controllare ciò che lo riguarda attraverso il comando quota. Con edquota si modificano le quote attraverso un programma per la gestione di file di testo; in pratica viene creato un file temporaneo e il suo contenuto viene quindi interpretato per modificare le quote. L'esempio seguente mostra il caso dell'utente tizio cui è concessa una quota di 10 Mbyte, con una tolleranza del 10% (11 Mbyte il limite hard).

edquota -u tizio[Invio]

Quotas for user tizio:
/dev/hda3: blocks in use: 4567, limits (soft = 10240, hard = 11264)
        inodes in use: 234, limits (soft = 2560, hard = 2816)

La modifica delle quote dei gruppi avviene nello stesso modo. A fianco di questi livelli di spazio utilizzabili, c'è il problema di fissare il tempo massimo di sconfinamento, che può essere deciso solo a livello globale della partizione.

edquota -t[Invio]

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda3: block grace period: 7 days, file grace period: 7 days

L'esempio dovrebbe essere autoesplicativo. Il cosiddetto grace period è il periodo massimo per cui è concesso lo sconfinamento dal limite soft. Il primo dei due valori si riferisce ai blocchi di spazio (un blocco è pari a 1024 byte); il secondo al numero di file, ovvero di inode.

L'utente root può avere un quadro completo della situazione con repquota, che genera una tabella delle varie quote. La colonna grace serve per annotare eventuali sconfinamenti, e riporta il tempo consentito rimanente.

repquota -u -a[Invio]

                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
...
tizio     +-   10500   10240   11264  6days    1123  2560  2816       
caio      --       1       0       0              1     0     0       

Nell'esempio appare solo una parte del listato che si ottiene generalmente. Viene mostrato il caso di due utenti: caio non ha alcuna limitazione di utilizzo, e le sue quote sono azzerate per questo; tizio invece ha superato un po' il valore della quota soft per l'utilizzo di blocchi. Per questo, nella colonna grace appare quanto tempo gli resta per provvedere da solo (dopo provvederà il sistema).

Infine, il singolo utente può verificare la propria situazione con il programma quota.

tizio@:~$ quota[Invio]

Disk quotas for user tizio (uid 502):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/hda4   10500*  10240   11264   6days    1123    2560    2816

Anche in questo caso, si può osservare che l'utente ha superato il limite di spazio concesso, pur senza superare il limite massimo di inode concessi.

48.4.10 # edquota

edquota [<opzioni>] [<utente>...]

edquota è il programma che permette di assegnare e modificare i livelli di quote agli utenti. Per farlo, si avvale di un programma per la creazione e modifica dei testi, precisamente si tratta di VI o di quanto specificato nella variabile di ambiente EDITOR. La modifica delle quote può avvenire solo dopo che sono stati predisposti i file quota.user e quota.group.

Alcune opzioni

-u

Modifica le quote utente. È l'azione predefinita se non vengono specificate altre opzioni.

-g

Modifica le quote dei gruppi.

-p <utente-prototipo>

Duplica le quote dell'utente specificato come argomento dell'opzione su tutti gli utenti indicati nella parte finale della riga di comando.

-t

Permette di modificare il tempo massimo di sconfinamento del limite soft, fermo restando il limite hard che non può essere superato in ogni caso.

Esempi

edquota -u tizio

Modifica i livelli di quota dell'utente tizio.

edquota -g utenti

Modifica i livelli di quota del gruppo utenti.

edquota -u -p tizio caio semproni

Attribuisce agli utenti caio e semproni gli stessi livelli di quota di tizio.

48.4.11 # repquota

repquota [<opzioni>] [{<partizione>|<punto-di-innesto>}...]

repquota emette una tabella riepilogativa dell'utilizzo delle quote delle partizioni specificate.

Alcune opzioni

-u

Elenca la situazione delle quote riferite agli utenti. È l'azione predefinita se non vengono specificate altre opzioni.

-g

Elenca la situazione delle quote riferite ai gruppi.

-a

Elenca le quote di tutte le partizioni per cui ciò è previsto attraverso le indicazioni del file /etc/fstab.

Esempi

repquota -a

Elenca la situazione delle quote riferite agli utenti (predefinito) per tutte le partizioni in cui ciò è stato attivato, in base alle indicazioni del file /etc/fstab.

repquota -g -a

Elenca la situazione delle quote riferite ai gruppi per tutte le partizioni in cui ciò è stato attivato, in base alle indicazioni del file /etc/fstab.

repquota /dev/hda3

Elenca la situazione delle quote riferite agli utenti (predefinito) per la partizione /dev/hda3 (in uso).

48.4.12 $ quota

quota [<opzioni>]

quota è il programma che permette agli utenti di controllare il proprio livello di quota. Effettua l'analisi su tutte le partizioni annotate per questo nel file /etc/fstab. Solo all'utente root è concesso di utilizzare questo programma per controllare la quota di un altro utente. quota restituisce un valore diverso da zero se almeno uno dei valori restituiti rappresenta uno sconfinamento dalla quota.

Alcune opzioni

-u [<utente>]

Restituisce le quote riferite all'utente. È l'azione predefinita se non vengono specificate altre opzioni. Solo l'utente root può utilizzare l'argomento aggiuntivo per controllare i livelli di un utente particolare.

-g [<gruppo>]

Restituisce le quote riferite al gruppo. L'utente può interrogare le quote riferite a gruppi a cui appartiene.

Esempi

quota

L'utente visualizza i propri livelli di quota.

quota -g lavoro1

L'utente visualizza i propri livelli di quota per il gruppo lavoro1 a cui appartiene.

quota -u tizio

L'utente root visualizza i livelli di quota per l'utente tizio.

48.5 Memoria cache

La memoria cache dei dischi serve a ridurre l'attività di questi, effettuando le modifiche a intervalli regolari o quando diventa indispensabile per altri motivi. L'esistenza di questo tipo di organizzazione, basato su una «memoria di transito», è il motivo principale per cui si deve arrestare l'attività del sistema prima di spegnere l'elaboratore.

La memoria cache viene gestita automaticamente dal kernel, ma è un demone quello che si occupa di richiedere lo scarico periodico.

48.5.1 # update (bdflush)

update [<opzioni>]

Con questo nome, update, viene avviato il demone che si occupa di richiedere periodicamente al kernel lo scarico della memoria cache. Deve essere messo in funzione durante la fase di avvio del sistema, prima di ogni altra attività di scrittura nei dischi.

Per avviare update si usano fondamentalmente due tecniche: l'utilizzo all'interno di uno script di quelli della procedura di inizializzazione del sistema, oppure l'inserimento di un record apposito all'interno di /etc/inittab.

Esempi

L'esempio seguente mostra una configurazione della procedura di inizializzazione del sistema con la quale update viene avviato attraverso lo script iniziale. Segue il record del file /etc/inittab dove si fa riferimento allo script /etc/rc.d/rc.sysinit,

si::sysinit:/etc/rd.d/rc.sysinit
...

e il pezzo significativo di quest'ultimo.

# Attivazione della memoria virtuale.
/sbin/swapon -a

# Attivazione di update.
/sbin/update

# Controllo della partizione del filesystem principale.
/sbin/fsck -A -a
...

L'esempio seguente mostra una configurazione della procedura di inizializzazione del sistema attraverso la quale update viene avviato direttamente attraverso /etc/inittab.

ud::once:/sbin/update
...

48.5.2 $ sync

sync [<opzioni>]

sync permette di scaricare nei dischi i dati contenuti nella memoria cache. Viene usato solitamente dalla procedura di arresto del sistema per garantire che tutti i dati siano registrati correttamente su disco prima dello spegnimento fisico dell'elaboratore.

Può essere utilizzato in caso di emergenza, quando per qualche ragione non si può attendere il completamento della procedura di arresto del sistema, o per qualunque altro motivo.

Di solito non si usano opzioni.

48.6 Immagini di dischi su file

Dal momento che i dischi esistono e sono utilizzati per uno scopo preciso, la possibilità di gestire file che riproducono un disco intero può sembrare paradossale o senza senso. In realtà, ciò è di grande utilità. In questi casi si parla di file-immagine, solo che il termine immagine viene usato in molte circostanze differenti e occorre evitare di lasciarsi confondere.

L'esempio più comune di file contenenti l'immagine di un disco sono quelli fatti per la creazione dei dischetti di avvio utilizzati per installare GNU/Linux la prima volta.

48.6.1 Gestione da parte del kernel

Per utilizzare i file-immagine di dischi, cioè per poterli montare come si fa con i dischi veri, occorre che il kernel sia in grado di gestire questa funzione. Deve essere stata attivata l'opzione Loopback device support ( 19.2.6).

48.6.2 Creazione di un file-immagine

Un file-immagine di un disco può essere creato a partire da un disco esistente oppure da zero, con l'inizializzazione di un file. Volendo creare l'immagine di un dischetto già esistente si procede semplicemente copiando il file di dispositivo corrispondente all'unità a dischetti nel file che si vuole creare.

cp /dev/fd0 floppy.img

L'esempio appena mostrato genera il file floppy.img nella directory corrente.

Diversamente si può partire da zero, creando un file e inizializzandolo. Il comando seguente crea il file pippo.img della stessa dimensione di un dischetto da 1440 Kbyte.

dd if=/dev/zero of=pippo.img bs=1k count=1440

Il comando successivo serve invece a inizializzarlo in modo da inserirvi un filesystem (viene utilizzato il formato standard: Ext2).

mke2fs pippo.img

pippo.img is not a block special device.
Proceed anyway? (y,n)

Trattandosi di una richiesta anomala, il programma mke2fs vuole una conferma. Basta inserire la lettera y per proseguire.

y[Invio]

Nello stesso modo si poteva creare un filesystem differente.

48.6.3 Accedere a un file-immagine

Per accedere a un file contenente l'immagine di un disco (con il suo filesystem), si procede come se si trattasse di un disco o di una partizione normale. In particolare, viene utilizzato mount con l'opzione -o loop.

L'immagine cui si accede può essere stata creata sia partendo da un file vuoto che viene inizializzato successivamente, sia dalla copia di un disco (o di una partizione) in un file.

mount -o loop -t ext2 pippo.img /mnt/floppy

Nell'esempio, l'immagine contenuta nel file pippo.img viene montata a partire dalla directory /mnt/floppy/, e si comporterà come se si trattasse di un dischetto normale.

48.6.4 trasferimento di un file-immagine in un disco

Se il file-immagine, all'interno del quale è stato fatto del lavoro, corrisponde esattamente a un disco o a una partizione, è possibile riprodurre questa immagine nel disco o nella partizione corrispondente. Per questo si può utilizzare cp oppure dd.

I due esempi seguenti riproducono nello stesso modo il file pippo.img in un dischetto.

cp pippo.img /dev/fd0

dd if=pippo.img of=/dev/fd0

Naturalmente, se l'immagine è stata montata in precedenza per poterne modificare il contenuto, occorre ricordarsi di smontarla prima di procedere alla riproduzione.

48.7 Dischi senza filesystem

GNU/Linux, come altri sistemi Unix, permette di gestire anche dischi che al loro interno non contengono un filesystem. Questo concetto potrebbe sembrare scontato per molti, ma tutti quelli che si avvicinano a GNU/Linux provenendo da sistemi in cui queste cose non si possono fare devono porre attenzione a questo particolare.

Un disco senza filesystem è semplicemente una serie di settori. In modo molto semplificato è come se si trattasse di un file. Quando si indicano i nomi di dispositivo legati ai dischi o alle partizioni si fa riferimento a questi nel loro insieme, come se si trattasse di file.

Quando si vuole utilizzare un disco o una partizione nel modo con cui si è abituati di solito, cioè per gestire i file al suo interno, la si deve montare e da quel momento non si fa più riferimento al nome del dispositivo.

A volte è importante utilizzare i dischi come supporti di dati senza filesystem. I casi più importanti sono:

48.8 Mount automatico

Le operazioni di montaggio e di smontaggio possono essere automatizzate, attraverso l'aiuto di un demone che provvede a montare i dispositivi quando si tenta di accedere a una directory che dovrebbe trovarsi al loro interno, e li smonta quando per un certo tempo questi risultano inutilizzati.

Il montaggio automatico non è solo una comodità in più che viene concessa agli utenti; la situazione in cui si avverte maggiormente il vantaggio di questo automatismo è nella gestione di filesystem condivisi in rete, attraverso il protocollo NFS, quando si vuole evitare di creare un collegamento stabile.

Ci possono essere diverse opportunità di gestire il montaggio automatico in un sistema Unix; per quanto riguarda GNU/Linux, il modo più conveniente dovrebbe essere la gestione prevista all'interno del kernel, che si avvale del demone contenuto nel pacchetto Autofs. L'utilizzo di questo pacchetto è ciò che viene descritto in queste sezioni.

48.8.1 Kernel

Avendo deciso di utilizzare il pacchetto Autofs, occorre che il kernel sia predisposto per la gestione del montaggio automatico, attraverso l'opzione seguente:

48.8.2 Organizzazione di Autofs

Come già accennato, il kernel da solo non basta. Viene utilizzato un demone, precisamente si tratta del programma automount, che per funzionare si avvale delle informazioni contenute in una mappa che gli viene indicata attraverso la riga di comando.

Più precisamente, viene definita una directory che rappresenta il punto di innesto automatico, a partire dalla quale verranno create automaticamente altre sottodirectory in base al contenuto della mappa che viene fornita a automount. Se si vogliono gestire più punti di innesto automatico, occorre avviare diverse copie del demone automount, e ognuna di queste potrebbe avere una mappa differente. Per cercare di fare capire la cosa in modo intuitivo, si cerchi si seguire l'esempio seguente:

Si supponga di avere predisposto il file /etc/auto.automnt con il contenuto seguente:

cdrom		-fstype=iso9660,ro	:/dev/cdrom
floppy		-fstype=auto		:/dev/fd0

Si supponga inoltre di voler usare la directory /automnt/ come punto di innesto automatico per la mappa definita nel file /etc/auto.automnt. Per attivare il demone automount in modo che legga il file /etc/auto.automnt e lo utilizzi per la directory /automnt/, occorre il comando seguente:

automount /automnt file /etc/auto.automnt

La prima direttiva del file /etc/auto.automnt indica che il CD-ROM corrispondente al dispositivo /dev/cdrom viene montato automaticamente a partire da /automnt/cdrom/, e che il dischetto corrispondente al dispositivo /dev/fd0 viene montato a partire da /automnt/floppy/. Queste due directory non devono essere create; è automount che provvede nell'istante in cui si cerca di attraversarle. In pratica, se non si conosce l'organizzazione del sistema di montaggio automatico, non si può sapere quali siano i percorsi disponibili e le unità che possono essere montate automaticamente.

Se per qualche motivo si vogliono gestire diversi punti di innesto automatico, occorre definire le mappe corrispondenti (di solito si tratta di definire altri file simili a /etc/auto.automnt), e quindi occorre avviare altrettante copie di automount. Comunque, di solito, ci si limita a gestire un unico punto di innesto automatico.

Per semplificare le cose, oppure, a seconda dei punti di vista, per complicarle ulteriormente, Autofs viene distribuito quasi sempre assieme a uno script che dovrebbe essere inserito nella procedura di inizializzazione del sistema: /etc/rc.d/init.d/autofs, o altro percorso simile. Questo file ha lo scopo di avviare e fermare il servizio, e per questo viene usato con l'aggiunta di un argomento espresso da una parola chiave: start, stop,... Ma il compito previsto per questo script è più complesso del solito, e non funziona sempre come ci si aspetta. In generale, dovrebbe leggere il file di configurazione /etc/auto.master, dal quale ottenere le informazioni necessarie per sapere quali punti di innesto automatico e quali file di mappa utilizzare. In pratica, è probabile che riesca a leggere solo la prima direttiva del file /etc/auto.master.

Una volta compreso il funzionamento di automount, sta all'amministratore di sistema stabilire se sia meglio affidarsi allo script o avviare direttamente il demone ignorando il file di configurazione /etc/auto.master.

48.8.3 Mappe per il mount automatico

Il demone automount richiede l'indicazione di una mappa ogni volta che viene avviato. Questa mappa serve a descrivere le caratteristiche dei dischi, delle partizioni o dei filesystem di rete da montare, e le sottodirectory relative, utilizzate come punti di innesto.

La mappa in questione può avere varie forme, anche se nelle situazioni più comuni è rappresentata semplicemente da un file. Nel caso si tratti di file, questo può contenere dei commenti preceduti dal simbolo # e conclusi dalla fine della riga, può contenere righe vuote o bianche che vengono ignorate ugualmente; le altre righe vengono interpretate come direttive, rappresentate da record contenenti tre campi.

<sottodirectory-di-mount> -<opzioni> {<partizione>|<filesystem-di-rete>}

  1. Il primo campo rappresenta la sottodirectory, riferita al punto di innesto automatico, che viene creata automaticamente nel momento in cui viene fatto il montaggio da parte del demone. Questa sottodirectory rappresenta poi l'inizio della partizione o del filesystem di rete che viene a essere montato.

  2. Il secondo campo è preceduto da un trattino (-), e serve a indicare un elenco separato da virgole delle opzioni per il montaggio della partizione o del filesystem di rete. Queste opzioni sono le stesse che possono essere usate con il programma mount, o che possono essere indicate nella quarta colonna del file /etc/fstab. In particolare, il tipo di filesystem viene indicato con l'aggiunta del prefisso fstype=.

  3. Il terzo campo serve a definire il dispositivo del disco o della partizione da montare, oppure il nodo e la directory del filesystem di rete. Per questo si usa una sintassi particolare:

    :<dispositivo>
    

    <nome-host>:<directory-condivisa>
    

    In pratica, quando il terzo campo inizia con due punti verticali (:), si intende trattarsi di un dispositivo locale.

Esempi

cdrom		-fstype=iso9660,ro	:/dev/cdrom

Prevede la possibilità di montare automaticamente il dispositivo /dev/cdrom nella sottodirectory cdrom/, in sola lettura.

a		-fstype=vfat		:/dev/fd0

Prevede la possibilità di montare automaticamente il dispositivo /dev/fd0 nella sottodirectory a/, aspettando di trovare al suo interno un filesystem Dos-VFAT.

dinkel		-ro,soft,intr		dinkel.brot.dg:/pub/dati

Prevede la possibilità di montare automaticamente il filesystem di rete offerto dal nodo dinkel.brot.dg, a partire dalla sua directory /pub/dati/. In particolare, il montaggio viene fatto in sola lettura, e vengono usate anche le opzioni soft e intr.

48.8.4 # automount

automount [<opzioni>] <punto-di-innesto-automatico> <tipo-di-mappa> <mappa> [<opzioni-di-mappa>]

automount è il demone che si occupa di seguire l'utilizzo del filesystem allo scopo di automatizzare il montaggio di dispositivi e di filesystem di rete. La sua sintassi è piuttosto complessa, e per questo viene avviato solitamente attraverso lo script autofs che a sua volta dovrebbe preoccuparsi di interpretare anche il file di configurazione /etc/auto.master.

automount è in grado di leggere la mappa dei montaggi da diverse fonti, anche se di solito questa è contenuta in un file.

Se automount riceve il segnale SIGUSR1, smonta immediatamente tutti i filesystem inutilizzati, che non siano impegnati in alcun modo.

Alcune opzioni

-p <file> | --pid-file <file>

Permette di specificare il nome di un file all'interno del quale automount andrà a inserire il numero del processo corrispondente.

-t <n-secondi> | --timeout <n-secondi>

Quando un dispositivo o un filesystem di rete risulta inutilizzato, la directory corrispondente viene smontata dopo lo scadere del tempo stabilito con questa opzione. Se non viene specificato diversamente, la durata di questo tempo è di 5 minuti (300 secondi).

Alcuni argomenti

automount richiede l'indicazione obbligatoria di alcuni argomenti; per la precisione si tratta della directory a partire dalla quale andranno inserite le sottodirectory di innesto dei vari dispositivi e filesystem di rete da montare, dell'indicazione del tipo di mappa utilizzato, e dell'indicazione della mappa stessa.

<punto-di-innesto-automatico>

Il primo argomento che segue le opzioni è la directory utilizzata come base per il montaggio automatico. A partire da questa verranno aggiunte automaticamente le sottodirectory di innesto in base a quanto contenuto nella mappa.

<tipo-di-mappa>

Dopo l'indicazione della directory di partenza per il montaggio automatico, deve essere indicata una parola chiave che specifica il tipo di mappa utilizzato. Nelle situazioni più comuni si utilizza un file puro e semplice, e in tal caso si indica la parola chiave file. Segue l'elenco di queste scelte possibili.

<mappa>

L'ultimo argomento obbligatorio è il nome della mappa. A seconda del tipo di mappa, può trattarsi del percorso di un file, oppure del nome di un database NIS/NIS+ o Hesiod.

Esempi

automount -t 30 /automnt file /etc/auto.automnt

Avvia il demone automount in modo che utilizzi il file /etc/auto.automnt come mappa da applicare alla directory di innesto automatico /automnt/. In particolare, viene stabilito che il tempo di scadenza per i filesystem liberi e inutilizzati sia di 30 secondi.

48.8.5 # autofs

/etc/rc.d/init.d/autofs start|stop|reload|status

/etc/init.d/autofs start|stop|reload|status

autofs è uno script più o meno standardizzato che dovrebbe facilitare l'avvio del servizio di montaggio automatico. Attraverso le parole chiave start, stop, reload e status è possibile avviare, fermare, riavviare e consultare il servizio.

autofs si avvale di un file di configurazione aggiuntivo, /etc/auto.master, all'interno del quale si dovrebbero poter indicare le directory di innesto automatico e le mappe relative (esclusivamente in forma di file). In pratica, è probabile che si possa indicare una sola directory e una sola mappa.

48.8.6 /etc/auto.master

Il file di configurazione /etc/auto.master è richiesto dallo script autofs per avviare il servizio di montaggio automatico. Serve a indicare le directory di innesto automatico e i file di mappa relativi.

È molto probabile che la sintassi delle direttive di questo file cambi nel tempo, tenendo conto del fatto che allo stato attuale, si può contare solo sul funzionamento della prima direttiva.

L'interpretazione di questo file è a carico dello script autofs, che viene riadattato da ogni distribuzione GNU/Linux. In tal senso, non si può contare su un funzionamento uniforme, almeno fino a che le cose resteranno così.

Esempi

/misc		/etc/auto.misc

Questa è la direttiva tipica del file /etc/auto.master. Fa riferimento alla directory /misc/ come punto di partenza per il montaggio automatico, utilizzando il file di mappa /etc/auto.misc. In pratica, l'utilizzo di questa direttiva dovrebbe tradursi nel comando seguente:

automount /misc file /etc/auto.misc

---------

/misc		/etc/auto.misc	--timeout 60

Si tratta di una variante dell'esempio precedente, in cui viene specificata l'opzione --timeout 60, che si vuole sia passata a automount. L'utilizzo di questa direttiva dovrebbe tradursi nel comando seguente:

automount --timeout 60 /misc file /etc/auto.misc

48.8.7 Considerazioni sulla funzionalità di automount

Il sistema di gestione del montaggio automatico, attraverso il sostegno del kernel e l'uso del demone automount, è stato introdotto da poco, e altrettanto pochi sono gli utenti che ne hanno fatto uso. In questo senso, è prevedibile uno sviluppo futuro con meno incertezze, soprattutto per quanto riguarda lo script autofs e il suo file di configurazione.

Per quanto riguarda l'utilità di questo sistema, è sconsigliabile il suo utilizzo per unità rimovibili che non siano servo-assistite, come nel caso dei dischetti tradizionali, che possono essere espulsi prima che il sistema li abbia smontati.

L'utilizzo più importante riguarda sicuramente i filesystem condivisi in rete attraverso il protocollo NFS. Anche se questo problema non è ancora stato descritto, perché richiede la conoscenza del funzionamento della rete, si può intendere che sia meglio evitare di montare sistematicamente un filesystem di rete all'avvio del sistema: il nodo che offre il servizio potrebbe essere disattivato in quel momento, oppure potrebbe essere a sua volta in attesa di montare un altro filesystem offerto dal proprio sistema locale.

48.9 Riferimenti

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Vale la pena di ricordare che i nomi di dispositivo relativi ai dischetti possono cambiare leggermente da una distribuzione GNU/Linux a un'altra. A volte, il formato dei dischetti da 1440 Kbyte corrisponde al file /dev/fd0H1440.

2.) dosfsck non è un programma che viene installato in modo predefinito dalle distribuzioni, per cui, nella maggior parte dei casi occorre provvedere direttamente per questo.

3.) umount non smonta i filesystem che sono utilizzati in qualche modo, di conseguenza è improbabile che il comando umount -a possa smontare il filesystem principale. Nella fase di arresto del sistema, questo viene rimontato in sola lettura prima dell'arresto totale.

4.) Si tratta di una procedura per ottenere delle copie di sicurezza che comunque non è indispensabile. Per questo si possono usare strumenti normali senza bisogno si utilizzare la configurazione di questo file.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]