如何在 Linux 上获取连接的块设备

如何在 Linux 上获取连接的块设备

有哪些 API/接口可用于此?我想我想要sysfs,但是根据不同的内核文档存在,该接口可以概括为“不允许您使用任何实现细节。”,并且它允许您使用的内容完全没有记录。

具体来说我想找到连接的堵塞设备(显然我不允许知道其存在,作为实现细节?),我想知道块设备具有哪些属性(我可以依赖跨版本的现有属性)及其内容。

只是真正有帮助的东西使用sysfs,但完全没有文档记录。

答案1

没有其他人回答这个问题,但我已经想出了一个解决方案,所以回答:

我认为最正确的方法是使用/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 年了。所以..

相关内容