[問題] 判斷 /dev/sdx 的裝置類型

看板Linux作者 (adam!)時間8年前 (2017/10/19 14:20), 8年前編輯推噓7(7018)
留言25則, 7人參與, 8年前最新討論串1/1
各位先進好 小弟最近有個工作 需要用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

10/19 14:24, 8年前 , 1F
lsblk -S 似乎不錯
10/19 14:24, 1F
這個指令,上網搜尋好像很符合我的需求 但是在我們公司的電腦下是 : -sh: lsblk: command not found 而在我自己另一台電腦下則可以 可惜的是我們沒有權限在公司電腦系統上 安裝 或 修改 任何設定= =

10/19 14:25, 8年前 , 2F
一般 usb 是可以拔除的,通常可以看
10/19 14:25, 2F

10/19 14:25, 8年前 , 3F
/sys/block/sd[a-z]/removable 檔案內容是 0 or 1
10/19 14:25, 3F

10/19 14:27, 8年前 , 4F
我的 sdc 是 usb 可是 removable 是 0 耶
10/19 14:27, 4F
我們公司的usb和hd都是可以隨插隨拔的 不過我看了removable這個檔案 的確硬碟的是 0 usb的是 1 請問這個方法會有例外還是bug嗎? 不然這個方法不錯唷^^ ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:40:44

10/19 14:34, 8年前 , 5F
那換個方式,ls -l 看一下 /dev/disk/by-id/usb*
10/19 14:34, 5F
公司電腦的/dev下 沒有disk這個目錄耶,是linux版本不一樣嗎?? ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:42:09

10/19 14:46, 8年前 , 6F
你用什麼系統為何沒 /dev/disk ? 這已經是 udev 通用的
10/19 14:46, 6F

10/19 14:47, 8年前 , 7F
你該不會是特別的嵌入式系統 ?
10/19 14:47, 7F

10/19 14:48, 8年前 , 8F
lsblk 都沒有,感覺你的系統是客置化特別版本
10/19 14:48, 8F
是燒在機上盒的linux,所以應該算蠻特別的吧? ※ 編輯: awpadam (61.216.7.85), 10/19/2017 14:52:43

10/19 15:11, 8年前 , 9F
busybox吧?不是完整的coreutils
10/19 15:11, 9F
恩,在下tftp指令時,有看到busybox這個字眼 然後下ps -A 指令後,有看到udevd這個程序在執行 ※ 編輯: awpadam (61.216.7.85), 10/19/2017 15:18:49

10/19 15:23, 8年前 , 10F
我的外接硬碟removable參數是0
10/19 15:23, 10F

10/19 15:23, 8年前 , 11F
你要不要測一下外接硬碟看看
10/19 15:23, 11F
可能跟接頭有關吧,外接硬碟是接usb的接頭,用的驅動應該不一樣 我們公司的硬碟不會是接usb孔的 ※ 編輯: awpadam (61.216.7.85), 10/19/2017 15:36:43

10/19 15:48, 8年前 , 12F
udevadm info -n /dev/sdb --attribute-walk |grep
10/19 15:48, 12F

10/19 15:48, 8年前 , 13F
usb-storage 有找到東西就是 USB 隨身碟
10/19 15:48, 13F

10/19 15:50, 8年前 , 14F
或者 cat /sys/block/sdb/removable
10/19 15:50, 14F

10/19 15:51, 8年前 , 15F
啊 .. 上面有人推過了 orz
10/19 15:51, 15F
謝謝你^^ ※ 編輯: awpadam (61.216.7.85), 10/19/2017 15:59:12

10/21 14:32, 8年前 , 16F
10/21 14:32, 16F

10/21 14:34, 8年前 , 17F
Line 3286
10/21 14:34, 17F

10/22 01:40, 8年前 , 18F
Busybox啊 沒udev的話
10/22 01:40, 18F

10/22 01:40, 8年前 , 19F
一個方法是分析dmesg
10/22 01:40, 19F

10/22 01:40, 8年前 , 20F
或者可以試試
10/22 01:40, 20F

10/22 01:41, 8年前 , 21F
readlink -f /sys/block/sdX/device
10/22 01:41, 21F

10/22 01:41, 8年前 , 22F
device的路徑如果有usb就是usb
10/22 01:41, 22F

10/22 01:42, 8年前 , 23F
內接則應該會是ata 除非你走SAS XD
10/22 01:42, 23F

10/22 01:42, 8年前 , 24F
喔 PCIe的手上沒得試 所以我也不確定(?
10/22 01:42, 24F

10/22 02:31, 8年前 , 25F
PCIe 的會叫 nvme0n1 吧
10/22 02:31, 25F
文章代碼(AID): #1Pw4GU63 (Linux)
文章代碼(AID): #1Pw4GU63 (Linux)