[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 68.   Gestione di dischi e file system

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

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

Tabella 68.1. Riepilogo dei programmi e dei file per la gestione dei dischi e dei file system.

Nome Descrizione
fdformat Formattazione a basso livello dei dischetti.
superformat 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, mkfs.ext3 Creazione di un file system Second-extended Ext2 o Ext3.
mkdosfs, mkfs.msdos Creazione di un file system Dos-FAT.
mkfs programma frontale per l'utilizzo dei programmi di creazione dei file system.
e2fsck, fsck.ext2, fsck.ext3 Controllo di un file system Second-extended Ext2 o Ext3.
dosfsck, fsck.msdos Controllo di un file system Dos-FAT.
fsck Programma frontale di controllo dei file system.
mount Collegamento (innesto) di un file system in quello globale.
umount Distacco di un file system da quello globale.
/etc/fstab Elenco di file system e punti di innesto predefiniti.
/etc/mtab Elenco dei montaggi (innesti) attivi.
df Utilizzo del disco.
update (bdflush) Programma demone per lo scarico periodico della memoria cache dei dischi.
sync Scarico manuale della memoria cache dei dischi.

68.1   Preparazione dei file system

Prima di poter utilizzare un file system, 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 file system 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 questo 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 file system si devono utilizzare programmi diversi a seconda del tipo di file system.

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.

68.1.1   # fdformat

fdformat [-n] dispositivo

fdformat (1) 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 1 440 Kibyte dei dischetti da 3,5 pollici.(2)

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 1 440 Kibyte nella prima unità a dischetti.

fdformat /dev/fd1u1440

Inizializza un dischetto da 1 440 Kibyte nella seconda unità a dischetti.

68.1.2   # superformat

superformat [opzioni] dispositivo [descrizione_del_supporto]

superformat (3) è un programma alternativo a fdformat, più raffinato, che permette di definire molti dettagli in più che riguardano l'inizializzazione dei dischetti. In generale, si possono ignorare tutte queste caratteristiche speciali, utilizzando superformat con la sola indicazione del file di dispositivo del dischetto da inizializzare: è sufficiente fare riferimento al dispositivo generico, senza le informazioni sulla capacità dello stesso. Alla fine dell'inizializzazione a basso livello, superformat utilizza mformat per inserire nel dischetto un file system Dos-FAT, che se non serve può essere semplicemente ignorato.

Prima di eseguire l'inizializzazione, superformat controlla le caratteristiche dell'unità a dischetti. È possibile predisporre il file /etc/driveprm con una direttiva che viene suggerita dallo stesso programma mentre è in funzione, per evitare che venga ripetuto questo controllo. Se si interviene in questo modo, occorre ricordare di eliminare la direttiva quando si cambia unità a dischetti, o quando si cambia l'unità di controllo. In generale, non è il caso di preoccuparsi di questo file, a meno che l'inizializzazione dei dischetti sia un'attività frequente.

Le opzioni di superformat sono utili soprattutto quando si vuole inizializzare un dischetto utilizzando un formato insolito, ma in tal caso conviene leggere la pagina di manuale relativa: superformat(1). Comunque, vale la pena di ricordare che con l'opzione -f, o --noverify, si esclude qualunque controllo sul risultato dell'inizializzazione.

Esempi

superformat /dev/fd0

Inizializza un dischetto nell'unità corrispondente al file di dispositivo /dev/fd0, utilizzando il formato standard massimo per quel tipo di unità.

68.1.3   # badblocks

badblocks [opzioni] dispositivo dimensione_in_blocchi [blocco_iniziale] 

badblocks (4) è 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 file system. 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 l'intenzione di 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 è 1 024.

-w

Esegue una prova di scrittura controllando successivamente l'esito. Questa opzione deve essere usata con prudenza dal momento che, così facendo, 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: 1 440 blocchi di 1 Kibyte. Trattandosi di un controllo in sola lettura, badblocks può essere eseguito da un utente comune (sempre che tali utenti abbiano i permessi di lettura per il dispositivo che si va a leggere).

68.1.4   # fdisk

fdisk [opzioni] [dispositivo]

fdisk (5) è 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 ATA 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 le modifiche.

Il funzionamento di fdisk è già stato descritto nel capitolo 10.

Alcune opzioni

-l

Emette l'elenco delle partizioni esistenti nelle unità ATA 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 file system e il programma utilizzato non è in grado di determinarla da solo.

68.1.5   # cfdisk

cfdisk [opzioni] [dispositivo]

cfdisk (6) è 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.

Il funzionamento di fdisk è già stato descritto nel capitolo 10.

68.1.6   # sfdisk

sfdisk [opzioni] dispositivo

sfdisk -s [partizione]

sfdisk dispositivo < file_di_comandi

sfdisk (7) è un programma non interattivo per la modifica della tabella delle partizioni, utile per la realizzazione di script. L'utilizzo normale di questo programma di servizio prevede la preparazione di un file contenente le istruzioni sulle partizioni da creare all'interno di un disco specificato espressamente. Anche se è prevista una sintassi apposita per queste istruzioni, può essere conveniente l'utilizzo di quanto ottenuto da un'interrogazione con lo stesso sfdisk, come verrà mostrato. Prima di arrivare a vedere in che modo si possono definire le partizioni, conviene prendere confidenza con l'uso di sfdisk, attraverso delle operazioni non distruttive; pertanto si comincia subito con alcuni esempi.

sfdisk -s /dev/hda1

Questo comando si limita a restituire un numero attraverso lo standard output, corrispondente alla quantità di blocchi della prima partizione del primo disco fisso ATA.

sfdisk -s /dev/hda

In questo caso si ottiene la quantità di blocchi complessiva del primo disco fisso ATA.

sfdisk -V /dev/hda

Verifica la coerenza delle partizioni nel primo disco fisso ATA. Di solito, sfdisk viene usato in questo modo per ottenere il valore restituito, che è Vero (zero) solo se tutto è in ordine.

sfdisk -d /dev/hda

Genera un rapporto sulle partizioni del primo disco fisso ATA, emesso attraverso lo standard output. Questo potrebbe essere ridiretto in un file, da conservare da qualche parte; in seguito, questo stesso file potrebbe essere usato per rigenerare la stessa situazione:

sfdisk -d /dev/hda > /mnt/floppy/partizioni

...

sfdisk /dev/hda < /mnt/floppy/partizioni

Un esempio di questo rapporto potrebbe essere quello del listato seguente:

# partition table of /dev/hda
unit: sectors

/dev/hda1 : start=       63, size=  612801, Id= 6
/dev/hda2 : start=   612864, size= 2721600, Id= 5, bootable
/dev/hda3 : start=        0, size=       0, Id= 0
/dev/hda4 : start=        0, size=       0, Id= 0
/dev/hda5 : start=   612927, size=   20097, Id=83
/dev/hda6 : start=   633087, size=  205569, Id=82
/dev/hda7 : start=   838719, size= 2495745, Id=83

Con questo sistema, se si dispone di una serie di elaboratori con gli stessi dischi fissi che si vogliono suddividere nello stesso modo, è facile utilizzare sfdisk per copiare la struttura di uno negli altri. Se si sa quello che si fa, si può anche modificare uno di questi file prima di darlo in pasto a sfdisk.

sfdisk permette anche di utilizzare una sintassi differente e più approssimativa per definire le partizioni che si vogliono creare. Tuttavia, per questo conviene leggere la documentazione originale, che dovrebbe essere accessibile attraverso la pagina di manuale sfdisk(8).

Alcune opzioni

-s | --show-size

Mostra la dimensione di una partizione.

-l | --list

Mostra l'elenco delle partizioni di un disco.

-d | --dump

Scarica le informazioni sulle partizioni di un disco. Quello che si ottiene può essere riutilizzato per rigenerare la stessa struttura, utilizzandolo come file di comandi per sfdisk.

-V | --verify

Verifica se le partizioni sembrano organizzate correttamente.

68.1.7   Sistemazione delle partizioni Dos-FAT

Quando si predispongono partizioni Dos, può essere opportuno ripulire il primo settore (i primi 512 byte) della partizione, per evitare dei problemi con i programmi come FORMAT, i quali potrebbero leggerlo prima di iniziare il loro lavoro, restando confusi nel caso trovino lì dei dati casuali. Come si intuisce, il problema non esiste se il file system Dos-FAT viene generato attraverso strumenti di GNU/Linux, ma se si realizza uno script che deve costruire automaticamente una serie di partizioni, tra cui anche di tipo Dos, forse è il caso di provvedere a ripulire il primo settore di ogni partizione del genere.

Supponendo di avere definito la partizione /dev/hda1 per il Dos, si dovrebbe agire nel modo seguente:

dd if=/dev/zero of=/dev/hda1 bs=512 count=1

Si intuisce che anche solo un piccolo sbaglio, in un'operazione del genere, comporta la cancellazione di dati in modo incontrollabile.

68.1.8   # mke2fs, mkfs.ext2

mke2fs [opzioni] dispositivo [dimensione_in_blocchi]

mkfs.ext2 [opzioni] dispositivo [dimensione_in_blocchi]

mkfs.ext3 [opzioni] dispositivo [dimensione_in_blocchi]

mke2fs (8) permette di creare un file system di tipo Ext2 e Ext3 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

-j

Richiede espressamente di generare un file system con le estensioni Ext3.

-b dimensione_del_blocco

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

-c

Prima di creare il file system 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 Kibyte (4 096 byte) e non può essere inferiore a 1 Kibyte (1 024 byte).

-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 (68.2.1), ma non c'è alcuna garanzia che il recupero funzioni.

68.1.9   # mkdosfs, mkfs.msdos

mkdosfs [opzioni] dispositivo [dimensione_in_blocchi]

mkfs.msdos [opzioni] dispositivo [dimensione_in_blocchi]

mkdosfs (9) permette di creare un file system 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 file system controlla i blocchi in modo da isolare quelli difettosi. Il controllo viene eseguito in sola lettura.

Esempi

mkdosfs -c /dev/fd0

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

68.1.10   # mkfs

mkfs [-t tipo_di_file_system] [opzioni_specifiche] dispositivo [dimensione_in_blocchi]

mkfs (10) è un programma che uniforma l'utilizzo dei programmi specifici per la creazione dei vari tipi di file system. 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 file system da creare, in questo modo mkfs sa a quale programma deve rivolgersi. Le opzioni specifiche dipendono dal tipo di file system, ovvero dal programma che si prenderà cura effettivamente dell'inizializzazione.

Esempi

mkfs -t msdos -c /dev/fd0

Crea un file system 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 file system Ext2 nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie. La dimensione in blocchi viene indicata in modo esplicito.

68.2   Controllo dei file system

I dati contenuti all'interno di un file system 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.

68.2.1   # e2fsck, fsck.ext2, fsck.ext3

e2fsck [opzioni] dispositivo

fsck.ext2 [opzioni] dispositivo

fsck.ext3 [opzioni] dispositivo

e2fsck (11) permette di eseguire un controllo in un file system di tipo Ext2 e Ext3, applicando le correzioni ritenute necessarie. In generale, è opportuno che il file system da controllare non sia montato, o almeno, se è montato, è necessario che sia accessibile in sola lettura.

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 file system sembra in ordine (un file system che sembra non contenere errori viene definito «pulito»: clean).

-F

Prima di procedere, fa in modo di scaricare la memoria cache del file system 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 file system 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:

  • 0   conclusione normale senza errori;

  • 1   errori nel file system;

  • 2   errori del sistema: se il file system era montato, è necessario riavviare il sistema;

  • 4   errori nel file system rimasti inalterati;

  • 8   errore operativo;

  • 16   errore nell'utilizzo o nella sintassi;

  • 128   errore nella libreria condivisa.

68.2.2   # dosfsck, fsck.msdos

dosfsck [opzioni] dispositivo

fsck.msdos [opzioni] dispositivo

dosfsck (12) permette di eseguire il controllo di un file system di tipo Dos-FAT e di applicare le correzioni ritenute necessarie. In generale, è opportuno che il file system da controllare non sia montato.(13)

Per conoscere maggiori dettagli conviene consultare dosfsck(8).

Alcune opzioni

-a

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

-r

Esegue la riparazione del file system 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
  • 0   Non sono stati riscontrati errori nel file system.

  • 1   Sono stati riscontrati errori risolvibili.

  • 2   Errore nell'utilizzo o nella sintassi.

68.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 file system. Si tratta di un programma frontale.

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

Vedere fsck(8).

68.3   Attivazione dei file system

Per poter accedere ai dati di un'unità di memorizzazione organizzata con un file system, è necessario prima montare il suo file system 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 file system principale (root) e il file system 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 file system globale.

68.3.1   Tipi di file system

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

Tabella 68.2. Elenco dei nomi di file system utilizzabili.

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

68.3.2   Implicazioni legate al montaggio

Il montaggio implica l'inserzione di un file system 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.

Un'altra cosa da considerare sono i permessi della directory radice del disco che si va a montare. Di per sé non c'è nulla di strano, se il file system che si monta è in grado di gestire tali informazioni, basta usare i comandi normali, come chmod e chown per cambiarli, ma questo può confondere il principiante. In breve: quando si cambia la proprietà e i permessi di una directory sulla quale è stato montato un altro file system, questi cambiamenti hanno effetto in quel file system.

68.3.3   Opzioni

In occasione del montaggio di un file system 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 file system compatibili con i sistemi operativi Unix e possono essere utilizzate anche in presenza di file system differenti quando ciò può avere significato.

Vedere mount(8) e nfs(5).

Opzioni valide per i file system Unix

remount

Si tratta di un'opzione speciale che può essere usata solo quando il file system 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 file system 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 validi, o esclude la validità dei file di dispositivo che dovessero essere contenuti nel file system.

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 file system che si intende montare, possano ottenere privilegi particolari.

user | nouser

Permette o impedisce all'utente comune di montare e smontare il file system. 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 file system FAT

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

uid=identificativo_utente

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

gid=identificativo_gruppo

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

umask=maschera

Permette di stabilire quali permessi inibire nel file system. 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:

  • 18 rappresenta un permesso di esecuzione;

  • 28 rappresenta un permesso di scrittura;

  • 48 rappresenta un permesso di lettura.

Di conseguenza,

  • 38 rappresenta un permesso di scrittura e di esecuzione;

  • 58 rappresenta un permesso di lettura e di esecuzione;

  • 68 rappresenta un permesso di lettura e di scrittura;

  • 78 rappresenta un permesso di lettura, scrittura e di esecuzione.

Bisogna fare attenzione però che il valore che si inserisce rappresenta un impedimento all'uso di quel permesso, di conseguenza, la maschera 0228 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 file system normali: umask appunto.

quiet

I file system 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. L'opzione quiet 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.

68.3.4   # mount

mount [opzioni] [dispositivo] [directory]

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

mount -t tipo_di_file_system dispositivo punto_di_innesto

In questo modo si richiede al kernel di montare il file system 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_file_system]

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

Il file system /proc/ non è associato ad alcun dispositivo speciale; pertanto, 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 file system di rete o NFS, dove si usa la forma host:/directory.

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

mount -a [ -t tipo_di_file_system]

Di solito si trova una chiamata di questo tipo all'interno di uno degli script che compongono la procedura di inizializzazione del sistema (/etc/init.d/* oppure /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 file system 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 file system. 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 file system montati correntemente. 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 file system a esclusione di quelli segnati come noauto.

-t [no]tipo_di_file_system[,...]

Specifica il tipo di file system. Sono riconosciuti i nomi indicati nella tabella 68.2. Se il nome del tipo di file system viene preceduto dalla sigla no, si intende che quel tipo deve essere escluso. Se si vogliono indicare più tipi di file system 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 file system indicati all'interno di /etc/fstab, a esclusione dei tipi msdos e nfs.

-o opzione_di_file_system[,...]

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

Esempi

mount -t ext3 /dev/hda2 /mnt

Monta il file system di tipo Ext3 contenuto nella seconda partizione del primo disco fisso ATA, a partire dalla directory /mnt.

mount -t vfat /dev/fd0 /floppy

Monta il file system 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 file system di rete offerto dall'elaboratore roggen.brot.dg, corrispondente alla sua directory /pubblica/ (e discendenti), nella directory locale /roggen/.

68.3.5   # umount

umount [opzioni] [dispositivo] [directory]

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

Alcune opzioni

-a

Vengono smontati tutti i file system indicati in /etc/fstab.

-t [no]tipo_di_file_system[,...]

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

Esempi

umount /dev/hda2

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

umount /mnt

Smonta il file system montato precedentemente nella directory /mnt.

umount -a

Smonta tutti i file system che trova annotati nel file /etc/mtab, escluso il file system proc.(16)

68.3.6   /etc/fstab

Il file /etc/fstab viene utilizzato per definire le caratteristiche e le directory di collegamento (punti di innesto) dei vari file system, 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 file system remoto da montare.

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

  3. Il terzo campo definisce il tipo di file system e ne viene indicato il nome in base alla tabella 68.2.

    Se in questo campo viene indicato il termine ignore, si intende fare riferimento a una partizione presente, ma inutilizzata, 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 68.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 file system possono essere utilizzati per lo scarico dei dati (dump).(17)

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

    Il file system principale dovrebbe avere il numero uno in questo campo, mentre gli altri, il numero due (o anche valori superiori). Se questo campo contiene il valore zero, significa che il file system 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           Dump  Check

/dev/hda3            /            ext3     defaults           0     1
/dev/hdb1            /home        ext3     defaults           0     2
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  ext3     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
  • Il dispositivo /dev/hda3 viene utilizzato come file system principale e per questo è il primo a essere attivato. L'ultimo campo (check) riporta il valore uno, perché si vuole fare in modo che questo file system venga controllato per primo al momento dell'avvio del sistema.

  • Il dispositivo /dev/hdb1 viene utilizzato come file system per contenere le directory personali degli utenti. L'ultimo campo riporta il valore due, perché si vuole fare in modo che questo file system venga controllato per secondo al momento dell'avvio del sistema, dopo il controllo del file system principale.

  • Il file system virtuale proc viene inserito correttamente nella directory /proc/. Il nome utilizzato nel campo del nome, proc, non significa nulla, ma è preferibile al consueto none che si è usato spesso in questo caso.

  • Il dispositivo /dev/hda1 corrisponde a una partizione Dos-FAT con la gestione dei nomi lunghi. In particolare, viene permesso a ogni utente di accedere ai suoi file in tutti i modi possibili.

  • Il dispositivo /dev/sda rappresenta un cosiddetto superfloppy, cioè un disco rimovibile che non è in grado di gestire partizioni, esattamente come fanno i dischetti. Trattandosi di un disco rimovibile viene concesso a tutti gli utenti di eseguire il montaggio e questo non viene effettuato automaticamente al momento dell'avvio del sistema.

  • Il dispositivo /dev/sda1 rappresenta la stessa unità a dischi rimovibili, ma in questo caso viene vista come la prima partizione di uno di questi dischi. Anche qui viene concesso agli utenti comuni di montare e smontare il disco.

  • Il dispositivo /dev/cdrom rappresenta il lettore di CD-ROM. In particolare, viene specificato che l'accesso può avvenire in sola lettura.

  • L'elaboratore roggen.brot.dg condivide tutto il proprio file system (a partire dalla directory radice) attraverso il protocollo NFS. Viene consentito l'accesso in sola lettura.

  • Il dispositivo /dev/fd0, il dischetto, può essere utilizzato da tutti gli utenti e si prevede di accedere sempre solo al formato Dos-FAT con l'estensione per i nomi lunghi.

68.3.7   /etc/mtab

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

68.3.8   $ df

df [opzioni] [dispositivo...]

df (18) 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 1 024 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 i file system che utilizzano una struttura a inode.

-b | --byte

Emette le dimensioni in byte e non in kibibyte (simbolo: Kibyte).

-k | --kilobytes

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

-m | --megabytes

Emette le dimensioni in mebibyte (simbolo: Mibyte).

68.4   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.

68.4.1   # update (bdflush)

update [opzioni]

Con questo nome, update, (19) 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 questo.

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

# Attivazione di update.
/sbin/update

# Controllo della partizione del file system 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

68.4.2   $ sync

sync [opzioni]

sync (20) 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.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) util-linux: fdformat   GNU GPL

2) 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 1 440 Kibyte corrisponde al file /dev/fd0H1440.

3) Linux floppy utilities   GNU GPL

4) E2fsprogs   GNU GPL

5) util-linux: fdisk   GNU GPL

6) util-linux: cfdisk   GNU GPL

7) util-linux: sfdisk   GNU GPL

8) E2fsprogs   GNU GPL

9) Mkdosfs   GNU GPL

10) util-linux: mkfs   GNU GPL

11) E2fsprogs   GNU GPL

12) Dosfsck   GNU GPL

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

14) util-linux: mount   GNU GPL

15) util-linux: umount   GNU GPL

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

17) 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.

18) GNU file management utilities   GNU GPL

19) Update daemon for Linux   GNU GPL

20) GNU file management utilities   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome gestione_di_dischi_e_file_nbsp_system.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]