O que é o / etc / mtab no Linux?

Respostas:

51
% arquivo / etc / mtab
/ etc / mtab: link simbólico para ../proc/self/mounts
% arquivo / proc / montagens
/ proc / mounts: link simbólico para self / mounts
%

/etc/mtabé um mecanismo de compatibilidade. Décadas atrás, o Unix não tinha uma chamada de sistema para ler as informações de montagem existentes. Em vez disso, esperava-se que os programas que montassem sistemas de arquivos mantivessem cooperativa e voluntariamente uma tabela /etc/mtabdo que foi montado onde.

Por razões óbvias, este não era um mecanismo ideal.

O Linux ganhou a noção de "procfs" e uma das coisas que ganhou foi uma versão dessa tabela mantida pelo kernel, na forma de um mountsarquivo pseudo-regular. A "chamada do sistema" para ler as informações de montagem do kernel tornou-se uma sequência de abrir-ler-fechar nesse arquivo, seguida pela análise do resultado da forma legível por humanos para legível por máquina (algo que possui algumas capturas sutis, como você pode ver nos relatórios de erros de pouco mais de duas semanas atrás).

/etc/mtabportanto, tornou-se popularmente um link simbólico /proc/mounts, permitindo que os programas que instalaram esse nome continuem lendo uma tabela de montagem desse arquivo, para a qual os programas que montaram e desmontaram sistemas de arquivos não precisam mais fazer nada explicitamente para se manterem atualizados. (Alguns deles ainda o tornarão /etc/mtabum arquivo regular gravável. E existem alguns casos de esquina em que as informações normalizadas em mountsque faltam todas as coisas que não são do kernel não são exatamente o que é necessário; embora elas não superem os problemas gerais com /etc/mtab.)

Atualmente, cada processo pode ter sua própria visão individual do que está montado e, como conseqüência, agora existem mountsarquivos individuais para cada processo nos procfs, sendo que a própria tabela de cada processo pode ser acessada através do selflink simbólico como self/mounts, e agora também/proc/mounts é uma compatibilidade mecanismo. (Curiosamente, nem o processo nem o formato de são documentados no documento atual do Linux, embora o arquivo pseudo-regular semelhante seja.)mountsmountsmountinfo

O SunOS / Solaris possui um mecanismo semelhante. Na /etc/mnttabverdade, o arquivo é um sistema de arquivos de arquivo único e, além de ler a tabela, por meio de um descritor de arquivo aberto para esse arquivo, com a read()chamada do sistema, é possível observar alterações no ponto de montagem poll()e obter várias informações adicionais ioctl().

No HP-UX, /etc/mnttabtambém é o nome do arquivo, mas a partir da versão 11 ainda era um arquivo comum cujo conteúdo era mantido de forma cooperativa pelos programas utilitários do sistema.

O AIX não exporta uma tabela de texto legível por humanos que os programas precisam analisar e não há arquivo equivalente. Os BSDs, da mesma forma, têm chamadas de sistema completas, getfsstat()no FreeBSD e no OpenBSD, para programas para obter a tabela de montagem do kernel na forma legível por máquina sem organizá-la através de uma forma intermediária legível por humanos.

Leitura adicional

JdeBP
fonte
Em complemento ao meu comentário na pergunta aqui está o mtab(5)dos velhos tempos: man.cat-v.org/unix_8th/5/mtab .
Weijun Zhou 23/04
2
não apenas /proc/mounts, mas /proc/self/mountsé um mecanismo de compatibilidade agora; está apenas mostrando um subconjunto das informações disponíveis em /proc/self/mountinfo. O formato de /proc/self/mountsé documentado proc(5)como idêntico afstab(5)
mosvy
embora seja certo que o fstab (5) só fala sobre os espaços serem substituídos por escapes octais, enquanto são espaços, guias, novas linhas e barras invertidas
mosvy 24/04
Conheço pseudo arquivos e arquivos regulares, mas o que é um arquivo pseudo-regular?
gerrit 24/04
@gerrit é um arquivo regular que tem tamanho 0, mas ainda contém dados ;-)
mosvy 24/04
12

De acordo com man mount:

Os programas montam e montam tradicionalmente mantinha uma lista de sistemas de arquivos atualmente montados no arquivo / etc / mtab. Esse arquivo mtab real ainda é suportado, mas nos sistemas Linux atuais, é melhor transformá-lo em um link simbólico para / proc / mounts, porque um arquivo mtab regular mantido no espaço do usuário não pode funcionar de forma confiável com namespaces, contêineres e outros recursos avançados do Linux.

Na montagem sem gravação em /etc/mtab:

-n, --no-mtab

Monte sem escrever em / etc / mtab. Isso é necessário, por exemplo, quando / etc estiver em um sistema de arquivos somente leitura.

Muitas outras nuances são fornecidas na página de manual.

Christopher
fonte