Il mistero dei punti di mount

ArticleCategory:

UNIXBasics

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to it Roberto Pauletto

AboutTheAuthor:[A small biography about the author]

A Guido piace Linux perche' appartiene alla comunita'. Si tratta di un enorme progetto e in qualche modo tutte le diverse persone nel mondo stanno lavorando per raggiungere lo stesso scopo: renderlo migliore ogni giorno.
Sfortunatamente Linux e' diventato cosi' importante che attrae anche le persone cattive che cercano solo di trarne profitto senza dare nulla in cambio. State attenti! Spesso dall'esterno sembra che si tratti di piccole attivita' "pro-linux" ma sono solo degli opportunisti.

Abstract:

Questo articolo elabora il concetto di punti di montaggio del filesystem (mount), ma spero che l'articolo contenga informazioni di interesse anche per chi non e' nuovo di Linux.

ArticleIllustration:

mount

ArticleBody:

Introduzione

Spieghero' prima di tutto il concetto di montaggio dei filesystem, per poi illustrare ulteriori e piu' avanzate caratteristiche. Se pensate di essere degli esperti di Linux, allora potete iniziare a leggere un poco piu' sotto.

Come funziona

Almeno fino ad oggi sotto windows si aveva l'inconveniente che, aggiungendo un nuovo drive al sistema, si sfalsavano tutte le lettere che rappresentavano i nomi dei drive fino a quel momento. Quello che prima era il drive D: improvvisamente diventava il drive E: e questo generava una certa confusione sia fra gli utenti che nei software stessi.
Sotto Unix questo problema non esiste poiche' tutti i dischi fisici sono inseriti all'interno di una struttura (albero) di directory. Potete visualizzarla digitando "mount" o "df":
# df
Filesystem 1K-blocks    Used Available Use% Mounted on
/dev/hda1    9070728 4701180   3908768  55% /
/dev/hda3   24950428  683412  22999584   3% /home
none          257236       0    257236   0% /dev/shm

# mount
/dev/hda1 on / type ext3 (rw)
none on /proc type proc (rw)
none on /dev/shm type tmpfs (rw)
/dev/hda3 on /home type ext3 (rw)
Nell'esempio abbiamo due partizioni, una della quali contiene tutto tranne la directory /home. Questa e' la partizione di root "/" ed e' fisicamente connessa ad hda1. hda1 e' la prima partizione (1) del primo harddisk ide (hda). La terza partizione (hda3) sullo stesso disco è montata su /home. Quindi se vi spostate in /home avete accesso ai file su hda3. Non dovrete mai preoccuparvi se questo ora e' D: o E: o ???. Si tratta sempre e solo di una struttura di directory ad albero.

Il problema del "file-system busy" (filesystem occupato)

Linux conserva temporaneamente in memoria le operazioni di lettura/scrittura che effettua. Lo potete notare quando avete dischi usb versione 1.1 e state accedendo ad un grosso file. La prima volta l'accesso è lento ma la seconda volta che aprite lo stesso file l'operazione è talmente veloce che la luce del vostro dispositivo usb neanche lampeggia.
Proprio per questa caratteristica non potete semplicemente rimuovere il disco che state usando. Dovete "smontarlo" (umount). Per i normali hard disk interni la cosa non costituisce un problema, ma lo può diventare per i cdrom ed i dischi USB.
Se ad esempio montate uno stick-usb sotto /mnt/usb e digitate il comando "cd /mnt/usb" allora bash inizia ad usare questo filesystem. Se tentate di smontarlo da una differente finestra di shell riceverete il messaggio "file system busy" e l'operazione di smontaggio fallira'. E' sufficiente che voi eseguiate un "cd" nuovamente per uscire dalla directory /mnt/usb, quindi potete smontare il drive. Il problema risiede nel fatto che talvolta ci si dimentica di chi sta usando il filesystem e che potrebbero esserci cosi' tante applicazioni aperte che diventa difficile trovare chi sta facendo fallire lo smontaggio.

Chiedetelo al vostro computer!
# fuser -m -u /mnt/usb
/mnt/usb:   1347c(root)  1348c(guido)  1349c(guido)  
Quello che ricevete dal comando fuser è una lista di processi che stanno ancora usando il filesystem in questione. Ora potete verificare con "ps auxw" di chi si tratta o potete semplicemente uccidere i processi. Fatto questo lo smontaggio con "umount" funzionera'.

Ma windows puo' farlo!?

Perche' non estrarre semplicemente lo stick-usb?, Be', i vecchi computers basati su win 3.1 o dos potevano essere semplicemente spenti. A quei tempi alcuni dei miei amici si lamentavano del fatto che in Linux occorreva una operazione di chiusura del sistema (shutdown) prima di spegnere il PC. Ma dall'avvento di win95 tutti hanno dovuto abituarsi a chiudere il sistema prima di spegnere il computer.

Anche Linux puo' farlo!

Ci sono comunque dei modi coi i quali anche con Linux si puo' semplicemente staccare il disco (ad esempio un disco usb). Mandrake Linux ha una funzione detta supermount e fornisce esattamente gli stessi risultati (o problemi) di windows. Ma non la raccomando perche' fonte di instabilita' e di file persi.

E' meglio usare gli mtools (http://mtools.linux.lu/). Gli mtools sono un gruppo di comandi per accedere a floppy drive, stick-usb ..., in pratica qualsiasi media rimovibile con un filesystem FAT e non avete bisogno di montare il filesistem
Ecco il trucco:
  1. Modificate /etc/mtools.conf ed aggiungete la seguente riga
    drive u: file="/dev/sda1" # o sda4; alcuni stick-usb hanno una partizione
                              # 4 creata come predefinita dalla casa costruttrice.
    


  2. Ora NON montate /dev/sda1. Invece digitate
    mdir u:
    per vedere cosa c'e' nello stick-usb.

    mcopy * u:
    per copiare tutti i files dalla cartella corrente allo stick-usb.

    mcopy u:\* .
    per copiare tutti i files dallo usb-stick alla cartella corrente (notate la \ prima del carattere jolly).

Molto facile da usare.

Consenti a chiunque di montare un filesystem

In genere dovete essere root per montare un filesystem. Per dispositivi come cdrom o stick-usb potreste concedere a qualunque utente il diritto di montarli. Tutto quello che dovete fare in questo caso e' aggiungere una riga come la seguente in /etc/fstab:
# dev     mount point    fs type   flags
/dev/sda1  /mnt/usb      auto      noauto,user 0 0
Questa riga fa si' che sda1 (la prima partizione sul primo disco scsi, le unita' di memoria usb sono mappate come dischi scsi) non debbano essere montate automaticamente in fase di avvio (noauto) e possono essere montate/smontate da chiunque (user). Il campo FS-Type è anche impostato ad auto cosi' che si possa montare una stick-usb formattata con vfat o ext2 ed il corretto filesystem sarà identificato automaticamente.

Portatili e nfs

Il filesystem di rete NFS (Network File System), e' veramente valido se volete avere dei backup centralizzati per le cartelle home di parecchi utenti. Tutto quello che dovete fare e' montare le cartelle home da un server centrale e tutti gli utenti avranno le loro cartelle individuali home disponibili su tutti i computer della rete. Le stesse impostazioni e preferenze e gli stessi dati ovunque. E' veramente ottimo.

Ma come gestire utenti mobili con i portatili? (nessun backup?)

Una volta che siete fuori dalla rete la vostra cartella home e' andata. Una soluzione r' sempre quella di copiare tutti i dati (rsync) ma la cosa puo' facilmente portare ad inconsistenze se non siete molto disciplinati, e spesso non serve tutto il contenuto della cartella home. Trovo che sia una buona soluzione quella di avere una seconda piccola cartella home con solo le impostazioni ed i dati di cui necessito mentre sono in viaggio.

Quando montate un filesystem (qualsiasi filesystem o disco incluso nfs) su di una cartella non vuota, il contenuto di questa cartella diventa invisibile e voi potete vedere il filesystem montato.

Ecco la soluzione: Create un punto di montaggio per le cartelle home (/home) ed automontate li' le diverse cartelle home quando il computer si trova in rete. Comunque prima di montare qualsiasi cosa create un link simbolico per l'utente che possiede il portatile verso una cartella home off-line.
/home/guido -> ../home_nonet/guido
Quando l'utente guido e' in rete allora egli vedra' la sua normale cartella home perchè il link simbolico e' nascosto. Quando egli sara' in viaggio allora vedra' /home_nonet/guido come sua cartella home (/home/guido).

Una soluzione molto elegante.

Conclusione

Costruire uno strato di astrazione per l'hardware ha sempre costituito uno degli scopi di Unix. Montare/smontare filesystem/dischi e' stato uno dei modi di raggiungere lo scopo. Una idea veramente moderna ed avanzata, sebbene Unix sia molto piu' vecchio di altri sistemi operativi su PC.