|
3.1
La struttura del filesystem Il filesystem è diviso in
molte parti: di solito insieme a root ci sono /bin, /lib,
/etc, /dev che formano un singolo filesystem e poi ce ne
possono essere altri, come /usr con i programmi ed i dati che
non vengono modificati, /var con i dati che vengono modificati
(come i file di log) e /home con i file personali dei vari
utenti. A seconda dell’hardware e delle decisioni dell’amministratore
di sistema, la divisione può cambiare e potrebbero essere anche tutti
un singolo filesystem:
/usr/lib
/dev /etc
/usr/bin
/usr/sbin
/usr/games /lib
/bin
/usr/include
/sbin
/usr
/
/usr/local
/usr/X11R6 /proc
/tmp
/usr/src
/usr/share
/home
/var
3.2
Device file e comandi correlati
La maggior parte dei file dei device (dispositivi) sono creati
durante l’installazione della distribuzione. La lista dei file di
device supportati dal kernel Linux si trova in /usr/src/linux/Documentation/devices.txt.
Nel caso fosse necessario creare un nuovo file di device, si può
usare lo script MAKEDEV. Questo script si trova in /dev/MAKEDEV;
la sintassi del comando è:
\# /dev/MAKEDEV -v ttyS0 create ttyS0
c 4 64 root:dialout 0660
Questo esempio crea il file di device /dev/ttyS0 con major node 4 e
minor node 64, come device a caratteri e permessi di accesso 0660; il
proprietario sarà root ed il gruppo dialout. ttyS0 è una porta
seriale. Il numero di node major e minor sono numeri interpretati dal
kernel. Il kernel riconosce i dispositivi hardware come numeri.
Per creare device sconosciuti a MAKEDEV si usa il comando mknod.
Per poterlo usare proficuamente bisogna conoscere il major number ed
il minor number del device da creare. Per saperlo bisogna cercare nel
file devices.txt nella documentazione dei sorgenti del kernel.
Per esempio, si può creare /dev/ttyS0 con mknod eseguendo i comandi:
- \# mknod /dev/ttyS0 c 4 64
- \# chown root.dialout /dev/ttyS0
- \# chmod 0644 /dev/ttyS0
- \# ls -l /dev/ttyS0 crw-rw---- 1 root
dialout 4, 64 Oct 23 18:23 /dev/ttyS0
3.3 Amministrazione di filesystem e dispositivi di archiviazione
I compiti di base nell’amministrazione dei dischi sono:
- La formattazione che fa diverse cose per preparare il
disco all’uso, come controllare se ci sono settori danneggiati
(oggigiorno non e’ necessario formattare la maggior parte degli hard
disk).
- Il partizionamento, se volete usare il disco per diverse
attività che non dovrebbero interferire l’una con l’altra. Una
ragione per ripartizionare il disco è se volete usare diversi
sistemi operativi sullo stesso disco, un’altra è di tenere i file
degli utenti separati dai file di sistema, cosa che semplifica i
backup ed aiuta a proteggere i file di sistema.
- La creazione di un filesystem (di tipo adatto) su ciascun
disco o partizione. I dischi non sono utilizzabili da Linux finchè
non ci create un filesystem: a quel punto potete memorizzarci file,
ed accedere a quelli presenti.
- Il montaggio di diversi filesystem per formare una
singola struttura ad albero, sia automaticamente che manualmente, a
seconda delle circostanze (dovete fare l’unmount manuale dei
filesystem montati manualmente).
3.3.1 La formattazione
La formattazione e’ il processo con cui si segnano sul mezzo
magnetico le tracce e i settori. Prima che venga formattato, il disco
ha una superficie in cui i segnali magnetici si sovrappongono creando
un vero caos. Quando viene formattato si porta un certo ordine nel
caos essenzialmente tracciando delle linee dove vanno le tracce e dove
vengono suddivise in settori. I dettagli reali non sono proprio
questi, ma è irrilevante; quello che è importante è che un disco non
può essere usato se non è stato formattato.
La terminologia a questo proposito è piuttosto confusa:
nell’MS-DOS, la parola formattazione viene usata anche per il processo
di creazione di un filesystem (che verrà discusso più avanti); qui i
due processi sono spesso combinati, specialmente per i floppy. Quando
sarà necessaria una distinzione, la formattazione reale viene chiamata
formattazione a basso livello, mentre la creazione del filesystem si
chiama formattazione ad alto livello. Nei circoli UNIX, i due processi
vengono chiamati formattazione e creazione di un filesystem, quindi in
questo contesto verranno usati questi termini. Per i dischi IDE ed
alcuni dischi SCSI la formattazione viene fatta in realtà in fabbrica
e non c’è bisogno di ripeterla.
I floppy vengono formattati con fdformat . Il file di device
del floppy da usare viene dato come parametro; ad esempio, il comando
seguente formatterebbe un dischetto ad alta densità, da 3.5 pollici
nel primo drive del floppy:
\$ fdformat /dev/fd0H1440
Doppio-completo, tracce 80 , 18 sec/traccia.
Capacità totale 1440 kB
Formattazione ... fatto
Verifica in corso ... fatto
Come precauzione è una buona idea scrivere su carta la tabella
delle partizioni, in modo che se si corrompesse ci sarebbe una
speranza di non perdere tutti i file.
3.3.2 Partizionamento di dischi rigidi
Ci sono molti programmi per creare e rimuovere partizioni. La
maggior parte dei sistemi operativi ne ha uno proprio, ed è una buona
idea usare quello del sistema che si usa, in caso faccia qualcosa di
insolito che gli altri non fanno. La maggior parte di questi
programmi, compreso quello per Linux, si chiamano fdisk o
variazioni sul tema.
Ciascuna partizione e partizione estesa ha il proprio file di
device. La convenzione per i nomi di questi file e’ che il numero
della partizione viene fatto seguire al nome del disco, con la
convenzione che da 1 a 4 sono partizioni primarie (non tenendo conto
di quante partizioni primarie ci sono in realtà) e da 5 a 8 sono
partizioni logiche (non tenendo conto di quale è la partizione
primaria che le contiene). Ad esempio, /dev/hda1 è la prima
partizione primaria sul primo disco IDE e /dev/sdb7 è la terza
partizione estesa sul secondo disco SCSI.
Oltre allo storico fdisk, un altro programma per creare,
modificare, verificare e copiare partizioni è GNU Parted.
Parted è utile anche per creare spazio per nuovi sistemi operativi,
riorganizzare l’uso dei dischi, copiare dati tra dischi e creare
immagini di dischi.
3.3.3 I filesystem
Prima che si possa usare un disco o una partizione come filesystem,
deve essere inizializzato, e bisogna scriverci sopra le strutture di
dati per l’archiviazione. Questo processo si chiama creazione di un
filesystem.
La gamma di file system disponibili per i sistemi operativi basati
su Linux diventa davvero ampia se si considerano gli innumerevoli
driver prodotti da singoli sviluppatori o aziende. IBM e Silicon
Graphics, ad esempio, includono Linux fra le piattaforme supportate
dai loro nuovi file system journaled, JFS ed XFS.
I più diffusi filesystem usati sono:
- ext2. Il classico filesystem nativo di Linux e, al
momento, anche il più usato. E’ disegnato per essere compatibile in
avanti, in modo che nuove versioni del codice del filesystem non
abbiano bisogno di rifare i filesystem esistenti.
- ext3. Evoluzione journaled del filesystem ext2.
- ReiserFS. E' un filesystem journaled puro, molto veloce e
affidabile.
- msdos. Compatibile con i filesystem FAT di MS-DOS (e OS/2
e Windows NT).
- iso9660. Il filesystem standard per i CD-ROM. Viene
supportata automaticamente l’estensione Rock Ridge allo standard per
i CD-ROM, che permette di avere i nomi dei file lunghi.
- nfs. Un filesystem di rete che permette di condividere un
filesystem tra vari computer per avere da essi un accesso più facile
ai file.
- hpfs. Il filesystem di OS/2.
Il supporto per i filesystem di Windows NT e’ stabile solo in
lettura, dato che il reverse engineering dell'NTFS e’ stato bloccato
dagli avvocati di Microsoft.
Esiste anche il filesystem proc, di solito accessibile nella
directory /proc, che in realtà non è per niente un filesystem, anche
se gli assomiglia. Il filesystem proc permette di avere facile accesso
ad alcune strutture di dati del kernel, come la lista dei processi (da
cui il nome). Fa apparire queste strutture di dati come un filesystem,
e quel filesystem può essere manipolato con i normali strumenti di
manipolazione di file. Ad esempio, per avere un elenco di tutti i
processi si può usare il comando:
ls -l /proc
3.3.4 Creare un filesystem
I filesystem vengono creati, cioè inizializzati, con il comando
mkfs. In realtà esiste un programma separato per ciascun tipo di
filesystem e mkfs è solo un’interfaccia che avvia il programma adatto
a seconda del tipo di filesystem desiderato. Il tipo viene selezionato
con l’opzione -t tipofs.
I programmi richiamati da mkfs hanno interfacce su linea di comando
leggermente diverse. Le opzioni più comuni ed importanti sono
riassunte qui sotto; per altri dettagli consultare la pagina man.
- -t tipofs. Seleziona il tipo di filesystem.
- -c. Attiva la ricerca dei blocchi danneggiati e ne
inizializza di conseguenza la lista.
- -l nomefile. Legge la lista di blocchi daneggiati
iniziale dal file nomefile.
3.3.5 Montare e smontare
Prima che si possa usare un filesystem, bisogna montarlo (mount);
così il sistema operativo fa delle operazioni di archiviazione in modo
da essere sicuri che tutto funzioni. Dato che tutti i file in UNIX si
trovano in un singolo albero di directory, l’operazione di mount farà
sembrare che il nuovo filesystem sia contenuto in una sottodirectory
esistente di qualche filesystem già montato.
Il comando mount accetta due argomenti: il file di device
corrispondente al disco o alla partizione che contiene il filesystem,
e la directory sotto cui montarlo.
mount /dev/hda2 /home
mount /dev/hda3 /usr
Dopo questi comandi i contenuti dei due filesystem sembrano essere
in /home e /usr. Si può dire che "/dev/hda2 è montato su /home" e
la stessa cosa per /usr. Per vedere i due filesystem basta guardare
nella directory su cui è stato montato, come se fosse una qualsiasi
altra directory. Notate la differenza tra il file di device /dev/hda2 e
la directory su cui viene montato, /home. Il file di device dà
accesso ai contenuti fisici del disco, la directory su cui viene
montato dà accesso ai file che vi si trovano. La directory su cui
viene montato un filesystem si chiama punto di mount.
La directory di mount può anche non essere vuota, ma deve esistere.
Qualsiasi file vi si trovi non potrà essere richiamato per nome
mentre il filesystem è montato (qualsiasi file già aperto sarà
ancora accessibile. I file a cui puntano hard link da altre directory
possono essere accessibili usando quei nomi). Con questo procedimento
non viene perso nessun dato, e può anche essere utile: ad esempio,
alcuni vogliono avere /tmp e /var/tmp sinonimi, e rendere /tmp un link
simbolico a /var/tmp. Quando si avvia il filesystem, prima che venga
montato /usr, viene usata una directory /var/tmp che risiede sul
filesystem di root. Quando viene montato /usr, la directory /var/tmp
sul filesystem di root diventa inaccessibile. Se non esistesse /var/tmp
sul filesystem di root, sarebbe impossibile usare i file temporanei
prima del mount di /var.
Quando non serve più che un filesystem sia montato, può essere
smontato usando umount 4.8. umount accetta un argomento o il file di device o il punto di mount. Ad esempio, per smontare le directory
dell’esempio precedente, si possono usare i comandi:
umount /dev/hda2
umount /usr
I filesystem sono creature complesse, e come tali tendono ad essere in
qualche modo propense ad avere errori. Si possono controllare la
correttezza e la validità di un filesystem usando il comando fsck,
che può essere usato per riparare i piccoli errori che trova, e per
avvisare l’utente se ci sono problemi irreparabili.
Il filesystem ext2 tenta di mantenere la frammentazione al minimo,
tenendo tutti i blocchi di un file vicini, anche se non possono essere
immagazzinati in settori consecutivi. L’ext2 in effetti alloca sempre
il blocco libero che si trova più vicino agli altri blocchi di un
file. Per l’ext2, quindi, è molto raro doversi preoccupare della
frammentazione come accade, invece, per i filesystem di Windows.
Non tutti i dischi o le partizioni vengono usati come filesystem: ad
esempio le partizioni di swap non hanno filesystem. Molti floppy
vengono usati come fossero dei nastri, scrivendo direttamente un tar o
un altro file sul disco vuoto, senza un filesystem. I floppy di boot
di Linux non contengono filesystem, ma solo un kernel nudo e crudo.
|