linux 检测块设备是本地磁盘还是可移动USB磁盘

omvjsjqw  于 2023-06-21  发布在  Linux
关注(0)|答案(3)|浏览(184)

有什么方法可以检测到一个块设备,如/dev/sda或/dev/sdc,是否与本地磁盘(我的意思是scsi或sata)或可移动USB磁盘相关?
我写了一个shell脚本,必须检测只有本地磁盘块设备,不包括任何可移动磁盘。
谢谢!

uqcuzwp8

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
s4n0splo

s4n0splo2#

使用lshw

lshw -class disk -class storage

然后查找bus info字符串。

00jrzges

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

相关问题