Montar localização pelo VidPid de um dispositivo

1

Eu estou tentando descobrir uma maneira de saber onde um dispositivo de armazenamento em massa (pendrive, hdd) é montado, conhecendo apenas seus IDs de produto e fornecedor. Existe um comando (ou uma combinação de muitos comandos) que me permita obter localização de montagem para determinado dispositivo?

Eu não sou muito experiente em Linux, tendo tentado os comandos dmesg , mount , lsusb (-t) e df nem sequer me dão uma pequena pista sobre como conseguir isso ...

    
por Asunez 18.08.2016 / 11:50

1 resposta

1

Se isso fizer parte de um programa usado pelo público em geral, tenha em mente que:

  1. Pode haver vários dispositivos com o mesmo par VID: PID;
  2. Um único disco (até mesmo um dispositivo USB) pode ter várias partições;
  3. No Linux, a mesma partição (sistema de arquivos) pode ser montada em vários lugares de uma só vez.

Isso disse:

Primeiro, use o udev para listar todos os dispositivos de bloco cujo pai tenha o VID: PID necessário, seja com base nas propriedades ID_ * ou nos atributos reais sysfs idVendor, idModel :

$ udevadm trigger -v -n -s block -p ID_VENDOR_ID=3538 -p ID_MODEL_ID=0051
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb/sdb1

Eu penso que é bastante seguro assumir que a última parte do nome sempre corresponderá ao /dev name ...

Use findmnt para listar os pontos de montagem:

$ findmnt -n -o TARGET /dev/sdb1
/run/media/grawity/A0D8-7268

Em combinação:

devs=$(udevadm trigger -v -n -s block -p ID_VENDOR_ID=… -p ID_MODEL_ID=…)

for dev in $devs; do
    findmnt -n -o TARGET /dev/${dev##*/}
done

# alternative, based on the device's major:minor
for dev in $devs; do
    findmnt -n -o TARGET $(<"$dev/dev")
done
    
por 18.08.2016 / 15:10