Previous Next Contents

6. Dischi

6.1 mount ed umount

Come già ampiamente scritto e ribadito, il filesystem di Linux mantiene una struttura gerarchica, questo significa che anche le periferiche non tipicamente legate all'HD vengono viste come parte del file system.

Cercherò di spiegarmi meglio: tipicamente il dos separa le unità fisiche che compongono il file system in unita logiche a cui si può accedere mediante identificatori. Ad esempio tipicamente il dischetto da 3 pollici e mezzo viene indicato con A: mentre la prima partizione dell'HD con C:.

Il sistema operativo Linux si comporta in modo leggermente, diverso, tutte le periferiche vengono gestite in modo piatto, ovvero tipicamente quello che in dos viene indicato come drive A:, sotto Linux sarà una sottodirectory della radice, e sarà possibile accedervi mediante il comando tipico cd nomedir, sarà inoltre possibile effettuare tutte le operazioni che tipicamente si compiono all'interno di una directory.

Questo avviene per una serie di motivi:

  1. per continuare a difendere la struttura gerarchica del filesystem Linux, in modo che il processo di accesso ad un dispositivo sia unico per qualunque tipo di periferica, sia essa una unità a nastri, sia esso un floppy disk, sia essa una unità di backup e così via;
  2. Linux riconosce e riesce a leggere più tipi di filesystem, posso utilizzare un dischetto in formato dos, os2, ext2, minix e tanti altri, il fatto che comunque questa periferica abbia un accesso comune in stile directory, mi nasconde questa caratteristica, consentendomi di trattare allo stesso modo sia un filesystem formattato dos che uno formattato ext2, utilizzando gli stessi comandi per qualunque tipo di disco, e lasciando al sistema operativo il compito di scrivere o leggere da una periferiche in modo diverso a seconda di che tipo di formattazione quella periferica abbia ricevuto.

Naturalmente Linux ci mette a disposizione dei comandi per poter montare sotto una directory una periferica come ad esempio un drive.

Il comando in questione è mount. mount ha una sintassi del tipo:

mount [options] nomeperiferica mountpoint -t fstype

dove options rappresenta una delle innumerevoli opzioni applicabili alla periferica in questione (sola lettura, sola scrittura e tante altre, consiglio ``man 8 mount'' per saperne di più).

nomeperiferica

rappresenta la periferica che si desidera montare, ad esempio nel caso del floppy A: da 1.4 Mb, avremo /dev/fd0H1440

mountpoint

è la directory dove la periferica in questione deve essere mountata

-t

è uno switch che indica che fra poco scriveremo il tipo di formattazione con cui quella periferica è stata inizializzata

fstype

è il tipo di formattazione presente sulla periferica, tipicamente: ext2, dos, minix, hpfs, fat, vfat, la quantità di filesystem riconosciuti da Linux dipende da come avrete ricompilato il kernel.

Facciamo qualche esempio:

mount /dev/fd0H1440 /mnt -t msdos

monta il drive A: nella directory /mnt supponendo che il dischetto nel drive A: sia stato formattato msdos

mount /dev/sbpcd /cdrom -t iso9660

monta un cdrom soundblaster nella directory /cdrom supponendo, come è ovvio, che il formato del cdrom sia iso9660

mount /dev/hda2 /dosc -t vfat -o -ro

monta la partizione D: del primo disco rigido nella directory /dosc supponendo che tale disco sia stato formattato con W95, inoltre stabilisce che tale disco sia accessibile in sola lettura.

mount none  /proc  -t proc

monta una periferica fittizia nella directory /proc, assegnandogli come filesyste, proc che è un filesystem finto che mantiene sotto forma di file un albero dei processi in corso

mount bilbo.comeon.org:/pub /mnt -t nfs

monta nella directory /mnt la directory /pub di un sito remoto a cui siamo collegati (es: tramite internet) il cui nome è bilbo.comeon.org.

Naturalmente così come esiste il comando mount, deve anche esistere un comando in grado di smontare i vari filesystem una volta che ne abbiamo terminato l'uso, ad esempio è un errore gravissimo non smontare una dir che ad esempio contiene un floppy e cambiare il floppy mentre la dir è ancora montata.

Il comando per smontare una dir è: umount mountpoint. Anche in questo caso per saperne qualcosa in più sulle opzioni, ``man 8 mountpoint''.

6.2 Il file /etc/fstab

Poiché in molte occasioni risulta noioso dovere scrivere ogni volta una sequenza di mount per una periferica e anche perché alcune periferiche hanno bisogno di essere montate automaticamente al boot, esiste un meccanismo che ci consente di abbreviare di molto il comando mount e di montare in automatico al boot le periferiche che ci occorrono.

Tale meccanismo è fornito dal file /etc/fstab. Ciascuna linea di questo file è del tipo:

fs_spec     fs_file    fs_vfstype  fs_mntopts fs_freq   fs_passno

fs_spec     descrive il dispositivo a cui si fa riferimento
fs_file     descrive il mount point dove si desidera mountare tale dispositivo
fs_vfstype  descrive il filesystem contenuto in questo dispositivo
fs_mntopts  descrive le opzioni associate al mount del dispositivo
fs_freq     è un numero che decide se il filesystem ha bisogno di eseguire
            un dump prima di essere montato
fs_passno   è un parametro che viene passato a fsck per sapere in
            quale ordine i filesystem devono essere controllati dopo
            ogni reboot.

ad esempio il mio /etc/fstab è il seguente:

/dev/hdb3        swap        swap        defaults   1   1
/dev/hdb2        /           ext2        defaults   1   1
/dev/hdb1        /dosd       vfat        defaults   1   1
none             /proc       proc        defaults   1   1
/dev/sbpcd       /cdrom      iso9660     noauto,ro  1   1

In pratica la prima riga monta la partizione di swap, la seconda riga monta nella directory / l'HD D: che essendo quello che contiene Linux è stato formattato con ext2, la terza riga monta nella directory /dosd la partizione dos dell'HD D: che è stato formattato con W95 e dunque il tipo è vfat, la quarta riga mounta nella directory /proc una periferica fittizia il cui tipo consente di mantenere un albero dei processi in corso nella dir /proc sotto la forma di file, la quinta riga mounta il cdrom /dev/sbpcd nella directory /cdrom, il tipo ovviamente del cdrom è iso9660, il parametro noauto fa sì che il cdrom non venga montato direttamente al boot ma aspetti un certo comando mount affinché il mount avvenga, ro indica che il cdrom ovviamente viene montato in sola lettura.

La presenza del parametro noauto nella riga relativa al cdrom, fa sì che esso non venga automaticamente mountato al boot, però fornisce una scorciatoia per il comando mount, ovvero dato che i parametri del cd sono noti, per montarlo basterà il comando

mount /cdrom

senza nessun parametro come avveniva in precedenza.

6.3 Formattare un dischetto

Naturalmente come in tutti gli altri sistemi operativi, anche Linux mette a disposizione dei comandi per la formattazione di un dischetto. In particolare, il comando che risponde a questa funzione e:

fdformat [-n] device

dove device è il dispositivo da formattare e -n è un'opzione che indica se si desidera o meno una verifica della formattazione.

Ad esempio

fdformat /dev/fd0H1440       formatta il drive A: a 1.4 Mb
fdformat /dev/fd0H720        formatta il drive A: a 720 kb
fdformat /dev/fd1h1200       formatta il drive B: a 1.2 Mb

Poiché come gia detto Linux è capace di leggere e scrivere più tipi di file system, non è sufficente semplicemente formattare un dischetto per poterlo usare, ma è necessario stabilire di che tipo sara' il filesystem presente su quel dischetto.

6.4 Creare un file system

Il filesystem su un dischetto può essere creato mediante il comando:

mkfs [-V] [-t fstype] filesys

-V

produce un output prolisso (ovvero verranno visualizzate una quantità di informazioni

-t

fstype indica il tipo di filesystem che si desidera creare su un dischetto

filesys

indica la periferica su cui si desidera venga costruito un filesystem

Ad esempio:

mkfs /dev/fd0H1440 -t ext2

produce sul drive A precedentemente formattato a 1.4 mb un filesystem di tipo ext2.

6.5 Il comando df

Il comando linux per vedere la percentuale di disco usata e libera è:

df [options]

La quantità di opzioni messa a disposizione da df è veramente illimitata quindi vi consiglio vivamente ``man df''

Tipicamente l'output di df è:

/dev/hdb2             234239  156910    65233     71%   /
/dev/hdb1             257748   13620   244128      5%   /dosd
/dev/sbpcd            685388  685388        0    100%   /cdrom

Seguito ad esempio dallo switch -T ne risulta qualcosa del genere:

Filesystem    Type 1024-blocks  Used Available Capacity Mounted on
/dev/hdb2     ext2    234239  156910    65233     71%   /
/dev/hdb1     vfat    257748   13620   244128      5%   /dosd
/dev/sbpcd    iso9660   685388  685388        0    100%   /cdrom

6.6 Il comando du

Altro comando assai utile nell'analisi delle quantità utilizzate dell'HD è du, disk usage.

du mostra le porzioni di HD utilizzate dai singoli file, directory, o gruppi di file e directory, anche du, come df risponde ad una quantità incredibile di opzioni, quindi anche per du vi consiglio ``man du''.

Ad esempio:

du -k

4       ./.term
2435    ./doc/misc
456     ./doc/giuda.bbs
100     ./doc/prg.culturale/RCS
128     ./doc/prg.culturale
3020    ./doc
3046    .

mostra lo spazio delle singole dir in K-byte

du -b

3754    ./.term
2481194 ./doc/misc
453808  ./doc/giuda.bbs
93626   ./doc/prg.culturale/RCS
120985  ./doc/prg.culturale
3057011 ./doc
3073141 .

mostra lo spazio occupato in byte anziche in K-byte

du -c -k -a

22      ./123gate.txt
166     ./ALLFILES.LST
182     ./ALLFILES.TXT
2       ./04060000.rsp
2       ./amiganet.el
1       ./citynet.el
12      ./euronet.019
5       ./euronet.el
7       ./fidonet.el
3       ./peacelnk.el
11      ./statuto.zip
3       ./stpoint.doc
3       ./stuser.doc
6       ./uunecode.txt
2       ./ALLEG_#4.TXT
2       ./ALLEG_#3.TXT
3       ./ALLEG_#6.TXT
19      ./STATUTO.DOC
2       ./ALLEG_#2.TXT
2       ./ALLEG_#5.TXT
0       ./result
0       ./quotes
456     .
456     total

mostra lo spazio occupato dai singoli file all'interno di una dir e il totale utilizzato in KB.

6.7 Gli mtools

Data l'elevata quantità di dischetti formattati con msdos, in molti sistemi Linux, vengono forniti una serie di comandi che consentono di leggere dischi dos senza dovere passare attraverso il mount e l'umount del filesystem. Tali comandi vanno sotto il nome di mtools.

mattrib   - cambia gli attributi ad un file msdos
mcd       - cambia una directory msdos
mcopy     - copia file a/da dos a Linux
mdel      - cancella un file msdos
mdir      - visualizza una directory msdos
mformat   - formatta un dischetto in stile msdos
mlabel    - aggiunge un etichetta ad un dischetto msdos
mmd       - crea una sottodirectory msdos
mrd       - rimuove una directory msdos
mread     - legge (a basso livello) un file da msdos a unix
mren      - rinomina un file msdos
mtype     - visualizza il contenuto di un file msdos
mwrite    - scrive (a basso livello) un file da unix a msdos

ad esempio:

mcopy a:\\pluto.txt /tmp

copia dal drive a: il file pluto.txt alla dir linux /tmp.

Io personalmente non faccio mai uso degli mtools, e preferisco passare attraverso mount, che una volta assimilato risulta molto molto più comodo. Inoltre, tento di formattare tutti i miei dischetti in ext2 che è un formato assai più efficente della vecchia ed obsoleta fat.

Esiste per la verita un superformat che fornisce dei modi estesi per la formattazione dei dischetti (fino a 2Mb), lo trovate nel pacchetto fdutils.tgz, perché ovviamente non entra nelle distribuzioni ufficiali, né è un comando standard di Linux.


Previous Next Contents