我使用了以下命令,但它没有说明磁盘是内部的还是外部的。
$ 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
}
我相信这是可靠的,因为它udevadm
显示了每个磁盘的属性,而且它似乎可以很安全地假设第五个字段总是有答案(我希望有人可以对此发表评论)。
如果您想知道哪个外部设备只是一根记忆棒(不是 HDD 或 SSD),您还需要另一种方法,但从长远来看,我不确定这两种方法哪种更好:
is-memory-stick(){
# udevadm info -q property $1 | grep -q '^ID_BUS=usb$'
udevadm info -q property $1 | grep -q '^ID_DRIVE_THUMB=1$'
}