Linux

如何在 Linux 上獲取連接的塊設備

  • March 4, 2020

有哪些 API/介面可用於此?我想我想要 sysfs,但是根據存在的各種核心文件,該介面可以概括為“您不允許使用任何這些,實現細節。”,它允許您使用的一點是完全無證。

具體來說,我想找到連接的設備(顯然我不允許知道存在,作為實現細節?),我想知道塊設備有哪些屬性(我可以依賴於跨版本的現有屬性),及其內容。

只是對使用sysfs 有實際幫助的東西,但完全沒有記錄。

沒有其他人回答過這個問題,但我想出了一個解決方案,所以回答:

我認為最正確的方法是使用/sys/class/block/*,其中包含可用的塊設備(符號連結)。

它也有它們的分區,您可以忽略這些分區,並且可以通過partition文件的存在來辨識它們。這個文件是無證的,所以 YMMV.

如果您以後想要它們,您可以通過查找包含文件的目錄來獲取特定的設備分區partition。例如/sys/devices/**/sda/*/partition。該文件還包含分區。這樣做意味著您不必了解有關設備/分區核心命名方案的任何資訊,因此我推薦它。

請注意,/sys/block至少在我的系統上沒有分區,但您不應該依賴它。

在獲得可用的塊設備後,您可能想對它們做一些事情,因此要獲取它們的設備文件major:minor,您可以從未記錄的文件中讀取dev並簡單地在/dev.

如果您想要它們的大小,您可以使用未記錄的size文件,其中包含device size / 512. 總是 512。分區也有這個。分區也有一個start欄位,它partition start / 512在磁碟上。這些被“記錄”在這個被遺忘的更新檔中,如果可以相信這意味著這些文件已經穩定並且沒有記錄大約 20 年了。所以..🤷‍♀️

如果您想要設備型號,您可以使用類似的未記錄../../model文件,相對於/sys/devices/. 這可能會記錄在這裡,但老實說,我不知道這是否應該適用於此。

您還可以獲得設備目錄的名稱,即/sys/devices/**/sda塊設備的完整路徑,並且名稱sda可能存在於/dev.

但我不會依賴這個,技術上/dev可能有花哨的名字,所以我建議搜尋 dev 以匹配major:minor設備文件名。


關於這方面的一些資訊記錄在這裡,但是

引用自:https://unix.stackexchange.com/questions/566628