Como descobrir facilmente se um dispositivo de bloco (ou parte dele) está montado de alguma forma


10

Quero saber qual é a maneira mais fácil de determinar (sem privilégios de root) se um dispositivo de bloco (digamos sdb) ou qualquer parte dele está montado (e qual parte dele).

A verificação /proc/mountsde sdb não é suficiente porque sdbou uma de suas partições pode ser usada pelo LVM. Você pode verificar, /sys/block/sdb/sdb*/holders/mas obtém dm-xentradas que precisam ser resolvidas para /dev/mappernomes para verificar /proc/mounts. Possível, mas se houver uma solução mais fácil ... (que não deve exigir privilégios de root)


2
Estou curioso, você não estava apenas tentando descobrir se o dispositivo está montado? * / holders e * / * / holders é bom o suficiente para informar sua montagem se o dispositivo não existir na tabela / proc / mounts. Por que você precisa resolvê-lo ainda mais? isto é, o cryptsetup o adiciona aos titulares, indicando que você não deve estar mexendo com a unidade ... mesmo que o / dev / mapper não esteja montado ou cause corrupção na criptografia. É só que está sendo montado internamente através de um driver. Também não se esqueça de verificar / sys / block / sdb / holders também, pois a unidade pode ser "mantida" sem partições.
Rahly

Respostas:


12

Essencialmente, é uma questão de verificar um saco inteiro de caixas de canto.

  • Uma unidade pode aparecer em / proc / mounts
  • Uma unidade pode ser usada como swap (use / proc / swaps)
  • Uma unidade pode fazer parte de um LVM pv ativo (use pvdisplay)
  • Uma unidade pode fazer parte de um grupo RAID do dm-mapper (use / proc / mdstat)
  • Uma unidade pode ser acessada diretamente por um aplicativo (por exemplo, o Oracle suporta a gravação direta em uma unidade ou partição em vez de em um sistema de arquivos) (use o fusor)
  • Uma unidade pode ser acessada diretamente por uma máquina virtual (use o fusor)
  • A unidade pode ser referenciado por um dispositivo de auto-retorno (por exemplo: mount /dev/sda -o offset=1M /foo) (utilização losetup -a)

Estes são apenas os exemplos que me deram um minuto e meio para pensar sobre isso. Tenho certeza que há uma dúzia de outros.

Acho que este último exemplo é o mais interessante e poucas pessoas sabem disso. Ele permite que você monte um sistema de arquivos sem usar partições. Basta especificar o deslocamento inicial e o Linux criará de forma transparente um dispositivo de loopback. O exemplo acima produz o seguinte:

# cat /proc/mounts
...
/dev/loop0 /foo ext4 relatime,data=ordered 0 0

# losetup -a
/dev/loop0 [0005]:2048 (/dev/sda), offset 1048576

Por que você faria isso? Normalmente, envolve situações em que as coisas deram errado horrivelmente anteriormente.

Lembre-se também de que, com o recurso de namespacing agora na linha principal (consulte o compartilhamento ), processos diferentes podem ter visões diferentes sobre o que está montado e o que não está. Aqui as coisas começam a ficar um pouco vermelhas.


1

Há muito mais maneiras de montar dispositivos, todos eles podem ser combinados, por isso é comum que você descubra.

ou seja, o que é usado pelo lvm: pvdisplay

Então você precisa incluir também nfs, cifs, raid, loop, cripta e assim por diante. Um bom ponto de partida é sempre /proc/mounts, como você já mencionou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.