Scrivo qualche riga per chiarire un po' uno dei concetti che possono risultare ostici ai neofiti che si approcciano le prime volte al pinguino. Questa specie di howto non vuole essere esaustivo e assolutamente non vuole sostituire le relative pagine di man delle quali se ne incoraggia la lettura. Lo scopo e' solo quello di organizzare i concetti in maniera semplice e ordinata. Che i non newbie saltino questa lettura e impegnino il loro tempo in altro oppure, in caso contrario, commentino, correggano, integrino queste note. Have fun !
Introduzione.
Concetto fondamentale e caratterizzante di linux e' che su questo sistema operativo praticamente tutto viene gestito come file e quindi anche i dispositivi (devices) sono associati a dei files contenuti nella /dev (devices). Questi dispositivi possono essere di due tipi:
- a caratteri (esempio: console, porte seriali..)
- a blocchi (esempio: storage, cdrom...)
L'accesso ai dispositivi avviene quindi attraverso il relativo file che lo gestisce che deve essere aggiunto (o rimosso) all'albero delle directory; tali operazioni, note come montaggio e smontaggio sono permesse dai comandi mount e umount. Per eseguire queste operazioni occorre avere degli elementi noti che, in riferimento ai soli dispositivi a blocchi, sono:
- file associato al dispositivo cui vogliamo accedere (device)
- filesystem sul dispositivo (fs)
- punto di montaggio (mountpoint)
Ecco quindi come, nella pratica, questa operazione si traduce facilmente in un generico: mount device fs [opzioni] mountpoint
Devices comunemente usati.
I dispostivi comunemente usati sono dischi rigidi (ide, usb, sata), unita' cd/dvd e floppy.
Intendo per [n] un numero da 0 -> n mentre con [l] una lettera da a -> z.
I dispositivi collegati attraverso i controller ata(ide) vengono associati ai seguenti file: hda hdb hdc hdd rispettivamente master e slave del primo (hda hdb) e secondo (hdc hdd) canale.
I dispositivi collegati attraverso i controller scsi vengono solitamente associati ai file sd[l] (se dischi), st[n] (se unita' nastro), sr[n] o scd[n] (unita' cd scsi o ide emulate scsi) oppure sg[n] in alcuni strani casi.
I dispositivi collegati attraverso il controller floppy vengono associati ai file fd[n].
Infine, dispositivi di storage sata e usb sono solitamente associati ai file sd[l].
In alcune distribuzioni si possono anche trovare collegamenti simbolici a dispositivi come floppy o cdrom, ma abituiamoci all'associazione normale per evitare di perderci in un bicchiere di acqua in caso di cambiamenti di configurazione software o hardware..
Infine, eventuali partizioni sul dispostivo vengono numerate progressivamente partendo da 1.
Una piccola nota senza approfondimenti: la gestione automatica dei file di dispositivo viene eseguita da devfs (nei kernel 2.4 in kernelspace) o da udev (nei kernel 2.6 in userspace), la creazione manuale mediante mknod.
File system comunemente usati.
I fs comunemente usati sono, in chiave sintattica:
ext2, ext3 ------ fs nativo di linux (2) e versione journaled (3)
iso9660 ------ fs di dispositivi quali cdrom
msdos ------ fs usato su sistemi ms fino a win95sr1 ovvero fat a 16bit
reiserfs ------ fs sviluppato da Hans Reiser e dal gruppo Namesys
vfat ------ fs usato su sistemi ms ovvero fat a 32 bit
L'iso9660 e' il fs solitamente usato su cd/dvd. Gli altri si commentano da soli. L'ntfs (fs usato su sistemi ms nt (se non usato il fat32) non l'ho incluso volutamente per questioni che esulano dallo scopo di questa semplice guida.
Punto di montaggio.
Consiste nella posizione all'interno dell'albero di directory ove avremo accesso al dispositivo hardware mediante il file ad esso associato, ovvero la directory attraverso la quale avremo accesso di lettura e scrittura (se consentito). Tale posizione e' a libera scelta dell'utente, sebbene l'albero delle directory preveda generalmente una cartella /mnt che funge da contenitore di sottocartelle dedicate come punti di montaggio presenti di default o create dall'utente.
Esempi di mount.
a) Voglio accedere alla seconda partizione di un mio disco fisso collegato come master al secondo canale ide dalla cartella /mnt/archivio, sapendo che il fs usato e' il reiser: mount -t reiserfs /dev/hdc2 /mnt/archivio
b) voglio accedere al mio cdrom collegato come slave al primo canale ide dalla cartella /mnt/cdrom: mount -t iso9660 /dev/hdb /mnt/cdrom
Gestione del mount all'avvio del sistema.
Sebbene il montaggio di un dispositivo sia un'operazione molto semplice e che richiede pochi secondi, e' molto comodo fare in modo che alcuni dispositivi vengano montati dal sistema in maniera direttamente in fase di boot. Per fare questo, il sistema deve sapere cosa fare, come montare, per chi montare e altre info che legge da un file di configurazione presente in /etc, ovvero il fstab (file system table).
Questo file e' strutturato in righe, una per dispositivo, costituite da 6 campi che, nell'ordine, indicano al sistema: dispositivo punto_di_montaggio fs opzioni opzione_dump opzione_check
I primi tre campi li abbiamo appena visti. Vediamo ora gli altri tre.
Opzioni di mount.
async ----- tutte le operazioni di input/output vengono eseguite in modo asincrono
atime ----- aggiorna la data di accesso all'inode ad ogni accesso
auto ----- il fs puo' essere montato passando il flag -a a 'mount'; solo i fs che possiedono questa opzione vengono montati in automatico al boot
defaults ----- usa le opzioni di defaults, ovvero: rw, suid, dev, exec, auto, nouser, async
dev ----- interpreta i devices speciali presenti nel fs
exec ----- permette di eseguire i binari
_netdev ----- il fs risiede su un device disponibile in rete; evita quindi che il sistema cerchi di montarlo prima che sia disponibile la rete
noatime ----- non aggiorna la data di accesso all'inode ad ogni accesso; aumenta quindi la velocita' di accesso ai dati
noauto ----- il fs non puo' essere montato passando il flag -a a 'mount'; il fs non viene montato in automatico al boot
nodev ----- non interpreta i devices speciali presenti nel fs
noexec ----- non permette di eseguire i binari
nosuid ----- i bit di setuid e setgid non vengono presi in considerazione
nouser ----- impedisce al normale utente di montare il fs
remount ----- cerca di rieseguire il mount di un fs gia' montato; si usa per modoficare le opzioni dello stesso
ro ----- monta il fs in modalita' read-only (sola lettura)
rw ----- monta il fs in modalita' read-write (lettura e scrittura)
suid ----- i bit di setuid e setgid vengono presi in considerazione
sync ----- tutte le operazioni di input/output vengono eseguite in modalita' sincrona
dirsync ----- tutti gli aggiornamenti delle directory vengono eseguiti in modalita' sincrona
user ----- permette ad un utente di montare il fs; il nome dell'utente e' scritto in mtab di modo che egli possa smontare il fs. Questa opzione implica le opzioni noexec, nosuid e nodev a meno che diversamente impostato attraverso exec, suid e dev
users ----- permette a tutti gli utenti di montare e smontare il fs. Questa opzioni implica le opzioni noexec, nosuid e nodev a meno che diversamente impostato attraverso exec, suid e dev
Opzioni dump e check nel mount di boot.
L'opzione dump e' il valore che viene passato al comando dump, il quale effettua backup di dispositivi con fs ext2. Si imposta 1 (vero) per eseguire il comando oppure 0 (falso) per non usare questa opzione.
L'opzione check, invece, indica la precedenza nell'operazione di controllo dell'integrita' (fsck) del fs all'avvio, i cui valori possono essere:
1 - controlla per primo
2 - controlla in seguito
0 - non eseguire il check
Esempio di fstab.
Questo e' uno dei miei fstab.
# ------------
#|SISTEMA|
# ------------
/dev/hda5 / ext3 defaults 1 1
/dev/hda1 none swap sw 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
# -----------------
#|DISPOSITIVI|
# ------------------
/dev/fd0 /mnt/floppy auto noauto,users 0 0
/dev/hdc /mnt/dvdrom iso9660 noauto,users,ro 0 0
/dev/hdd /mnt/cdrecorder iso9660 noauto,users,rw 0 0
/dev/hdb /mnt/dvdrecorder iso9660 noauto,users,rw 0 0
# -------------
#|STORAGE|
# -------------
/dev/sdb1 /home/nesquik/dati1 ext3 auto,owner 0 2 #sata
/dev/sdc1 /home/nesquik/dati2 ext3 auto,owner 0 2 #usb1
/dev/sdd1 /home/nesquik/divx ext3 noauto,owner 0 0 #usb2
/dev/sda1 /home/nesquik/backup ext3 auto,owner 0 2 #raid
/dev/hda6 /home/nesquik/download ext3 auto,owner 0 0
Potete dedurre la comodita' del mount in fase di boot per gli storage che uso.. se ogni volta dovessi montare di volta in volta ogni singolo dispositivo sarebbe un po' una rottura di palle..
Come potete poi notare per alcuni devices viene passato il flag 'noauto', ovvero viene esplicitamente voluto che non siano montati in automatico all'avvio (solitamente usato per dispositivi cd e floppy poiche' non e' detto che in fase di boot sia presente un disco nel drive). A che serve allora dichiararli nel fstab ? Per poter cosi' utilizzare la sintassi di montaggio abbreviata quale mount punto_di_mount senza passare fs, opzioni e device dato che sono gia' dichiarati nel fstab.
Per quanto riguarda il fs proc e' molto utile montarlo (se abilitato il supporto nel kernel) per poter accedere a preziose informazioni sui processi in esecuzione (oltre che sull'hw e sullo stato del sistema) che vengono generate on the fly dal kernel e contenute in file virtuali all'interno della directory /proc, cartella che, nonostante l'output di un ls -l, non occupa spazio fisico sul disco.
Sul discorso del tmpfs la faccenda si complica un po' e lascio stare, sappiate solo che serve per udev; in linea generale, non modificate le eventuali righe relative a swap, proc, tmp, tmpfs, usbfs o devpts che vengono inserite nel fstab in fase di installazione della vostra distro del cuore a meno che non sappiate esattamente quello che fate.
Notate infine come i commenti possono essere aggiunti se preceduti dal carattere #.
Smontaggio dei dispositivi.
Per smontare un dispositivo montato in precedenza (manualmente o dal sistema in fase di avvio) basta seguire la semplice sintassi: umount punto_di_montaggio oppure umount device_montato.
Esempio: umount /home/nesquik/dati1 oppure umount /dev/sdb1. Attenzione pero': un dispositivo puo' essere smontato qualora il suo punto di montaggio non sia aperto (in console o in un qualsivoglia file manager) e qualora il dispositivo non sia interessato da nessun processo in esecuzione.
Prestate inoltre attenzione a smontare un cdrom prima di tentare di aprire il cassettino del lettore che se il dispositivo e' montato non viene giustamente liberato perche' e' ancora legato all'albero delle directory.
In ultima nota, soprattutto per quanto riguarda l'uso di storage esterni (chiavi o dischi usb) e' buona norma smontare sempre un dispositivo quando non viene piu' utilizzato, per diverse buone ragioni: si ci tutela un minimo dalla possibilita' di perdita di dati nel caso di riavvii del sistema non previsti (ad es. salta la corrente) e ci si assicura che i dati ivi salvati vengano effettivamente scritti sul dispositivo (che, se non diversamente esplicitato, viene solitamente montato in maniera asincrona) nel caso in cui non vi siate tutelati con un sync da console.
Note conclusive.
Sicuramente ho tralasciato molti punti e molti approfondimenti; questo post e' da intendersi come appunti di base sull'accesso ai dispositivi in gnu/linux. Per maggiori approfondimenti fate riferimento alle pagine di manuale mount, fstab, umount, mknod e ln.
Introduzione.
Concetto fondamentale e caratterizzante di linux e' che su questo sistema operativo praticamente tutto viene gestito come file e quindi anche i dispositivi (devices) sono associati a dei files contenuti nella /dev (devices). Questi dispositivi possono essere di due tipi:
- a caratteri (esempio: console, porte seriali..)
- a blocchi (esempio: storage, cdrom...)
L'accesso ai dispositivi avviene quindi attraverso il relativo file che lo gestisce che deve essere aggiunto (o rimosso) all'albero delle directory; tali operazioni, note come montaggio e smontaggio sono permesse dai comandi mount e umount. Per eseguire queste operazioni occorre avere degli elementi noti che, in riferimento ai soli dispositivi a blocchi, sono:
- file associato al dispositivo cui vogliamo accedere (device)
- filesystem sul dispositivo (fs)
- punto di montaggio (mountpoint)
Ecco quindi come, nella pratica, questa operazione si traduce facilmente in un generico: mount device fs [opzioni] mountpoint
Devices comunemente usati.
I dispostivi comunemente usati sono dischi rigidi (ide, usb, sata), unita' cd/dvd e floppy.
Intendo per [n] un numero da 0 -> n mentre con [l] una lettera da a -> z.
I dispositivi collegati attraverso i controller ata(ide) vengono associati ai seguenti file: hda hdb hdc hdd rispettivamente master e slave del primo (hda hdb) e secondo (hdc hdd) canale.
I dispositivi collegati attraverso i controller scsi vengono solitamente associati ai file sd[l] (se dischi), st[n] (se unita' nastro), sr[n] o scd[n] (unita' cd scsi o ide emulate scsi) oppure sg[n] in alcuni strani casi.
I dispositivi collegati attraverso il controller floppy vengono associati ai file fd[n].
Infine, dispositivi di storage sata e usb sono solitamente associati ai file sd[l].
In alcune distribuzioni si possono anche trovare collegamenti simbolici a dispositivi come floppy o cdrom, ma abituiamoci all'associazione normale per evitare di perderci in un bicchiere di acqua in caso di cambiamenti di configurazione software o hardware..
Infine, eventuali partizioni sul dispostivo vengono numerate progressivamente partendo da 1.
Una piccola nota senza approfondimenti: la gestione automatica dei file di dispositivo viene eseguita da devfs (nei kernel 2.4 in kernelspace) o da udev (nei kernel 2.6 in userspace), la creazione manuale mediante mknod.
File system comunemente usati.
I fs comunemente usati sono, in chiave sintattica:
ext2, ext3 ------ fs nativo di linux (2) e versione journaled (3)
iso9660 ------ fs di dispositivi quali cdrom
msdos ------ fs usato su sistemi ms fino a win95sr1 ovvero fat a 16bit
reiserfs ------ fs sviluppato da Hans Reiser e dal gruppo Namesys
vfat ------ fs usato su sistemi ms ovvero fat a 32 bit
L'iso9660 e' il fs solitamente usato su cd/dvd. Gli altri si commentano da soli. L'ntfs (fs usato su sistemi ms nt (se non usato il fat32) non l'ho incluso volutamente per questioni che esulano dallo scopo di questa semplice guida.
Punto di montaggio.
Consiste nella posizione all'interno dell'albero di directory ove avremo accesso al dispositivo hardware mediante il file ad esso associato, ovvero la directory attraverso la quale avremo accesso di lettura e scrittura (se consentito). Tale posizione e' a libera scelta dell'utente, sebbene l'albero delle directory preveda generalmente una cartella /mnt che funge da contenitore di sottocartelle dedicate come punti di montaggio presenti di default o create dall'utente.
Esempi di mount.
a) Voglio accedere alla seconda partizione di un mio disco fisso collegato come master al secondo canale ide dalla cartella /mnt/archivio, sapendo che il fs usato e' il reiser: mount -t reiserfs /dev/hdc2 /mnt/archivio
b) voglio accedere al mio cdrom collegato come slave al primo canale ide dalla cartella /mnt/cdrom: mount -t iso9660 /dev/hdb /mnt/cdrom
Gestione del mount all'avvio del sistema.
Sebbene il montaggio di un dispositivo sia un'operazione molto semplice e che richiede pochi secondi, e' molto comodo fare in modo che alcuni dispositivi vengano montati dal sistema in maniera direttamente in fase di boot. Per fare questo, il sistema deve sapere cosa fare, come montare, per chi montare e altre info che legge da un file di configurazione presente in /etc, ovvero il fstab (file system table).
Questo file e' strutturato in righe, una per dispositivo, costituite da 6 campi che, nell'ordine, indicano al sistema: dispositivo punto_di_montaggio fs opzioni opzione_dump opzione_check
I primi tre campi li abbiamo appena visti. Vediamo ora gli altri tre.
Opzioni di mount.
async ----- tutte le operazioni di input/output vengono eseguite in modo asincrono
atime ----- aggiorna la data di accesso all'inode ad ogni accesso
auto ----- il fs puo' essere montato passando il flag -a a 'mount'; solo i fs che possiedono questa opzione vengono montati in automatico al boot
defaults ----- usa le opzioni di defaults, ovvero: rw, suid, dev, exec, auto, nouser, async
dev ----- interpreta i devices speciali presenti nel fs
exec ----- permette di eseguire i binari
_netdev ----- il fs risiede su un device disponibile in rete; evita quindi che il sistema cerchi di montarlo prima che sia disponibile la rete
noatime ----- non aggiorna la data di accesso all'inode ad ogni accesso; aumenta quindi la velocita' di accesso ai dati
noauto ----- il fs non puo' essere montato passando il flag -a a 'mount'; il fs non viene montato in automatico al boot
nodev ----- non interpreta i devices speciali presenti nel fs
noexec ----- non permette di eseguire i binari
nosuid ----- i bit di setuid e setgid non vengono presi in considerazione
nouser ----- impedisce al normale utente di montare il fs
remount ----- cerca di rieseguire il mount di un fs gia' montato; si usa per modoficare le opzioni dello stesso
ro ----- monta il fs in modalita' read-only (sola lettura)
rw ----- monta il fs in modalita' read-write (lettura e scrittura)
suid ----- i bit di setuid e setgid vengono presi in considerazione
sync ----- tutte le operazioni di input/output vengono eseguite in modalita' sincrona
dirsync ----- tutti gli aggiornamenti delle directory vengono eseguiti in modalita' sincrona
user ----- permette ad un utente di montare il fs; il nome dell'utente e' scritto in mtab di modo che egli possa smontare il fs. Questa opzione implica le opzioni noexec, nosuid e nodev a meno che diversamente impostato attraverso exec, suid e dev
users ----- permette a tutti gli utenti di montare e smontare il fs. Questa opzioni implica le opzioni noexec, nosuid e nodev a meno che diversamente impostato attraverso exec, suid e dev
Opzioni dump e check nel mount di boot.
L'opzione dump e' il valore che viene passato al comando dump, il quale effettua backup di dispositivi con fs ext2. Si imposta 1 (vero) per eseguire il comando oppure 0 (falso) per non usare questa opzione.
L'opzione check, invece, indica la precedenza nell'operazione di controllo dell'integrita' (fsck) del fs all'avvio, i cui valori possono essere:
1 - controlla per primo
2 - controlla in seguito
0 - non eseguire il check
Esempio di fstab.
Questo e' uno dei miei fstab.
# ------------
#|SISTEMA|
# ------------
/dev/hda5 / ext3 defaults 1 1
/dev/hda1 none swap sw 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
# -----------------
#|DISPOSITIVI|
# ------------------
/dev/fd0 /mnt/floppy auto noauto,users 0 0
/dev/hdc /mnt/dvdrom iso9660 noauto,users,ro 0 0
/dev/hdd /mnt/cdrecorder iso9660 noauto,users,rw 0 0
/dev/hdb /mnt/dvdrecorder iso9660 noauto,users,rw 0 0
# -------------
#|STORAGE|
# -------------
/dev/sdb1 /home/nesquik/dati1 ext3 auto,owner 0 2 #sata
/dev/sdc1 /home/nesquik/dati2 ext3 auto,owner 0 2 #usb1
/dev/sdd1 /home/nesquik/divx ext3 noauto,owner 0 0 #usb2
/dev/sda1 /home/nesquik/backup ext3 auto,owner 0 2 #raid
/dev/hda6 /home/nesquik/download ext3 auto,owner 0 0
Potete dedurre la comodita' del mount in fase di boot per gli storage che uso.. se ogni volta dovessi montare di volta in volta ogni singolo dispositivo sarebbe un po' una rottura di palle..
Come potete poi notare per alcuni devices viene passato il flag 'noauto', ovvero viene esplicitamente voluto che non siano montati in automatico all'avvio (solitamente usato per dispositivi cd e floppy poiche' non e' detto che in fase di boot sia presente un disco nel drive). A che serve allora dichiararli nel fstab ? Per poter cosi' utilizzare la sintassi di montaggio abbreviata quale mount punto_di_mount senza passare fs, opzioni e device dato che sono gia' dichiarati nel fstab.
Per quanto riguarda il fs proc e' molto utile montarlo (se abilitato il supporto nel kernel) per poter accedere a preziose informazioni sui processi in esecuzione (oltre che sull'hw e sullo stato del sistema) che vengono generate on the fly dal kernel e contenute in file virtuali all'interno della directory /proc, cartella che, nonostante l'output di un ls -l, non occupa spazio fisico sul disco.
Sul discorso del tmpfs la faccenda si complica un po' e lascio stare, sappiate solo che serve per udev; in linea generale, non modificate le eventuali righe relative a swap, proc, tmp, tmpfs, usbfs o devpts che vengono inserite nel fstab in fase di installazione della vostra distro del cuore a meno che non sappiate esattamente quello che fate.
Notate infine come i commenti possono essere aggiunti se preceduti dal carattere #.
Smontaggio dei dispositivi.
Per smontare un dispositivo montato in precedenza (manualmente o dal sistema in fase di avvio) basta seguire la semplice sintassi: umount punto_di_montaggio oppure umount device_montato.
Esempio: umount /home/nesquik/dati1 oppure umount /dev/sdb1. Attenzione pero': un dispositivo puo' essere smontato qualora il suo punto di montaggio non sia aperto (in console o in un qualsivoglia file manager) e qualora il dispositivo non sia interessato da nessun processo in esecuzione.
Prestate inoltre attenzione a smontare un cdrom prima di tentare di aprire il cassettino del lettore che se il dispositivo e' montato non viene giustamente liberato perche' e' ancora legato all'albero delle directory.
In ultima nota, soprattutto per quanto riguarda l'uso di storage esterni (chiavi o dischi usb) e' buona norma smontare sempre un dispositivo quando non viene piu' utilizzato, per diverse buone ragioni: si ci tutela un minimo dalla possibilita' di perdita di dati nel caso di riavvii del sistema non previsti (ad es. salta la corrente) e ci si assicura che i dati ivi salvati vengano effettivamente scritti sul dispositivo (che, se non diversamente esplicitato, viene solitamente montato in maniera asincrona) nel caso in cui non vi siate tutelati con un sync da console.
Note conclusive.
Sicuramente ho tralasciato molti punti e molti approfondimenti; questo post e' da intendersi come appunti di base sull'accesso ai dispositivi in gnu/linux. Per maggiori approfondimenti fate riferimento alle pagine di manuale mount, fstab, umount, mknod e ln.
Commenta