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

Programmatically get OSX Fusion Drive information

我正在开发一个项目,其中 link 驱动器(及其相关统计数据,例如 iostat 显示的数据)和挂载点分区,但 运行 进入OS X 执行 Fusion Drive.

的方式有问题

我已经能够从 IO Registry and Disk Arbitration Framework. Similarly, I have been able to correlate drives and mount points using statfs(或 mountdf 命令)收集有关驱动器和分区的信息。但是,在 Fusion Drive 进入图片的位置缺少 link。这是 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 统计信息(reads/writes/bytes read/bytes 写入、传输时间等)与上述输出中的 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%   /

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

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

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

似乎没有任何公开可用的 API 以编程方式获取 CoreStorage 信息,并且很少记录其中的命令。

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

A​​ PDF with examples and a lot more information can be found here.