No Linux, você pode obter informações de ponto de montagem diretamente do kernel em /proc/mounts
. O programa mount
registra informações semelhantes em /etc/mtab
. Os caminhos e opções podem ser diferentes, pois /etc/mtab
representa o que mount
passou para o kernel, enquanto /proc/mounts
mostra os dados como vistos dentro do kernel. /proc/mounts
está sempre atualizado, enquanto /etc/mtab
pode não estar se /etc
foi somente leitura em algum ponto que não era esperado pelos scripts de inicialização. O formato é semelhante a /etc/fstab
.
Em ambos os 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 o awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Existem vários casos extremos em que você pode não conseguir o que espera. Se o dispositivo foi montado por meio de um caminho diferente em /dev
que designa o mesmo dispositivo, você não perceberá isso. Em /proc/mounts
, as montagens de ligação são indistinguíveis do original. Pode haver mais de uma correspondência se um ponto de montagem fizer sombras de outra (isso é incomum).
Em /proc/self
ou /proc/$pid
, existe um arquivo mounts
por processo que imita o arquivo global. As informações de montagem podem variar entre processos, por exemplo, devido a chroot
. Existe um arquivo adicional chamado mountinfo
que possui um formato diferente e inclui mais informações, em particular os números maior e menor do dispositivo. Na 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
Então, se você está procurando um dispositivo por número, você pode fazer assim:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'