以编程方式获取OSX Fusion Drive信息

时间:2016-08-30 07:33:45

标签: macos mount iostat diskarbitration

我正在开发一个项目,该项目将驱动器(及其关联的统计信息,例如iostat显示的那些)和分区与挂载点相关联,但遇到了OS X执行问题的问题{ {3}}

我能够从Fusion DriveIO Registry收集有关驱动器和分区的信息。同样,我已经能够使用Disk Arbitration Framework(或mountdf命令)关联驱动器和挂载点。但是,Fusion Drive输入图片时缺少链接。这是diskutil list的示例输出:

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macintosh HD            999.7 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +999.3 GB   disk1
                                 Logical Volume on disk0s2
                                 FA33A826-C98E-425A-BCF1-9A68A926D36E
                                 Unlocked Encrypted

来自iostat的IORegistry统计信息(读/写/字节读/写字节,转移时间等)与上述输出中的disk0相关联。但是,df(或等效的程序化statfs函数)将/挂载点与/dev/disk1相关联:

$ df
Filesystem                        512-blocks       Used  Available Capacity  iused     ifree %iused  Mounted on
/dev/disk1                        1951825920  575057552 1376256368    30% 71946192 172032046   29%   /

我希望能够将/上的文件系统的读/写与物理驱动器disk0相关联。我已经花了几个小时在这里和其他地方搜索任何方式将disk1disk0s2相关联。 diskutil的源代码显然位于DiskManagement框架中,该框架不公开。

除了以文本方式解析上述diskutil list命令的输出之外,还有什么方法可以将已安装(虚拟)的融合驱动器与其底层(物理)分区相关联吗?

1 个答案:

答案 0 :(得分:1)

经过几个小时的挖掘后,我发现了一个关键事实:Fusion Drives(以及Lion中引入的全盘FileVault加密)利用了一个名为“Core Storage”(或CoreStorage)的功能,其中有一个或多个物理磁盘/分区链接到虚拟磁盘。

似乎没有任何公开的API可以通过编程方式获取CoreStorage信息,而且有哪些命令很少记录。

虽然仍然是命令行,但diskutil cs list提供了足够的可解析信息来建立我需要的连接。

P DF with examples and a lot more information can be found here