有哪些 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 年了。所以..