Quero detectar se uma unidade é externa ou interna. Eu tenho uma unidade SATA conectada a uma porta USB através de um adaptador SATA-USB.
hdparm -I relata 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, ele obtém esses dados diretamente da unidade. É possível que o hdparm detecte a camada de transporte real, em vez daquela que a unidade reporta?
Eu também tentei lsusb
. Não parece ser útil. É legível por humanos, mas não há como fazer referência cruzada de sua saída com outros comandos do dispositivo. Iterar através de ônibus lsusb -D /dev/bus/usb/...
também não parece apropriado, embora talvez eu pudesse fazer 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
também não informa o fato de que a unidade externa está sendo executada em USB:
Model: ADATA SU 800 (scsi)
Responder1
Eu posso dizer assim:
$ 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:
- Se não,
realpath
entãoreadlink
pode lhe dar uma pista. - Consulta sobre um dispositivo específico, alguns deles (como acima) ou todos eles (
/sys/block/*
). - No meu Kubuntu
/sys/class/block/
também contém entradas para partições (por exemplosda1
).
Solução 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