Capitolo successivo Capitolo precedente Indice

28. Filesystem

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

La tabella (seguente) elenca i programmi e i file a cui si accenna in questo capitolo.


Nome Descrizione
fdformat Formattazione a basso livello dei dischetti.
badblocks Controlla l'integrità di un disco o di una partizione.
fdisk Creazione e modifica delle partizioni.
cfdisk Creazione e modifica delle partizioni (programma più amichevole).
mke2fs Creazione di un filesystem ext2.
mkdosfs Creazione di un filesystem msdos.
e2fsck Controllo di un filesystem ext2.
dosfsck Controllo di un filesystem msdos.
mount Collegamento di un filesystem in quello globale.
umount Distacco di un filesystem da quello globale.
/etc/fstab Elenco di filesystem e mount point predefiniti.
/etc/mtab Elenco dei mount attivi.
df Utilizzo del disco.
update (bdflush) Daemon per lo scarico periodico della memoria cache dei dischi.
sync Scarico manuale della memoria cache dei dischi.
Riepilogo dei programmi e dei file per la gestione dei dischi e dei filesystem.

28.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. la eventuale suddivisione in partizioni e
  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 meno che non si tratti di unità rimovibili come i dischetti. In quest'ultimo caso, a parte i dischetti, si deve quasi sempre utilizzare quanto fornito insieme ai drive, 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, 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.

# fdformat

fdformat [-n] <dispositivo>

fdformat esegue una 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/fd0H1440 e /dev/fd1H1440 che si riferiscono al formato da 1440KB dei dischetti da 3,5 pollici.

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 normali 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/fd0H1440

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

# fdformat /dev/fd1H1440

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

# 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 di rado.

<!>   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/fd0H1440 1440

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

# 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 automaticamente definita del tipo Linux native, ma in certi casi può essere necessario modificare il tipo di partizione creato attraverso il comando t. Ogni tipo di partizione ha un codice 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, è necessario riavviare il sistema prima di poter 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, ...) 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.

# 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 all'utilizzo di sistemi estremamente ridotti o di emergenza. Ciò significa che il programma fdisk tradizionale non può essere abbandonato per adottare esclusivamente cfdisk.

# mke2fs

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

mke2fs permette di creare un filesystem di tipo ext2 (Second Extended) in una unità di memorizzazione. Questa viene indicata nel modo consueto, attraverso l'indicazione del nome del file di dispositivo corrispondente (/dev/...).

La dimensione è espressa in blocchi. Se viene omessa l'indicazione di questo valore, 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 4K byte (4096) e non può essere inferiore a 1K (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 backup 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 ( e2fsck), ma non c'è alcuna garanzia che il recupero funzioni.

# mkdosfs

mkdosfs [<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 nel primo drive, dopo aver controllato la sua superficie e determinando automaticamente la dimensione in blocchi.

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

# e2fsck

e2fsck [<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 venir poste.

-p

Ripara automaticamente il filesystem senza porre alcuna domanda.

-y

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

Exit status

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

# dosfsck

dosfsck [<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.

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.

Exit status

28.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 computer, occorre eseguire l'operazione opposta di distacco. Occorre cioè smontarla (unmount).

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

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

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 (seguente), sono elencati i nomi che identificano i tipi di filesystem riconoscibili da Linux.


tipo di filesystem descrizione
minix Minix
ext2 Second extended
hpfs
umsdos 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
ncpfs
affs
ufs
sysv
proc filesystem virtuale /proc
swap partizione di swap
Elenco dei nomi di filesystem utilizzabili.

Opzioni

In occasione del mount di un filesystem si possono definire alcune opzioni allo scopo di modificarne il comportamento predefinito. Quello che segue è un elenco parziale delle opzioni disponibili.

Vedere mount(8) e nfs(5).

Opzioni valide per ogni tipo di filesystem

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 mount 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 attivare il filesystem. L'opzione user implica l'attivazione di noexec, nosuid e nodev, a meno che queste non 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 dei filesystem umsdos, msdos e vfat.

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

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

umask=<maschera>

Permette di stabilire quali permessi inibire nel filesystem. Si tratta di tre cifre numeriche dove la prima 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à ed 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.

case=lower | case=asis

Converte in minuscolo, o lascia come sono, i caratteri dei nomi dei file. Il valore predefinito è case=lower.

# 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 precedentemente montato. La forma normale e più semplice di utilizzo di mount è la seguente.

mount -t <tipo-di-filesystem> <dispositivo> <mount-point>

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

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 mount, 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 avvio del sistema (/etc/rc.d/rc*). La presenza del file di configurazione /etc/fstab è utile anche per semplificare il mount (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 <mount-point>

In linea di principio, solo l'utente root può montare un filesystem. Per permettere agli utenti normali di montare e smontare una 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 mount 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 ad esclusione di quelli segnati come noauto.

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

Specifica il tipo di filesystem. Sono riconosciuti i nomi indicati nella tabella (tabella). 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 e/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 mount 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 (tabella).

Esempi

# mount -t ext2 /dev/hda2 /mnt

Monta il filesystem di tipo ext2 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 vfat (FAT con le estensioni per i nomi lunghi) contenuto in un dischetto inserito nella prima unità, a partire dalla directory /floppy.

# mount -t nfs pippo.zigozago.dg:/pubblica /pippo

Monta il filesystem di rete condiviso dal computer pippo.zigozago.dg, corrispondente alla sua directory /pubblica (e discendenti), nella directory locale /pippo.

# 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 ad esclusione di quelli indicati.

Esempi

# umount /dev/hda2

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

umount /mnt

Smonta il filesystem precedentemente montato nella directory /mnt.

/etc/fstab

Il file /etc/fstab viene utilizzato per definire le caratteristiche e le directory di collegamento (mount-point) dei vari filesystem usati di frequente nel sistema. Si tratta di un file che viene solo letto dai programmi ed 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 (incluse le tabulazioni). Le righe che iniziano con il simbolo # sono ignorate e trattate 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 mount point per il filesystem.
  3. Il terzo campo definisce il tipo di filesystem e ne viene indicato il nome in base alla tabella (tabella). Se in questo campo viene indicato il termine ignore, si intende fare riferimento ad 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 mount che si intende eseguire. Si tratta delle stesse opzioni speciali descritte in mount(8) e anche nella sezione mount in occasione della spiegazione dell'uso dell'opzione -o.
  5. Il quinto campo viene utilizzato per determinare quali filesystem possono essere utilizzati per il dump.
  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 root, cioè quello principale dovrebbe avere il numero 1 in questo campo, mentre gli altri, il numero 2. Se questo campo contiene il valore 0, significa che quel filesystem non deve essere controllato.

Esempi

Nell'esempio seguente, tutte le unità che non sono stabilmente collegate al corpo fisico del computer, hanno l'opzione noauto che impedisce il mount automatico all'avviamento del sistema. Queste vengono attivate quando si esegue mount con il vantaggio di poter semplicemente indicare la directory di collegamento (mount point) o il nome del dispositivo.

# nome               Mount point  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
pippo.zigozago.dg:/  /mnt/pippo   nfs      ro,user,noauto     0   0
/dev/fd0             /mnt/dosa    vfat     user,noauto,quiet  0   0

/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 viene creato automaticamente all'avvio del sistema.

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

28.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 tampone, è il motivo principale per cui si deve fare attenzione a chiudere l'attività del sistema prima di spegnere il computer.

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

# update (bdflush)

update [<opzioni>]

Con questo nome, update, viene avviato il daemon che si occupa di richiedere periodicamente al kernel lo scarico della memoria cache. Deve essere avviato, 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 oppure l'inserimento di record apposito all'interno di /etc/inittab.

Esempi

L'esempio seguente mostra una configurazione della procedura di inizializzazione attraverso la quale update viene avviato attraverso lo script iniziale. Segue il record del file /etc/inittab con cui si fa riferimento allo script e lo spezzone di script.

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

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

# Attivazione di update.
/sbin/update

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

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

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

$ sync

sync [<opzioni>]

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

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

Di solito non si usano opzioni.

28.5 Dischi senza filesystem

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 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:

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice