dispositivo usb - mapeamento de dispositivos de bloco no Ubuntu?

1

Desculpas se isso for uma duplicata, no entanto.

Tenho 2 dispositivos de armazenamento em massa usb e preciso ser capaz de descobrir quais dispositivos físicos mapeiam para um dispositivo de bloco.

Eles não estão sempre sempre presentes, então não posso confiar em um caminho de dispositivo de bloco fixo.

Eu tentei determinar o caminho do dispositivo a partir de lsusb , mas isso apenas fornece as informações do dispositivo.

Bus 001 Device 016: ID 0781:5406 SanDisk Corp. Cruzer Micro 1/2/4GB Flash Drive
Bus 001 Device 015: ID 4971:ce23 SimpleTech

sudo fdisk -l não é capaz de ler qualquer partição, pois é um volume criptografado TrueCrypt.

Existe alguma maneira de detectar qual dispositivo físico é mapeado para um dispositivo de bloco?

Eu não consigo montar o sistema de arquivos até saber qual é qual.

eu me aproximei desse problema da maneira errada?

Alguma sugestão?

    
por Bovril 23.08.2010 / 16:59

5 respostas

1

Os dispositivos físicos são do mesmo tamanho? Eles são exatamente a mesma marca também?

Se eles tiverem tamanhos diferentes, fdisk -l deverá mostrar o tamanho de todo o disco no cabeçalho junto com o nome do dispositivo de bloco, o que deve ajudá-lo.

Você também pode verificar a saída de dmesg . Quando um dispositivo USB estiver conectado, dmesg exibirá o processo que está sendo submetido para colocá-lo on-line, além de mostrar o dispositivo de bloco atribuído. Aqui está um exemplo de saída:

Aug 14 16:35:02 xen kernel: [2526561.710931] usb 5-5: new high speed USB device using ehci_hcd and address 4
Aug 14 16:35:02 xen kernel: [2526561.859909] usb 5-5: configuration #1 chosen from 1 choice
Aug 14 16:35:02 xen kernel: [2526562.138808] usbcore: registered new interface driver libusual
Aug 14 16:35:02 xen kernel: [2526562.162072] Initializing USB Mass Storage driver...
Aug 14 16:35:02 xen kernel: [2526562.163248] scsi4 : SCSI emulation for USB Mass Storage devices
Aug 14 16:35:02 xen kernel: [2526562.163452] usbcore: registered new interface driver usb-storage
Aug 14 16:35:02 xen kernel: [2526562.163455] USB Mass Storage support registered.
Aug 14 16:35:07 xen kernel: [2526567.161157] scsi 4:0:0:0: Direct-Access     WDC WD50 00AAKS-00A7B0         PQ: 0 ANSI: 2 CCS
Aug 14 16:35:07 xen kernel: [2526567.171712] sd 4:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB)
Aug 14 16:35:07 xen kernel: [2526567.172736] sd 4:0:0:0: [sdb] Write Protect is off
Aug 14 16:35:07 xen kernel: [2526567.173733] sd 4:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB)
Aug 14 16:35:07 xen kernel: [2526567.174606] sd 4:0:0:0: [sdb] Write Protect is off
Aug 14 16:35:13 xen kernel: [2526567.174616]  sdb: sdb1
Aug 14 16:35:13 xen kernel: [2526572.854493] sd 4:0:0:0: [sdb] Attached SCSI disk
Aug 14 16:35:13 xen kernel: [2526572.854544] sd 4:0:0:0: Attached scsi generic sg2 type 0

Como você pode ver, o kernel atribuiu / dev / sdb ao dispositivo USB. Espero que isso ajude!

    
por 23.08.2010 / 17:05
0

Depois de conectar um dispositivo, você pode visitar / dev / disk e ir a partir de lá sabendo que os links simbólicos são criados dinamicamente:

[user@host disk]$ pwd
/dev/disk
[user@host disk]$ ll -R
.:
total 0
drwxr-xr-x 2 root root  80 Jul 30 09:54 by-id
drwxr-xr-x 2 root root  80 Jul 30 09:54 by-label
drwxr-xr-x 2 root root 160 Jul 30 09:54 by-path
drwxr-xr-x 2 root root  80 Jul 30 09:54 by-uuid

./by-id:
total 0
lrwxrwxrwx 1 root root  9 Jul 30 09:54 usb-WD_10EAVS_External_57442D574341553436313337373137 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 30 09:54 usb-WD_10EAVS_External_57442D574341553436313337373137-part1 -> ../../sdb1

./by-label:
total 0
lrwxrwxrwx 1 root root 10 Jul 30 09:54 backup -> ../../sdb1
lrwxrwxrwx 1 root root 10 Mar  3 18:51 boot -> ../../sda1

./by-path:
total 0
lrwxrwxrwx 1 root root  9 Jul 30 09:54 pci-0000:00:1d.7-usb-0:6:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 30 09:54 pci-0000:00:1d.7-usb-0:6:1.0-scsi-0:0:0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 Mar  3 18:51 pci-0000:00:1f.1-ide-0:0 -> ../../hda
lrwxrwxrwx 1 root root  9 Mar  3 18:51 pci-0000:02:0e.0-scsi-0:2:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Mar  3 18:51 pci-0000:02:0e.0-scsi-0:2:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar  3 18:51 pci-0000:02:0e.0-scsi-0:2:0:0-part2 -> ../../sda2

./by-uuid:
total 0
lrwxrwxrwx 1 root root 10 Mar  3 18:51 72734cea-d59d-443b-8fdd-3e7a0e2c7731 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 30 09:54 efcb8d1e-3f46-4021-bc55-22a85846429b -> ../../sdb1
[user@host disk]$ 

Espero que isso ajude.

    
por 24.08.2010 / 17:07
0

Você pode consultar o sysfs para relatar o fornecedor e o modelo da unidade:

$ cat /sys/block/sdd/device/{vendor,model}
DSE     
MicroDrive 1GB  

$ cat /sys/block/sdc/device/{vendor,model}
JetFlash
Transcend 4GB   

Se você quiser ir além disso, você pode adicionar regras do udev (supondo que sua distribuição Linux tenha o udev) para mapear suas unidades diferentes para nomes de dispositivos diferentes, ou para fornecer um link simbólico diferente baseado no modelo da unidade

Por exemplo, aqui tem alguns exemplos.

Eu poderia fazer algo assim para criar um link simbólico / dev / transcend, com os números das partições acrescentados, quando apropriado, a qualquer dispositivo real que seja realmente criado quando eu inserir meu stick Transcend:

KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}==\ 
 "Transcend 4GB", SYMLINK+="transcend%n"

Claro, se eu colocar vários dispositivos do mesmo modelo, haverá uma colisão, mas com um pouco de trabalho você pode contornar isso

    
por 25.08.2010 / 00:22
0

Eu queria saber o que fazer no caso de vários dispositivos com o mesmo fornecedor: IDs de produto.

Eu tentei executar udevadm info -a /dev/sde , que "percorre a cadeia de dispositivos pai" (o que quer que isso signifique?). Ao combinar "ATTRS {devnum}" e "ATTRS {busnum}" com a saída Bus X Device Y de lsusb , pude ver que a listagem do udevadm não apenas produz os números de barramento e dispositivo para o disco rígido USB como "pai" do dispositivo de bloco /dev/sde , mas também os números de barramento e dispositivo do hub ao qual ele estava conectado, bem como o controlador host! Isso pode ser útil se você quiser identificar um dispositivo pela porta à qual está conectado.

Eu estava um pouco confuso sobre por que parece tão difícil conseguir o dispositivo USB correspondente a um determinado dispositivo de bloco, e eu acho que isso esclarece um pouco: os dispositivos não são os mesmos, há um tipo de relação filial entre os dois.

O udevadm fornece os caminhos de cada pai, então você tem alguma idéia de como localizar o pai correto cortando o caminho filho:

$ udevadm info --path=$(udevadm info -q path /dev/sde | cut -d / -f 1-7)
P: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2.4
N: bus/usb/002/024
E: BUSNUM=002
E: DEVNAME=/dev/bus/usb/002/024
E: DEVNUM=024
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2.4
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
E: ID_MODEL=External_HDD
....

Podemos passar o DEVNAME para lsusb:

$ lsusb -D $(udevadm info --path=$(udevadm info -q path /dev/sde
    | cut -d / -f 1-7) | grep DEVNAME | cut -d = -f 2)
Device: ID 1058:0705 Western Digital Technologies, Inc. My Passport Elite (WDML)
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
...

Portanto, podemos usar isso para dizer que, por exemplo, o / dev / sde está conectado como um dispositivo USB 2.0 (da linha bcdUSB acima).

Não sei se isso responde à sua pergunta, mas é possível identificar dispositivos USB em dispositivos de bloco. Também não está completo porque acho que você terá que dar um argumento diferente para 'cortar' se você não tiver um hub entre o controlador e o dispositivo. Provavelmente, eu deveria estar contando a partir do final do caminho do dispositivo, em vez do começo, mas não consegui encontrar uma maneira de passar um argumento numérico para dirname .

Atualização: aqui está uma solução que usa o zsh para aparar componentes no final do caminho do dispositivo. Deixe-me saber se isso funciona para você:

$ cat usb-device-from-block-device
#!/bin/zsh                         
udevadm info --path ${${$(udevadm info -q path $1)}%/*/*/*/*/*/*} | grep DEVNAME | cut -d = -f 2

# Example:
$ usb-device-from-block-device /dev/sdc
/dev/bus/usb/001/017
$ lsusb -D $(usb-device-from-block-device /dev/sdc)
...
    
por 25.09.2018 / 23:15
0

Eu não vi uma resposta centrada no UUID, então aqui está uma:

Se você tiver um sistema de arquivos no dispositivo, esse sistema de arquivos tem um UUID. Você pode usar este UUID para montar o sistema de arquivos de forma confiável, não importando qual dispositivo de bloco maior / menor o pen drive entra como no sistema

Você pode exibir facilmente qual dispositivo vai para qual UUID / sistema de arquivos com lsblk -f . O seguinte é um exemplo do meu sistema, que mostra uma boa árvore descritiva da minha única unidade NVMe. Os flash drives nessa questão provavelmente apresentariam uma saída muito mais simples.

[dhay@GLaDOS ~]$ lsblk -f
NAME              FSTYPE      LABEL       UUID                                   MOUNTPOINT
nvme0n1                                                                          
├─nvme0n1p1       vfat        ESP         F2F6-9BC7                              /boot/efi
├─nvme0n1p2                                                                      
├─nvme0n1p3       crypto_LUKS             abde2123-0ee9-46b5-8d05-2b0b91b21054   
│ └─syspvluks     LVM2_member             ZsBxHH-tvRz-xE3k-e2dJ-I0O0-Gv4e-Ckap71 
│   ├─system-root xfs         root        a3acf72b-3309-408e-b6a4-0c3f28b86a53   /
│   └─system-swap swap        swap        5006f803-af24-4179-a5fa-7c5720b383d2   [SWAP]
├─nvme0n1p4       ntfs        WINRETOOLS  A0B0BED5B0BEB0E0                       
├─nvme0n1p5       ntfs        Image       D6E6BF67E6BF4711                       
├─nvme0n1p6       ntfs        DELLSUPPORT 00CED73ECED72AA4                       
└─nvme0n1p7       xfs         boot        b3e3a722-e37a-4c15-8d6c-4085c00b778a   /boot

Com esse UUID em mãos, você pode identificar sistemas de arquivos com ele, independentemente do que estiver usando. Isso também é ótimo para migrar um sistema de arquivos de um dispositivo para outro sem precisar atualizar nenhuma configuração. O seguinte é um exemplo do meu arquivo / etc / fstab, que está usando uma combinação de rótulos de dispositivos, UUIDs e nomes persistentes de LVM em vez de nomes diretos de kernel para dispositivos de bloco:

/dev/mapper/system-root /                       xfs     defaults,discard       0 0
UUID=F2F6-9BC7          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/system-swap swap                    swap    defaults        0 0
LABEL=boot              /boot                   xfs     defaults,discard     0 0

Da mesma forma, posso usar um UUID como um argumento de dispositivo neste comando mount para montar meu sistema de arquivos raiz em um diretório:

[dhay@GLaDOS ~]$ mount UUID=a3acf72b-3309-408e-b6a4-0c3f28b86a53 /mnt/root

    
por 26.09.2018 / 00:10