Como obter a lista completa e exata de sistemas de arquivos montados no Linux?

150

Eu costumo usar mountpara verificar quais sistemas de arquivos estão montados. Eu também sei que há alguma conexão entre mounte /etc/mtabmas não tenho certeza sobre os detalhes. Depois de ler Como verificar se / proc / está montado , fico mais confuso.

Minha pergunta é: Como obter a lista mais precisa de sistemas de arquivos montados? Devo apenas usar mountou ler o conteúdo /etc/mtabou o conteúdo dele /proc/mounts? O que daria o resultado mais confiável?

xanpeng
fonte
3
Você também deve ler a resposta aceita para esta pergunta: unix.stackexchange.com/questions/12040/…
nozimica
Não consigo deixar de vincular ao O que é o / etc / mtab no Linux? porque abrange detalhes não Linux que nenhuma das respostas aqui fornece.
Weijun Zhou 24/04

Respostas:

141

A lista definitiva de sistemas de arquivos montados está em /proc/mounts.

Se você tiver qualquer forma de contêiner no seu sistema, /proc/mountslista apenas os sistemas de arquivos que estão no seu contêiner atual. Por exemplo, em um chroot , /proc/mountslista apenas os sistemas de arquivos cujo ponto de montagem está dentro do chroot. ( Existem maneiras de escapar do chroot, mente. )

Há também uma lista de sistemas de arquivos montados no /etc/mtab. Esta lista é mantida pelos comandos mounte umount. Isso significa que, se você não usar esses comandos (o que é bastante raro), sua ação (montar ou desmontar) não será registrada. Na prática, é principalmente em um chroot que você encontrará /etc/mtabarquivos que diferem bastante do estado do sistema. Além disso, as montagens realizadas no chroot serão refletidas no chroot, /etc/mtabmas não no principal /etc/mtab. As ações executadas enquanto /etc/mtabestiver em um sistema de arquivos somente leitura também não são registradas lá.

A razão pela qual você às vezes deseja consultar /etc/mtabcom preferência ou além disso /proc/mountsé que, por ter acesso à linha de comando mount, às vezes é capaz de apresentar informações de uma maneira que é mais fácil de entender; por exemplo, você vê as opções de montagem conforme solicitado (enquanto /proc/mountslista os mountpadrões e do kernel também), e montagens de ligação aparecem como tal em /etc/mtab.

Gilles
fonte
1
Qual é o sentido de mountmanter /etc/mtabse não se pode confiar? Não seria melhor se as mountinformações apresentadas fossem apresentadas /proc/mounts?
Piotr Dobrogost
2
O @PiotrDobrogost /etc/mtabpode registrar informações que o kernel não rastreia, como as opções solicitadas originalmente, e montar montagens que aparecem como tal, em vez de aparecerem como entradas duplicadas para dispositivos. No entanto, muitas distribuições estão avançando no sentido de fazer /etc/mtabum link simbólico para /proc/mounts.
Gilles
3
No entanto, muitas distribuições estão avançando no sentido de fazer /etc/mtabum link simbólico para /proc/mounts. É bom ouvir - adicionar essas informações para responder as tornaria ainda melhores. Você acha que o rastreamento das opções solicitadas pelo kernel seria viável e benéfico?
Piotr Dobrogost
2
Observe que você precisará remover o escape do conteúdo de / proc / mounts. Conforme descrito na página getmntent (3), espaço (\ 040), guia (\ 011), nova linha (\ 012) e barra invertida (\ 134) precisam ser manipulados especialmente. Especialmente se as montagens de usuário estiverem ativadas, você precisará ter muito cuidado ao trabalhar com esses caminhos.
Eric
2
Consulte também outra resposta para usar o comando, findmntque é o caminho preferido desde 2010 e provavelmente o único caminho seguro em um futuro próximo, quando os namespaces de montagem serão comuns.
Marki555
68

A partir da versão 2.18 (julho de 2010) util-linux inclui uma ferramenta que permite exibir uma lista de sistemas de arquivos atualmente montados:

findmnt

Você pode alternar da visualização em árvore padrão para a visualização em lista -l, definir colunas de saída com -o(semelhante a lsblk), filtrar resultados com base no tipo de sistema de arquivos com -tetc ...

findmnt -lo fonte, destino, fstype, rótulo, opções, usado -t ext4
SOURCE    TARGET      FSTYPE LABEL OPTIONS                           USED
/dev/sda1 /           ext4   ARCH  rw,noatime,discard,data=ordered  17.6G
/dev/sdb2 /media/DATA ext4   DATA  rw,noatime,discard,data=ordered    44M

Para mais detalhes, leia a manpágina (e findmnt --helpobtenha a lista de colunas disponíveis)

don_crissti
fonte
33

Talvez porque se passaram 5 anos desde que essa pergunta foi respondida, as coisas mudaram. O cat /proc/mountscria muitas informações que você não se importa. Hoje, IMHO, acho que essa é a solução definitiva.

df -h --output=source,target

Quando você lê as páginas do manual, há todos os tipos de opções que você pode fazer, mas é isso que você faz. Por exemplo, para limpar ainda mais os resultados, você pode excluir os tipos de arquivo "tmpfs" com este comando:

df -hx tmpfs --output=source,target

df funciona no nível do sistema de arquivos e não no nível do arquivo.

Os comandos acima incluirão montagens de rede também.

Para ver um pouco mais de informações, use isto:

df -hT

NOTA Com conexões de rede montadas lentamente, isso pode levar alguns minutos!

Se você não tem ou se preocupa com conexões de rede montadas (e você tem permissões de root), isso é ainda melhor:

sudo lsblk -f
Rick
fonte
Você não precisa ser root, mas alguns dos campos / colunas (como Label) terão dados nulos, o que ainda pode ser bom, pois as perguntas desejam saber quais sistemas de arquivos estão montados.
Rick
Ubuntu. No entanto, acabei de descobrir "findmnt" que não usa raiz e lista sistemas de arquivos montados em rede. Eu estava pensando em editar minha resposta para incluir esse conhecimento.
Rick
:-) Eu cansei de dar sua resposta um voto, mas não pode até ter um representante de 15+
Rick
1
Btw, se você está tentando usar --outputalgo como o Ubuntu 12 que não aceita essas opções, confira a findmntresposta de don_crissti abaixo.
Mat Schaffer
findmntparece precisar de recursos mais altos (testados com raiz; raiz tem todos os recursos) para exibir rótulos.
Ctrl-alt-delor
23

Na maioria das vezes, mounté o método mais conveniente. Para obter uma lista completa e exata dos sistemas de arquivos atualmente montados, leia o conteúdo de /proc/mounts(por exemplo, com cat /proc/mounts).

Por exemplo, se a montagem de /leitura e gravação falhar e ela foi montada somente como um fallback /etc/mtab(da qual o mountcomando lê para informar o que está montado, e grava - se puder - quando altera o que está montado) não será atualizada para refletir que /(que contém /etc/mtab) está atualmente montado somente para leitura. Nessa situação, a execução mountnormalmente informava (incorretamente) que /foi montado o readwrite.

Sob condições normais (por exemplo, quando o sistema de arquivos que o contém pode ser gravado), /etc/mtabcontém uma lista dos sistemas de arquivos atualmente montados. Isso não deve ser confundido /etc/fstab, que contém uma lista de sistemas de arquivos que devem ser montados automaticamente quando o sistema é iniciado.

Obviamente, se o /procpróprio sistema de arquivos virtual não estiver montado, você não poderá ler nenhum dos arquivos virtuais nele, o que incluiria /proc/mounts. Isso muito raramente é o caso. Nessa situação, mounté provavelmente a melhor opção para ver o que está montado.

Eliah Kagan
fonte