Я хотел бы измерить время чтения всех подключенных USB-устройств.
янайденныйчто hdparm
подходит для этого:
$ sudo hdparm -tT /dev/sdb1
Однако я хотел бы подключить несколько устройств и выполнить итерацию /dev/bus/usb/<bus>/<address>
. Это дает мне ошибку:
$ sudo hdparm -tT /dev/bus/usb/003/002
read(2097152) returned 62 bytes
BLKGETSIZE failed: Operation not permitted
BLKFLSBUF failed: Operation not permitted
(Автобус и адрес я нашел через lsusb
.)
Как можно реализовать этот подход?
решение1
Вы можете сделать что-то вроде этого:
for i in $(cat /proc/partitions | grep -v "[0-9]$\|name" | awk '{ print $4 }'); do hdparm -tT /dev/"$i"; done
Это циклически перебирает /proc/partitions
и извлекает имена устройств перед передачей этих значений в hdparm
, который предназначен для запуска на устройствах, а не на разделах (например, /dev/sda, а не /dev/sda1).
Как написано, команда выше будет работать также на существующих жестких дисках, а также на USB-устройствах. Чтобы исключить их, измените часть grep -v
. Команда выше отобразит все строки, которые не заканчиваются на digit
или содержат слово name
.
Например, если у вас есть два жестких диска, которые вы хотите исключить ( /dev/sda
и /dev/sdb
), приведенную выше команду можно изменить следующим образом:
for i in $(cat /proc/partitions | grep -v "[ab0-9]$\|name" | awk '{ print $4 }'); do hdparm -tT /dev/"$i"; done