如何查找所连接的磁盘是内部磁盘还是外部磁盘?

如何查找所连接的磁盘是内部磁盘还是外部磁盘?

我使用了以下命令,但它没有说明磁盘是内部的还是外部的。

$ 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$'
}

相关内容