No Linux, você pode obter informações sobre o ponto de montagem diretamente do kernel no /proc/mounts
. O mount
programa registra informações semelhantes em /etc/mtab
. Os caminhos e opções podem ser diferentes, pois /etc/mtab
representa o que foi mount
passado para o kernel e /proc/mounts
mostra os dados como vistos dentro do kernel. /proc/mounts
está sempre atualizado, ao passo que /etc/mtab
pode não estar se /etc
fosse somente leitura em algum momento que não era esperado pelos scripts de inicialização. O formato é semelhante a /etc/fstab
.
Nos dois arquivos, o primeiro campo separado por espaço em branco contém o caminho do dispositivo e o segundo campo contém o ponto de montagem.
awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts
ou se você não tiver awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Há vários casos extremos em que você pode não obter o que espera. Se o dispositivo foi montado por um caminho diferente /dev
que designa o mesmo dispositivo, você não o notará dessa maneira. Em /proc/mounts
, montagens de ligação são indistinguíveis do original. Pode haver mais de uma correspondência se um ponto de montagem sombrear outra (isso é incomum).
Em /proc/self
ou /proc/$pid
, há um mounts
arquivo por processo que imita o arquivo global. As informações de montagem podem variar entre os processos, por exemplo, devido a chroot
. Há um arquivo adicional chamado mountinfo
que possui um formato diferente e inclui mais informações, em particular os números principais e secundários do dispositivo. A partir da documentação :
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
(1) mount ID: unique identifier of the mount (may be reused after umount)
(2) parent ID: ID of parent (or of self for the top of the mount tree)
(3) major:minor: value of st_dev for files on filesystem
(4) root: root of the mount within the filesystem
(5) mount point: mount point relative to the process's root
(6) mount options: per mount options
(7) optional fields: zero or more fields of the form "tag[:value]"
(8) separator: marks the end of the optional fields
(9) filesystem type: name of filesystem of the form "type[.subtype]"
(10) mount source: filesystem specific information or "none"
(11) super options: per super block options
Portanto, se você estiver procurando por um dispositivo por número, faça o seguinte:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'
udisks
link simbólico (em / dev / disk / by-label / ...). Mas eu posso resolver para um nó de dispositivo usandoreadlink -f
. Gosto da/proc/mounts
ideia, acho que pode ser um pouco mais confiável do que/etc/mtab
.mountinfo
. Liguestat
para obter os números do dispositivo (veja minha resposta atualizada, esqueci de incluir o comando anteriormente).-d " "
opçãocut
nessegrep
comando.findmnt
elsblk
comandos dedicados que fazem o trabalho duro (mais robustamente) para vocêNo Linux, agora você pode usar o
findmnt
comando deutil-linux
(desde a versão 2.18):Ou
lsblk
(também deutil-linux
, desde 2.19):Essa também é útil para encontrar todo o sistema de arquivos montado em um dispositivo específico (disco ou partição ...):
Para obter apenas o ponto de montagem:
Acima,
findmnt
ele retorna com um status de falha de saída se o dispositivo não estiver montado, nãolsblk
.Tão:
fonte
O
mount
comando sem argumentos listará todos os sistemas de arquivos atualmente montados; você pode fazergrep
isso para o disco que deseja (ougrep
/etc/mtab
qual arquivomount
lê as informações):fonte
grep ${NODE} /etc/mtab | cut -d ' ' -f 2
deveria fazê-lo.grep ^"${NODE}[[:space:]]\+" /etc/mtab | cut -d ' ' -f 2"
seja muito menos frágil ...Sim. Você pode ver Exibindo apenas pontos de montagem interessantes / filtrando tipos não interessantes ou diretórios de listagem em
/
que não estão sob o mesmo ponto de montagem para um exemplo de uso, mas também há um breve resumo abaixo. O comando que você está perguntando éfindmnt
(emboralsblk
também possa servir) :Now, as you can see,
/dev/sda1
is mounted on/esp
. I wonder if it is mounted elsewhere as well?Aha. Entendo. Uma subpasta também é
--bind
montada sobre a inicialização. Está bem...Nada. Que diabos?
Ohhh ... Bem, isso é legal. Hummm ...
Ah, sim, isso é muito legal.
Agora vamos colocar o sda1 de volta onde ele pertence e tentar novamente ...
Mas onde eu encontrei esse comando mágico?
fonte
Não conheço uma maneira limpa e simples de detectar se um nó do dispositivo
/dev
está ou não montado. É isso que eu posso oferecer. Ele lida com dispositivos montados diretamente (/dev/sda1
) e dispositivos montados por UUID (/dev/disk/by-uuid/aa4e7b08-6547-4b5a-85ad-094e9e1af74f
). É interrompido se os nomes dos seus dispositivos contiverem espaços em branco.A função grava a entrada de
/proc/mounts
para stdout se for encontrada, também configurando o status de saída como 0. Caso contrário, o status de saída é 1.fonte
Basta executar o comando abaixo:
fonte