Se entendi sua pergunta, você quer saber qual dispositivo foi usado para uma determinada montagem. Para isso, você pode usar o df
comando:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-root 50G 21G 27G 44% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 14M 3.8G 1% /dev/shm
tmpfs 3.8G 984K 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
tmpfs 3.8G 3.4M 3.8G 1% /tmp
/dev/sda1 477M 99M 349M 23% /boot
/dev/mapper/fedora_greeneggs-home 402G 184G 198G 49% /home
Para descobrir em qual dispositivo um arquivo / diretório específico está localizado, forneça o arquivo como argumento df
. Usando seu exemplo:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 477M 99M 349M 23% /
Você também pode usar o mount
comando:
$ mount | grep '^/dev'
/dev/mapper/fedora_greeneggs-root on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/fedora_greeneggs-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
O diretório montado para cada dispositivo é o terceiro argumento na saída acima. Então, para o dispositivo /dev/sda1
seria /boot
. Os outros dispositivos estão usando o LVM (Logical Volume Management) e precisariam ser consultados para saber qual dispositivo real está sendo usado pelo LVM.
$PWD
(que é o que estou montando) estiver enterrado em uma série de links simbólicos, montagens de ligação, etc., eu precisaria examinar recursivamente o caminho para obter pontos de montagem./proc/mounts
"coisa" montada, pelo menos em minha mente, não é o dispositivo, é o diretório / arquivo.readlink -f /mnt
mostra?readlink -f /mnt
dá/mnt
No Linux, temos
findmnt
deutil-linux
feita exatamente para esteA vantagem de outras soluções é que ainda funcionará se os caminhos forem obscurecidos por links simbólicos ou montagens de ligação duplicadas.
fonte
O método mais preciso que conheço é usar a saída da chamada do sistema lstat (). Especificamente, o campo st_dev. Existe um utilitário de linha de comando, stat (1), que pode ser usado para ver essas informações. Por exemplo, a saída de "stat / etc / issue" no meu laptop:
Observe a terceira linha, primeiro campo, "Dispositivo". Aqui lista 801h. Esse valor pode ser separado em dois bytes, 8 e 1. O primeiro byte é conhecido como o número principal, o segundo byte é o número menor. Portanto, o próximo passo é descobrir qual é o dispositivo maior 8, menor 1.
Acho consultoria / proc / partições para ser o mais rápido. No meu caso, / proc / partitions tem o conteúdo:
É bastante claro a partir dessa saída que 8 maiores, 1 menor é sda1. Podemos confirmar isso com um ls -l / dev / sda1
Observe o 8, 1 antes do carimbo de data.
É importante entender / lembrar que o nome de um arquivo de dispositivo como / dev / sda1 é apenas um rótulo. Os números principais e secundários são os valores significativos e importantes do arquivo do dispositivo. Se você ficar curioso, consulte o utilitário mknod (1) usado para criar arquivos de dispositivo. Eu poderia criar uma nova entrada / dev chamada aardvark com 8 maiores, 18 menores com a seguinte sintaxe:
Então, eu poderia montá-lo facilmente:
e, se observarmos a saída do comando mount ou o conteúdo de / proc / mounts e veremos:
df -h mostra:
De qualquer forma, o objetivo de tudo isso é ilustrar que os detalhes importantes para identificar um dispositivo de bloco são os números principais e secundários - não o rótulo do arquivo do dispositivo - e que o uso da chamada de sistema lstat () é a melhor maneira de consultar esses valores.
Como último comentário, apenas reli sua pergunta para ter certeza de que estava respondendo e percebi que você estava perguntando qual rótulo de dispositivo de origem apareceria em / proc / mounts para uma montagem de ligação. Esse seria o mesmo rótulo do dispositivo de origem usado na chamada original mount (2) para a origem do ponto de montagem do sistema de arquivos para a montagem de ligação. Talvez um exemplo ajude:
Eu tenho / dev / sdb2 e / dev / aardvark (o mesmo que acima). Ambos são 8 maiores, 18 menores. Note que montarei o mesmo sistema de arquivos duas vezes. Eu faço o seguinte:
Observe que eu criei o diretório em / mnt1. Mas como / mnt1 e / mnt2 têm o mesmo sistema de arquivos montado, algo também poderá ser alcançado através de / mnt2.
Agora, se verificarmos / proc / mounts, veremos:
O rótulo do dispositivo de origem nas montagens de ligação / foo / ... é o mesmo que o valor originalmente fornecido na chamada mount (2) do sistema de arquivos. Lembre-se, / dev / aardvark e / dev / sdb2 no meu exemplo são o mesmo dispositivo.
Sei que acabei de escrever um romance e a primeira metade não responde realmente à sua pergunta, mas parecia um desperdício excluí-la. Talvez ajude alguém.
Boa sorte.
PS Lembre-se de que alguns sistemas de arquivos são baseados em rede - como NFS ou CIFS - ou são procfs ou sysfs, como virtuais, e não possuem um dispositivo de bloqueio de origem. Não sei o que será retornado como o dispositivo na saída stat, apenas pelo que vale a pena.
fonte
Dados os seguintes pontos de montagem típicos:
stat --format %m <path>
imprimirá apenas o ponto de montagem de uma maneira que pode ser arredondada (embora você precise verificar o código de saída para detectar inequivocamente um erro de permissão; as abordagens da tabela de montagem ganham aqui):Os links simbólicos tomam um pouco de cuidado, como de costume:
E, claro, lembre-se de usar aspas ao criar scripts. Considere um caminho de ponto de montagem com espaços e assim:
Quão grande você é ?
A conclusão da guia da minha distribuição não está correta, por isso, faremos um curinga neste exemplo de ponto de montagem com retornos de carro e avanço de linha e lotes de espaços:
fonte