Я пытаюсь внести тонкие изменения в таблицу разделов диска на Mac; в частности, мне нужно изменить тип раздела. diskutil
не поддерживает это, поэтому я не могу его использовать. Он работает нормально (например, через модифицированную утилиту командной строки gpt
), если диск не используется. Если же он используется, то при открытии файла устройства происходит сбой:
int fd = open("/dev/disk1", O_RDWR);
fd
равно -1 и errno
указывает на ошибку "ресурс занят".
Я понимаю, что могу перезагрузить машину с другого диска, изменить оригинальный диск оттуда, а затем загрузиться обратно. Однако это не совсем легко автоматизировать/надежно сделать изнутри моего приложения. Кроме того, diskutil
не имеет проблем с редактированием таблицы разделов живого устройства, как и программа установки bootcamp.
Есть ли известный способ сделать это? В худшем случае, я могу попытаться сделать это в ядре, но kexts не предназначены для выполнения одноразовых действий, а то, что мне нужно сделать, действительно концептуально просто в пользовательском пространстве, но довольно сложно в ядре.
Есть идеи?
Примечание: Я запускаю всё с sudo
, так что это не должно быть проблемой прав доступа.