O Linux não mantém as informações sobre qual montagem era uma montagem de ligação . Ele mantém informações sobre todas as montagens, incluindo montagens de bind .
É bastante semelhante aos links físicos. Montagens link para sistemas de arquivos como nomes de arquivos para inodes. As únicas diferenças são que as montagens também possuem sinalizadores por ponto de montagem e podem se referir a um subdiretório do sistema de arquivos de destino em vez da raiz do sistema de arquivos.
Quando você cria um link físico, o sistema de arquivos não salva qual nome de arquivo é o original e qual é o link físico. Ambos simplesmente se referem ao mesmo inode. Se você desvincular o arquivo original, a situação é indistinguível se você criou diretamente o arquivo com o segundo nome de arquivo.
Voltar para montagens de ligação: O kernel mantém uma tabela que contém o sistema de arquivos (identificado por um dos principais: pares de números menores), o ponto de montagem, o caminho relativo à raiz do sistema de arquivos e alguns sinalizadores. Você pode acessar essa lista observando /proc/self/mountinfo
. (Isso fica mais complicado quando os namespaces estão envolvidos, como mencionado por @ stephen-harris). findmnt
analisa essa lista.
Se a sua raiz for /dev/sda1
com o principal: menor 8:1
e você executar mount --bind /a /b
/proc/self/mountinfo
conterá linhas semelhantes a esta:
1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-ro
Se o seu /home
for /dev/sda2
com o principal: menor 8:2
e você executar mount --bind /home /users
, ficará assim:
1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:2 / /home rw - ext4 /dev/sda2 rw
3 1 8:2 / /users rw - ext4 /dev/sda2 rw
As colunas relevantes para sua pergunta são a terceira, a quarta e a quinta. Estes são os ids do sistema de arquivos (para real sistemas de arquivos é o mesmo que o dispositivo maior: menor; para sistemas de arquivos virtuais como tmpfs é [0: contador ]), o caminho relativo ao a raiz do sistema de arquivos que está ligada ao ponto de montagem (geralmente / para montagens normais, pode ser qualquer coisa para montagens de ligação) e o ponto de montagem.
Para o significado das colunas restantes, consulte a documentação do kernel do Linux .
findmnt
chama o caminho de origem relativo à raiz do sistema de arquivos "FSROOT". Você pode usar findmnt -o TARGET,FSROOT
para obtê-lo. Se você deseja o caminho de origem absoluto, provavelmente precisará analisar /proc/self/mountinfo
e combinar as informações sobre as montagens para o mesmo sistema de arquivos.
Para obter mais informações, consulte minha resposta para "List only bind bounts" .