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

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

Мне удалось собрать информацию о дисках и разделах из Реестр ввода-вывода и Дисковый арбитраж Каркас. Точно так же я смог сопоставить диски и точки монтирования, используя 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 Framework, который не является общедоступным.

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


person Daniel Widdis    schedule 30.08.2016    source источник


Ответы (1)


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

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

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

PDF с примерами и другой информацией можно найти здесь.

person Daniel Widdis    schedule 30.08.2016