如何在 Linux 上獲取連接的塊設備
有哪些 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
設備文件名。關於這方面的一些資訊記錄在這裡,但是