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

7

Eu 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 é montado (e qual parte dele).

Checar /proc/mounts para sdb não é suficiente porque sdb ou uma de suas partições podem ser usadas pelo LVM. Você pode verificar /sys/block/sdb/sdb*/holders/ mas obterá dm-x entradas que devem ser resolvidas para /dev/mapper nomes para verificar /proc/mounts . Possível, mas se houver uma solução mais fácil ... (que não deve exigir privilégios de root)

    
por Hauke Laging 31.01.2014 / 02:40

2 respostas

11

Esta é essencialmente uma questão de verificar uma mala inteira de casos de canto.

  • Uma unidade pode aparecer em / proc / montagens
  • Um drive pode ser usado como swap (use / proc / swaps)
  • Um drive pode fazer parte de um LVM ativo (use o pvdisplay)
  • Uma unidade pode fazer parte de um grupo de RAID 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 um sistema de arquivos) (usar fusor)
  • Uma unidade pode ser acessada diretamente por uma máquina virtual (use fuser)
  • Uma unidade pode ser referenciada por um dispositivo de loopback (por exemplo: mount /dev/sda -o offset=1M /foo ) (use losetup -a)

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

Este último exemplo eu acho que é o mais interessante e poucas pessoas sabem disso. Ele permite que você monte um sistema de arquivos sem usar partições. Basta especificar o offset 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 já correram terrivelmente mal.

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

    
por 31.01.2014 / 04:04
1

Há muito mais maneiras de montar dispositivos, todos eles podem ser combinados, então é sempre comum você descobrir.

i.e. o que é usado por lvm: pvdisplay

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

    
por 31.01.2014 / 03:02