Em vez de usar mount | grep
, eu gostaria de usar mount -l -t bind
, mas isso não funciona e -t none
mostra todas as montagens.
fonte
Em vez de usar mount | grep
, eu gostaria de usar mount -l -t bind
, mas isso não funciona e -t none
mostra todas as montagens.
Montagens de ligação não são do tipo sistema de arquivos nem parâmetro de um sistema de arquivos montado; eles são parâmetros de uma operação de montagem . Até onde eu sei, as seguintes seqüências de comandos levam a estados de sistema essencialmente idênticos no que diz respeito ao kernel:
mount /dev/foo /mnt/one; mount --bind /mnt/one /mnt/two
mount /dev/foo /mnt/two; mount --bind /mnt/two /mnt/one
Portanto, a única maneira de lembrar em que montagens eram montagens de ligação é o log de mount
comandos restantes /etc/mtab
. Uma operação de montagem de ligação é indicada pela opção debind
montagem (que faz com que o tipo de sistema de arquivos seja ignorado). Mas não tem opção para listar apenas sistemas de arquivos montados com um conjunto específico de conjuntos de opções. Portanto, você precisa fazer sua própria filtragem.mount
mount | grep -E '[,(]bind[,)]'
</etc/mtab awk '$4 ~ /(^|,)bind(,|$)/'
Observe que /etc/mtab
só é útil aqui se for um arquivo de texto mantido por mount
. Algumas distribuições são configuradas /etc/mtab
como um link simbólico /proc/mounts
; /proc/mounts
é basicamente equivalente a, /etc/mtab
mas possui algumas diferenças, uma das quais não está rastreando montagens de ligação.
Uma informação que é retida pelo kernel, mas não mostrada /proc/mounts
, é quando um ponto de montagem mostra apenas uma parte da árvore de diretórios no sistema de arquivos montado. Na prática, isso acontece principalmente com montagens de ligação:
mount --bind /mnt/one/sub /mnt/partial
Em /proc/mounts
, as entradas /mnt/one
e /mnt/partial
têm o mesmo dispositivo, o mesmo tipo de sistema de arquivos e as mesmas opções. As informações que /mnt/partial
mostram apenas a parte do sistema de arquivos enraizada /sub
são visíveis nas informações do ponto de montagem por processo em /proc/$pid/mountinfo
(coluna 4). As entradas são assim:
12 34 56:78 / /mnt/one rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
12 34 56:78 /sub /mnt/partial rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
findmnt | fgrep [
o explicado aqui .mount --version
você está usando para registrar algumabind
informação/etc/mtab
? Estou usando a versão 2.20.1 e procurei as fontes mais recentes e, em nenhum dos casos, vejo as informações de ligação registradas em qualquer lugar que permitam que você aguardebind
. Por outro lado, o que sugeri na minha resposta , na verdade, lista montagens de ligação criadas com--bind
o uso dabind
opção .</etc/mtab awk …
é compatível com POSIX (eu esqueço se é suportado no Bourne). Por favor, verifique seus fatos. Eu posso confirmar que/etc/mtab
tem abind
opção para um sistema de arquivos montadomount --bind /source /target
no Debian stable (monte a partir do util-linux-ng 2.17.2).mount
e/etc/mtab
. Você está usando o Debian stable, que possui a versão mais antiga do util-linux-ng; Eu estou usando testes Debian que tem uma versão mais recente que não parece ter o mesmo/etc/mtab
comportamento, o que é talvez por isso que @rozcietrzewiacz não viubind
em em/etc/mtab
se sua distribuição também está usando uma versão mais recente?findmnt
como resposta. Só funciona se o diretório de destino não for outro ponto de montagem, a propósito. Tente por exemplosudo mount --bind / foo && findmnt | grep foo
Talvez isso possa funcionar:
Exemplo:
fonte
/
ele próprio estiver montado em ligação, por exemplo, a saída não possui a[...]
.O kernel não suporta montagens de ligação diferentes das normais montagens após o fato. Os únicos diferem no que acontece durante a
mount
execução.Quando você monta um sistema de arquivos (por exemplo, com
mount -t ext4 /dev/sda1 /mnt
), o kernel (um pouco simplificado) executa três etapas:-t
ou usar-t auto
mount
adivinhar o tipo para você e fornecer o tipo de adivinhação ao kernel)nodev
por exemplo, é uma opção no ponto de montagem, não no sistema de arquivos. Você pode ter uma montagem de ligação comnodev
e uma sem)Se você executar uma montagem de ligação (por exemplo, com
mount --bind /a /b
), acontece o seguinte:(Eu vou pular
mount --move
, porque não é relevante para a pergunta.)Isso é semelhante à maneira como os arquivos são criados no Linux:
Se você criar um link físico, acontece o seguinte:
Como você pode ver, o arquivo criado e o link físico são indistinguíveis:
Porém , como é possível identificar todos os hardlinks para um arquivo comparando os números de inode, você pode identificar todas as montagens em um sistema de arquivos comparando o principal: número menor de montagens.
Você pode fazer isso consultando
findmnt -o TARGET,MAJ:MIN
diretamente/proc/self/mountinfo
( consulte a documentação do kernel do Linux para obter mais informações). ).O script Python a seguir lista todas as montagens de ligação. Ele pressupõe que o ponto de montagem mais antigo com o caminho relativo mais curto para a raiz do sistema de arquivos montado seja a montagem original.
fonte
fonte
Isso é semelhante à outra resposta findmnt, mas evita o problema de formatação.
Para mostrar todos os submounts:
Para mostrar todos os submounts de sistemas de arquivos do tipo ext4:
Para mostrar todas as montagens, excluindo submounts:
Para mostrar todas as montagens de sistemas de arquivos do tipo ext4, excluindo submounts:
O "-n" remove os cabeçalhos e o "--list" remove as linhas do formato "árvore".
Testado no Debian.
fonte