有什么方法可以检测到一个块设备,如/dev/sda或/dev/sdc,是否与本地磁盘(我的意思是scsi或sata)或可移动USB磁盘相关?我写了一个shell脚本,必须检测只有本地磁盘块设备,不包括任何可移动磁盘。谢谢!
uqcuzwp81#
您可以使用udev,Linux设备管理器。查询每个块设备将显示有关它的几个信息,包括总线,您可以使用它来辨别设备是否是可移动的USB设备。这是脚本:
for device in /sys/block/sd*; do device_info="$(udevadm info --query=property --path=$device)" device_name=$(echo "$device_info" | perl -ne 'print "$1" if /^DEVNAME=(.*)/') device_bus=$(echo "$device_info" | perl -ne 'print "$1" if /^ID_BUS=(.*)/') echo "Device $device_name bus: $device_bus" done
这是一个示例结果:
Device /dev/sda bus: ata Device /dev/sdb bus: ata Device /dev/sdc bus: usb
s4n0splo2#
使用lshw:
lshw
lshw -class disk -class storage
然后查找bus info字符串。
bus info
00jrzges3#
我对这两个答案都不满意(第一个答案给了一些外部磁盘'ata',而'usb'只适用于拇指驱动器),所以我想出了这个:
for dev in $(lsblk -ndo name) do udevadm info --query=property --path=/sys/block/$dev | sed -n "s|^DEVPATH=|$dev/|p" | cut -d/ -f1,6 | tr / : done
3条答案
按热度按时间uqcuzwp81#
您可以使用udev,Linux设备管理器。
查询每个块设备将显示有关它的几个信息,包括总线,您可以使用它来辨别设备是否是可移动的USB设备。
这是脚本:
这是一个示例结果:
s4n0splo2#
使用
lshw
:然后查找
bus info
字符串。00jrzges3#
我对这两个答案都不满意(第一个答案给了一些外部磁盘'ata',而'usb'只适用于拇指驱动器),所以我想出了这个: