Che cos'è / etc / mtab in Linux?


Risposte:


51
% file / etc / mtab
/ etc / mtab: link simbolico a ../proc/self/mounts
% file / proc / mounts
/ proc / mounts: collegamento simbolico a self / mounts
%

/etc/mtabè un meccanismo di compatibilità. Decenni fa, Unix non aveva una chiamata di sistema per leggere le informazioni di mount esistenti. Invece, i programmi che montavano filesystem dovevano mantenere una collaborazione e volontariamente una tabella /etc/mtabdi ciò che era montato dove.

Per ovvie ragioni, questo non era un meccanismo ideale.

Linux ottenne la nozione di "procfs" e una delle cose che ottenne fu una versione di questa tabella gestita dal kernel, sotto forma di un mountsfile pseudo-regolare. La "chiamata di sistema" per leggere le informazioni di mount dal kernel è diventata una sequenza open-read-close contro quel file, seguita dall'analisi del risultato dalla forma leggibile dall'uomo a quella leggibile dalla macchina (qualcosa che ha alcune catture sottili, mentre tu può vedere dalle segnalazioni di bug di poco più di due settimane fa).

/etc/mtabcosì è diventato popolarmente un collegamento simbolico /proc/mounts, consentendo ai programmi che avevano cablato quel nome di continuare a leggere una tabella di mount da quel file, che i programmi che montavano e smontavano i filesystem non dovevano più fare esplicitamente qualsiasi cosa per aggiornarsi. (Alcuni di loro continueranno comunque, se /etc/mtabsi rivelerà un file normale scrivibile. E ci sono alcuni casi angolari in cui le informazioni normalizzate in mountscui mancano tutte le cose non kernel non sono esattamente ciò di cui abbiamo bisogno; anche se non superano i problemi generali con /etc/mtab.)

Ogni processo può oggigiorno avere una propria visione individuale di ciò che è montato, e di conseguenza ora ci sono singoli mountsfile per ciascun processo nei procfs, la tabella di ogni processo è accessibile ad esso tramite il selfcollegamento simbolico come self/mounts, ed /proc/mountsè anche ora una compatibilità meccanismo. (È interessante notare che né per processo mountsné il formato di mountssono documentati nell'attuale documento Linux, sebbene lo sia mountinfoun file pseudo-regolare simile .)

SunOS / Solaris ha un meccanismo simile. Il /etc/mnttabfile è in realtà un file system a file singolo e, oltre alla lettura della tabella, tramite un descrittore di file aperto a quel file, con la read()chiamata di sistema, è possibile controllare le modifiche del punto di montaggio con poll()e ottenere varie ulteriori informazioni con ioctl().

In HP-UX, /etc/mnttabè anche il nome del file, ma a partire dalla versione 11 era ancora un file normale il cui contenuto era gestito in modo collaborativo dai programmi di utilità di sistema.

AIX non esporta una tabella di testo leggibile dall'uomo che i programmi devono analizzare e non esiste un file equivalente. I BSD, allo stesso modo, hanno chiamate di sistema a tutti gli effetti, getfsstat()su FreeBSD e OpenBSD, per i programmi per ottenere la tabella di mount dal kernel in forma leggibile dalla macchina senza eseguirne il marshalling attraverso una forma intermedia leggibile dall'uomo.

Ulteriori letture


A complemento del mio commento alla domanda, ecco mtab(5)i vecchi tempi: man.cat-v.org/unix_8th/5/mtab .
Weijun Zhou,

2
non solo /proc/mounts, ma /proc/self/mountsè esso stesso un meccanismo di compatibilità ora; mostra solo un sottoinsieme delle informazioni disponibili in /proc/self/mountinfo. Il formato di /proc/self/mountsè documentato proc(5)come identico afstab(5)
mosvy

anche se è vero, fstab (5) racconta solo che gli spazi sono stati sostituiti da fughe ottali, mentre sono spazi, tabulazioni, newline e barre rovesciate
mosvy

Conosco file pseudo e file regolari, ma che cos'è un file pseudo regolare?
Gerrit,

@gerrit è un file normale che ha dimensioni 0 ma contiene ancora dati ;-)
mosvy

12

Secondo man mount:

I programmi mount e umount mantengono tradizionalmente un elenco dei filesystem attualmente montati nel file / etc / mtab. Questo vero file mtab è ancora supportato, ma sugli attuali sistemi Linux è meglio renderlo un link simbolico a / proc / monta, perché un normale file mtab gestito nello spazio utente non può funzionare in modo affidabile con spazi dei nomi, contenitori e altre funzionalità Linux avanzate.

Al montaggio senza registrazione in /etc/mtab:

-n, --no-mtab

Montare senza scrivere in / etc / mtab. Ciò è necessario ad esempio quando / etc è su un filesystem di sola lettura.

Molte altre sfumature sono riportate nella pagina del manuale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.