Quiero detectar si una unidad es externa o interna. Tengo una unidad SATA conectada a un puerto USB mediante un adaptador SATA-USB.
hdparm -Lo reporto como:
ATA device, with non-removable media
...
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0.
Aparentemente obtiene estos datos directamente del disco. ¿Es posible que hdparm detecte la capa de transporte real, en lugar de la que informa la unidad?
Yo también lo intenté lsusb
. No parece ser útil. Es legible por humanos, pero no hay forma de comparar su salida con los comandos de otros dispositivos. Iterar a través de autobuses lsusb -D /dev/bus/usb/...
tampoco parece apropiado, aunque tal vez podría hacer algo comofind /dev/bus | while read -r line; do if((lsusb -D $line | grep) CONTAINS SOME SUBSTRING MENTIONING THE DEVICE) then blah done
parted --list
tampoco informa el hecho de que la unidad externa se está ejecutando a través de USB:
Model: ADATA SU 800 (scsi)
Respuesta1
Puedo decirlo así:
$ realpath /sys/block/sd*
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:0/block/sdc
Notas:
- Si no
realpath
,readlink
puede que te dé una pista. - Consulta sobre un dispositivo específico, algunos de ellos (como arriba) o todos (
/sys/block/*
). - En mi Kubuntu
/sys/class/block/
también contiene entradas para particiones (por ejemplosda1
).
Solución POSIX:
$ for p in /sys/block/sd*; do (cd "$p" && pwd -P); done
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:0/block/sdc