Ich möchte feststellen, ob ein Laufwerk extern oder intern ist. Ich habe ein SATA-Laufwerk über einen SATA-USB-Adapter an einen USB-Anschluss angeschlossen.
hdparm -I meldet es wie folgt:
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.
Es erhält diese Daten anscheinend direkt vom Laufwerk. Ist es für hdparm möglich, die tatsächliche Transportschicht zu erkennen, statt der, die das Laufwerk meldet?
Ich habe auch versucht lsusb
. Es scheint nicht nützlich zu sein. Es ist für Menschen lesbar, aber es gibt keine Möglichkeit, seine Ausgabe mit anderen Gerätebefehlen zu vergleichen. Das Durchlaufen von Bussen mit lsusb -D /dev/bus/usb/...
scheint auch nicht angemessen, obwohl ich vielleicht etwas wiefind /dev/bus | while read -r line; do if((lsusb -D $line | grep) CONTAINS SOME SUBSTRING MENTIONING THE DEVICE) then blah done
parted --list
meldet auch nicht, dass das externe Laufwerk über USB läuft:
Model: ADATA SU 800 (scsi)
Antwort1
Ich kann es so sagen:
$ 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
Anmerkungen:
- Wenn nicht, gibt Ihnen
realpath
das vielleicht einen Hinweis.readlink
- Abfrage zu einem bestimmten Gerät, einigen davon (wie oben) oder allen (
/sys/block/*
). - In meinem Kubuntu
/sys/class/block/
sind auch Einträge für Partitionen enthalten (z. B.sda1
).
POSIX-Lösung:
$ 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