看板 Linux 關於我們 聯絡資訊
各位先進好 小弟最近有個工作 需要用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 哪裡 的相關資訊呢? 跨檔案分析也可以喔~ 先謝謝大家^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.7.85 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1508394014.A.183.html ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:22:40
lantw44: lsblk -S 似乎不錯 10/19 14:24
這個指令,上網搜尋好像很符合我的需求 但是在我們公司的電腦下是 : -sh: lsblk: command not found 而在我自己另一台電腦下則可以 可惜的是我們沒有權限在公司電腦系統上 安裝 或 修改 任何設定= =
kenduest: 一般 usb 是可以拔除的,通常可以看 10/19 14:25
kenduest: /sys/block/sd[a-z]/removable 檔案內容是 0 or 1 10/19 14:25
lantw44: 我的 sdc 是 usb 可是 removable 是 0 耶 10/19 14:27
我們公司的usb和hd都是可以隨插隨拔的 不過我看了removable這個檔案 的確硬碟的是 0 usb的是 1 請問這個方法會有例外還是bug嗎? 不然這個方法不錯唷^^ ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:40:44
kenduest: 那換個方式,ls -l 看一下 /dev/disk/by-id/usb* 10/19 14:34
公司電腦的/dev下 沒有disk這個目錄耶,是linux版本不一樣嗎?? ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:42:09
kenduest: 你用什麼系統為何沒 /dev/disk ? 這已經是 udev 通用的 10/19 14:46
kenduest: 你該不會是特別的嵌入式系統 ? 10/19 14:47
kenduest: lsblk 都沒有,感覺你的系統是客置化特別版本 10/19 14:48
是燒在機上盒的linux,所以應該算蠻特別的吧? ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:52:43
brli7848: busybox吧?不是完整的coreutils 10/19 15:11
恩,在下tftp指令時,有看到busybox這個字眼 然後下ps -A 指令後,有看到udevd這個程序在執行 ※ 編輯: awpadam (61.216.7.85), 10/19/2017 15:18:49
filiaslayers: 我的外接硬碟removable參數是0 10/19 15:23
filiaslayers: 你要不要測一下外接硬碟看看 10/19 15:23
可能跟接頭有關吧,外接硬碟是接usb的接頭,用的驅動應該不一樣 我們公司的硬碟不會是接usb孔的 ※ 編輯: awpadam (61.216.7.85), 10/19/2017 15:36:43
Bencrie: udevadm info -n /dev/sdb --attribute-walk |grep 10/19 15:48
Bencrie: usb-storage 有找到東西就是 USB 隨身碟 10/19 15:48
Bencrie: 或者 cat /sys/block/sdb/removable 10/19 15:50
Bencrie: 啊 .. 上面有人推過了 orz 10/19 15:51
謝謝你^^ ※ 編輯: awpadam (61.216.7.85), 10/19/2017 15:59:12
kingofsdtw: https://goo.gl/SyvVx7 10/21 14:32
kingofsdtw: Line 3286 10/21 14:34
danny8376: Busybox啊 沒udev的話 10/22 01:40
danny8376: 一個方法是分析dmesg 10/22 01:40
danny8376: 或者可以試試 10/22 01:40
danny8376: readlink -f /sys/block/sdX/device 10/22 01:41
danny8376: device的路徑如果有usb就是usb 10/22 01:41
danny8376: 內接則應該會是ata 除非你走SAS XD 10/22 01:42
danny8376: 喔 PCIe的手上沒得試 所以我也不確定(? 10/22 01:42
Bencrie: PCIe 的會叫 nvme0n1 吧 10/22 02:31