是否有可能仅使用IO注册表通过BSD名称获得文件系统类型和磁盘挂载路径?



我知道可以使用磁盘仲裁框架和POSIXstatfs()函数通过磁盘的BSD名称找到文件系统类型(apfs, hfs, msdos等)和磁盘的挂载路径。

然而,我想知道这个信息是否也写在IO注册表的某个地方,这样我就可以只使用IOKit框架提取它?

我已经搜索了我自己的Mac的IO注册表,但没有找到这样的东西,但仍然怀疑它在那里。

任何想法?

I/O Kit不涉及挂载的文件系统:这发生在BSD层,所以IOKit唯一看到的是是来自BSD子系统的对设备的读、写和ioctls,并由IOMediaBSDClient转换为IOStorage方法调用。I/O Kit不关心哪个文件系统发出这些IO操作。

但是,它确实有一个"内容提示"的概念。(kIOMediaContentHintKey)属性在IOMedia节点上。内容提示影响哪个文件系统将尝试挂载块设备。

内容提示来自分区或卷管理方案:在GPT磁盘上,内容提示将是分区类型GUID。每个文件系统实现都会发布它正在寻找的内容提示,并且操作系统(磁盘仲裁)会为任何声称支持新出现的块设备节点的内容提示的文件系统运行mount命令。

注意内容提示只是一个提示:

  • 不能保证块设备实际上包含任何特定类型的可挂载文件系统。
  • 即使块设备包含可挂载的文件系统,I/O Kit也不知道它当前是否已挂载。(除了IOStorage节点可能是"开放的";或者不,但是任何进程都可以打开块设备,它不必是内核中的文件系统实现来做这件事。
  • GPT分区类型guid和MBR分区类型编号不一定唯一。

所以简而言之,不,来自BSD和磁盘仲裁子系统的精确等效的挂载点信息在I/O Kit中不存在,尽管块设备声明包含一些关于文件系统类型的信息。

最新更新