作者:
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:00lsblk -S 似乎不錯
一般 usb 是可以拔除的,通常可以看/sys/block/sd[a-z]/removable 檔案內容是 0 or 1
作者:
lantw44 (#######################)
2017-10-19 14:27:00我的 sdc 是 usb 可是 removable 是 0 耶
那換個方式,ls -l 看一下 /dev/disk/by-id/usb*你用什麼系統為何沒 /dev/disk ? 這已經是 udev 通用的你該不會是特別的嵌入式系統 ?lsblk 都沒有,感覺你的系統是客置化特別版本
作者: brli7848 (無理阿?) 2017-10-19 15:11:00
busybox吧?不是完整的coreutils
我的外接硬碟removable參數是0你要不要測一下外接硬碟看看
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:00Busybox啊 沒udev的話一個方法是分析dmesg或者可以試試readlink -f /sys/block/sdX/devicedevice的路徑如果有usb就是usb內接則應該會是ata 除非你走SAS XD喔 PCIe的手上沒得試 所以我也不確定(?