Opening disk device file for write access on Mac OS X

Я пытаюсь внести тонкие изменения в таблицу разделов диска на Mac; в частности, мне нужно изменить тип раздела. diskutil не поддерживает это, поэтому я не могу его использовать. Он работает нормально (например, через модифицированную утилиту командной строки gpt), если диск не используется. Если же он используется, то при открытии файла устройства происходит сбой:

int fd = open("/dev/disk1", O_RDWR);

fd равно -1 и errno указывает на ошибку "ресурс занят".

Я понимаю, что могу перезагрузить машину с другого диска, изменить оригинальный диск оттуда, а затем загрузиться обратно. Однако это не совсем легко автоматизировать/надежно сделать изнутри моего приложения. Кроме того, diskutil не имеет проблем с редактированием таблицы разделов живого устройства, как и программа установки bootcamp.

Есть ли известный способ сделать это? В худшем случае, я могу попытаться сделать это в ядре, но kexts не предназначены для выполнения одноразовых действий, а то, что мне нужно сделать, действительно концептуально просто в пользовательском пространстве, но довольно сложно в ядре.

Есть идеи?

Примечание: Я запускаю всё с sudo, так что это не должно быть проблемой прав доступа.

5
задан Charles 19 February 2012 в 17:03
поделиться