[问题] 判断 /dev/sdx 的装置类型

楼主: awpadam (adam!)   2017-10-19 14:20:12
各位先进好
小弟最近有个工作
需要用C语言去找到linux下,硬盘的/dev/ 的sd 之编号
小弟对linux很陌生
我们的环境下,主机上只可能插有 两个usb碟 和 一个硬盘
所以ls /dev/sd*
之后
可能长成
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1
这个样子
这时候我插了一个硬盘和一个usb
且sda是硬盘,sdb是usb
我的工作就是利用C语言去找出 sda 这个字串
当然硬盘不可能永远都是sda,如果先插usb再插硬盘
硬盘就可能变成sdb或sdc等等
我目前是先用C语言读取 /proc/partitions 这个档案
可以找到类似这样的资讯
major minor #blocks name
8 0 488386584 sda
8 16 15646720 sdb
8 17 15646688 sdb1
然后判断 sda的 blocks 比sdb的 blocks 还要大,所以回传sda字串
但是我想说这个方法感觉很怪异
如果哪一天插了一个小容量的硬盘和一个大容量的usb
就马上会回传错误的sdx了
所以想请问版上前辈,有没有什么linux的command或者哪一个linux的档案
有在纪录著 usb 和 hd 挂载在 /dev/sdx 哪里 的相关资讯呢?
跨档案分析也可以喔~
先谢谢大家^^
作者: lantw44 (#######################)   2017-10-19 14:24:00
lsblk -S 似乎不错
作者: kenduest (小州)   2017-10-19 14:25:00
一般 usb 是可以拔除的,通常可以看/sys/block/sd[a-z]/removable 档案内容是 0 or 1
作者: lantw44 (#######################)   2017-10-19 14:27:00
我的 sdc 是 usb 可是 removable 是 0 耶
作者: kenduest (小州)   2017-10-19 14:34:00
那换个方式,ls -l 看一下 /dev/disk/by-id/usb*你用什么系统为何没 /dev/disk ? 这已经是 udev 通用的你该不会是特别的嵌入式系统 ?lsblk 都没有,感觉你的系统是客置化特别版本
作者: brli7848 (无理阿?)   2017-10-19 15:11:00
busybox吧?不是完整的coreutils
作者: filiaslayers (司马云)   2017-10-19 15:23:00
我的外接硬盘removable参数是0你要不要测一下外接硬盘看看
作者: Bencrie   2017-10-19 15:48:00
udevadm info -n /dev/sdb --attribute-walk |grepusb-storage 有找到东西就是 USB 随身碟或者 cat /sys/block/sdb/removable啊 .. 上面有人推过了 orz
作者: kingofsdtw (不能閒下來!!)   2017-10-21 14:32:00
作者: danny8376 (钓到一只猴子@_@)   2017-10-22 01:40:00
Busybox啊 没udev的话一个方法是分析dmesg或者可以试试readlink -f /sys/block/sdX/devicedevice的路径如果有usb就是usb内接则应该会是ata 除非你走SAS XD喔 PCIe的手上没得试 所以我也不确定(?
作者: Bencrie   2017-10-22 02:31:00
PCIe 的会叫 nvme0n1 吧

Links booklink

Contact Us: admin [ a t ] ucptt.com