# Fstab

Il fstab (/etc/fstab) (da File System TABle, tabella dei file system) è, nei sistemi Unix e Unix-like (come ad es. GNU/Linux e FreeBSD) un file di configurazione che si trova all'interno della cartella /etc (secondo lo standard FHS), di proprietà dell'utente root, elencando tutti i dischi e le partizioni disponibili e come essi debbano essere montati o comunque preparati per integrarsi nel file system principale. È tuttora usato per la configurazione di sistema, ma è solitamente affiancato dal montaggio automatico dei dischi da parte del sistema.
È solitamente usato dal comando mount che legge il file per determinare le opzioni da utilizzare per il montaggio di una determinata periferica. In alcune versioni di Unix il file si chiama diversamente: in Solaris, ad esempio, si trova come /etc/vfstab.

## Utilizzo moderno

Il fstab viene letto dai programmi, e non è mantenuto automaticamente (è invece scritto manualmente dall'amministratore di sistema o dalla routine di installazione). Tuttavia, alcuni strumenti di amministrazione possono manipolare automaticamente il fstab. Vi sono anche degli editor grafici, come l'utility Kfstab, disponibile per KDE.
I sistemi Linux moderni usano udev come automounter per montare i device a caldo invece di riscrivere al volo il fstab. I programmi come pmount permettono agli utenti non root di montare e smontare i filesystem senza una corrispondente voce nel fstab; le versioni tradizionali di Unix hanno sempre permesso agli utenti con sufficienti privilegi di montare o smontare i device senza una voce fstab.

## Esempio

Un esempio di fstab, in base allo standard Linux, è:
Si vede quindi che ogni linea è composta da 6 campi:
* il dispositivo che contiene un file system (tra cui il file system virtuale proc che permette di riassumere le informazioni generali del sistema)
* la directory, punto di montaggio di mount, da cui sarà possibile accedere al contenuto dei dispositivi (da notare che per la swap non è richiesto il mount point)
* il tipo di file system (i file system supportati si possono vedere nella man page di fstab)
* le opzioni che regolano l'accesso al dispositivo (le opzioni si possono vedere nella man page di mount)
* indica se il dispositivo deve essere usato dal comando dump per farne dei backup (0 disattivato, 1 attivato), l'opzione è obsoleta
* indica se e in che ordine il dispositivo deve essere controllato dal comando fsck, nell'ordine da 1 in poi (0 indica non controllare)

## Opzioni comuni a tutti i filesystem

Siccome i filesystem in /etc/fstab saranno montati utilizzando mount, non sorprende che il campo delle opzioni contenga semplicemente una lista di opzioni separate da virgole, che saranno passate direttamente al comando mount quando si tenterà di montare il filesystem.
Le opzioni comuni a tutti i tipi di filesystem sono:

### auto / noauto

    Con l'opzione auto, il device sarà montato automaticamente al boot o su comando esplicito. auto è la scelta di default. Se non si vuole che il device sia montato automaticamente, si deve usare l'opzione noauto. Con noauto, il device può essere montato soltanto con un comando esplicito.

### dev / nodev

    Interpreta i device speciali presenti nel filesystem.

### exec / noexec

    exec permette di eseguire i file binari che sono sulla partizione, mentre noexec non lo permette. noexec può essere utile per un partizione che non contiene binari o che contiene binari incompatibili con il proprio sistema.

### ro / rw

    Monta il filesystem rispettivamente in modalità di sola lettura o di lettura e scrittura. Definire esplicitamente un filesystem come rw può alleviare alcuni problemi nei filesystem che di default sono di sola lettura, come i floppy o le partizioni NTFS.

### sync / async

    Tutte le operazioni di input e output vengono eseguite in modo sincrono, oppure asincrono.

### suid / nosuid

    I bit di setuid e setgid vengono o non vengono presi in considerazione.

### user / users / nouser

    L'opzione user permette ad ogni utente comune di montare e smontare il filesystem. Implica le opzioni: noexec, nosuid, nodev a meno di opzioni diverse.

### defaults

    Usa le opzioni di default: rw, suid, dev, exec, auto, nouser, async.

### owner (Linux-specifico)

    Consente il montaggio al proprietario del device.

### atime / noatime / relatime / strictatime (Linux-specifici)

    La struttura stat di Unix registra l'orario dell'ultimo accesso ai file (atime), quello dell'ultima modifica (mtime) e quello dell'ultimo cambiamento di stato (ctime). Il risultato è che atime viene scritto ogni volta che un file è letto; ciò è stato pesantemente criticato perché causa problemi di performance e usura. Tuttavia, atime è utilizzato da alcune applicazioni ed è voluto da alcuni utenti, e dunque è configurabile come atime (si aggiorna ad ogni accesso), noatime (non si aggiorna), o (in Linux) relatime (aggiorna atime se è anteriore a mtime). In Linux 2.6.29, atime era di default; nella versione 2.6.30 (9 giugno 2009), relatime è la scelta di default.

## Opzioni specifiche per alcuni filesystem

Ci sono molte opzioni specifiche per ogni filesystem supportate da mount. Di seguito si elencano alcune di quelle usate più frequentemente. La lista completa delle opzioni si può trovare nella documentazione di mount. Notare che queste opzioni si riferiscono a Linux; i sistemi UNIX-like tradizionali hanno opzioni simili ma con una sintassi leggermente diversa.

### ext2
#### check={none, normal, strict}

    Imposta il tipo di controllo da parte di fsck.

#### debug

    Stampa le informazioni di debug ad ogni montaggio.

#### sb=n

    n diventa il blocco da usare come superblocco per il filesystem.

### fat
#### check={r[elaxed], n[ormal], s[trict]}

    Non è la stessa cosa di ext2; riguarda invece le estensioni di file consentite. Vedere mount(8).

#### conv={b[inary], t[ext], a[uto]}

    Esegue automaticamente le conversioni DOS ⟷ UNIX dei file di testo. Vedere mount(8).

#### uid=n, gid=n

    Imposta l'identificatore utente, uid, e quello del gruppo, gid, per tutti i file del filesystem.

#### umask=nnn, dmask=nnn, fmask=nnn

    Imposta la maschera di creazione dei file e directory umask, quella per le sole directory, dmask e quella per i soli file, fmask.

### iso9660
#### norock

    Disabilita le estensioni Rock Ridge.
Informazioni più dettagliate sul file fstab possono trovarsi nella pagina man del fstab di Linux; per altri sistemi, consultare la relativa documentazione.

### nfs
#### addr=ip

    'ip' sta per l'indirizzo IP.

## Montare tutti i filesystem

Questo comando monterà tutti i filesystem non ancora montati presenti in fstab; è usato nell'avvio del sistema durante il boot. Questo comando ignorerà tutte le voci contenenti l'opzione "noauto".
I file system già montati si trovano invece nel file /etc/mtab.