Как найти прикрепленные диски, внутренние или внешние?
Я использовал приведенную ниже команду, но она не указывает, является ли диск внутренним или внешним.
$ lshw -C disk
По сути, я хочу узнать, идет ли диск от каких-либо внешних источников, таких как SCSI или SAN, или что-то в этом роде, или это диск установлен на сервере физически.
Заранее спасибо и извиняюсь или плохой английский.
1 ответ
Судя по поиску в Интернете, моя первая попытка была:
for dev in $(lsblk -ndo name)
do
printf "$dev: "
udevadm info --query property /dev/$dev | sed -n 's/ID_BUS=^//p'
done
который показал, что внешний жесткий диск, который я подключил с помощью USB-кабеля, был помечен как «ata», а не «usb», как я ожидал. Итак, я порылся в выводе запроса, чтобы найти какой-нибудь другой метод, и придумал следующее:
for dev in $(lsblk -ndo name)
do
udevadm info -q property /dev/$dev |
sed -n "s|^DEVPATH=|$dev/|p" |
cut -d/ -f1,6 | tr / :
done
Основываясь на результатах моей конкретной конфигурации , я написал эту функцию Bash:
is-internal-disk(){
case $(udevadm info -q path $1 | cut -d/ -f5)
ata*) return true ;;
*) return false ;;
esac
}
Я верю, что это надежно, потому что
Если вы хотите узнать, какое внешнее устройство является простой картой памяти (не жестким диском или твердотельным накопителем), вам нужен еще один метод, но я не уверен, какой из этих двух лучше в долгосрочной перспективе:
is-memory-stick(){
# udevadm info -q property $1 | grep -q '^ID_BUS=usb$'
udevadm info -q property $1 | grep -q '^ID_DRIVE_THUMB=1$'
}