Я хочу определить, является ли диск внешним или внутренним. У меня есть диск SATA, подключенный к порту USB через адаптер SATA-USB.
hdparm -I сообщает об этом как:
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.
По-видимому, он получает эти данные напрямую с диска. Возможно ли, что hdparm определит фактический транспортный уровень, а не тот, о котором сообщает диск?
Я также пробовал lsusb
. Это, кажется, бесполезно. Это читабельно для человека, но нет способа перекрестно ссылаться на его вывод с другими командами устройства. Итерация по шинам с помощью lsusb -D /dev/bus/usb/...
тоже не кажется подходящей, хотя, возможно, я мог бы сделать что-то вродеfind /dev/bus | while read -r line; do if((lsusb -D $line | grep) CONTAINS SOME SUBSTRING MENTIONING THE DEVICE) then blah done
parted --list
также не сообщается о том, что внешний диск работает через USB:
Model: ADATA SU 800 (scsi)
решение1
Я могу сказать следующее:
$ 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
Примечания:
- Если нет,
realpath
то,readlink
возможно, это даст вам подсказку. - Запрос о конкретном устройстве, некоторых из них (как выше) или всех из них (
/sys/block/*
). - В моем Kubuntu
/sys/class/block/
также содержатся записи для разделов (напримерsda1
).
Решение 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