Objective C Mac: определить, есть ли на основном диске более одного раздела?

Как я могу определить, есть ли на основном диске компьютера более одного раздела? (например: Bootcamp, двойная загрузка Linux или другой раздел Mac OS)

Я пытался использовать структуру арбитража дисков (загружая все диски и разделы, а затем подсчитывая), но в зависимости от компьютера у меня было обнаружено либо 3 (Mavericks), либо 0 (Yosemite) разделов на основном диске (путь монтирования которого "/") . Я полагаю, это связано с CoreStorage.


person zigoingoin    schedule 17.08.2015    source источник
comment
Я думаю, что правильный ответ будет зависеть от того, чего вы на самом деле пытаетесь достичь. Макет загрузочного диска OS X может сильно различаться в зависимости от формата диска, таблицы разделов и от того, используются ли группы томов CoreStorage.   -  person Mark Bessey    schedule 17.08.2015
comment
@MarkBessey спасибо за ваш ответ. Идея состоит в том, чтобы иметь возможность определять, есть ли на компьютере пользователя больше раздела, чем исходный, и делать это для каждой новой модели Mac. У меня есть программа, которую мне нужно запускать только в том случае, если компьютер находится в начальной конфигурации (без добавленного раздела).   -  person zigoingoin    schedule 17.08.2015


Ответы (2)


OS X использует специальные скрытые разделы для различных вещей, таких как драйверы EFI/Open Firmware RAID и т. д., в дополнение к стандартным разделам HFS+. И это даже без учета CoreStorage.

Все, что вы пытаетесь сделать, вероятно, обречено на провал по двум причинам:

  • Количество разделов автоматически изменяется ОС на регулярной основе в зависимости от конфигурации оборудования в ответ на незначительные события, такие как обновления программного обеспечения, обновления прошивки и т. д.
  • Пользователь может так же легко загрузить другую ОС с внешнего диска, поэтому, что бы вы ни пытались предотвратить (может быть, какая-то защита от копирования?), ища другую ОС, вам не удастся предотвратить это в туда.

Другими словами, я бы посоветовал даже не думать о том, чтобы пойти по этому пути. Так лежит безумие.

Лучшее, что вы можете реально сделать, это иметь черный список типов разделов и/или GUIDS, которые вы игнорируете, включая EFI, Apple_Boot (восстановление), Apple_CoreStorage, GUID_partition_scheme и, возможно, несколько других, в зависимости от того, хотите ли вы разрешить RAID. Вот список GUID, которые могут помочь:

https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUID

А если серьезно, просто не делай этого.

person dgatwood    schedule 23.08.2015

Вы можете использовать некоторую библиотеку с открытым исходным кодом. Лучший кандидат, я думаю, расстается.

person Cynichniy Bandera    schedule 23.08.2015