Программно получить информацию о OSX Fusion Drive

Я работаю над проектом, который связывает диски (и связанные с ними статистические данные, например отображаемые iostat) и разделов для монтирования точек, но возникают проблемы с тем, как OS X делает Fusion Drive.

Мне удалось собрать информацию о дисках и разделах из IO Registry и Disk Arbitration Framework. Точно так же я смог сопоставить диски и точки монтирования, используя statfs (или mount или же df команд). Тем не менее, отсутствует ссылка, где 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

Статистика IORegistry от iostat (чтение / запись / чтение байтов / запись байтов, время, потраченное на передачу и т. д.) связаны с 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, Я провел несколько часов в поисках здесь и в другом месте для любого способа общения disk1 с disk0s2, Исходный код для diskutil по-видимому, в DiskManagement Рамки, которые не являются публичными.

Есть ли способ, кроме текстового разбора выходных данных выше diskutil list команда, чтобы связать подключенный (виртуальный) диск Fusion с его базовым (физическим) разделом?

1 ответ

Решение

После нескольких часов копания я обнаружил ключевой факт, что Fusion Drives (а также полнодисковое шифрование FileVault, представленное в Lion) используют функцию под названием "Core Storage" (или CoreStorage), где один или несколько физических дисков / разделов связан с виртуальным диском.

Похоже, что не существует общедоступного API для получения информации о CoreStorage программным путем, и какие команды там редко документированы.

Пока еще командная строка, diskutil cs list предоставляет достаточно разбираемой информации, чтобы установить нужные мне соединения.

AP DF с примерами и много дополнительной информации можно найти здесь.

Другие вопросы по тегам