【发布时间】:2012-02-09 16:47:59
【问题描述】:
我正在尝试对 Mac 上磁盘的分区表进行细微的修改;特别是,我需要更改分区的类型。 diskutil 不支持这个,所以我不能用。如果磁盘未在使用中,它可以正常工作(例如,通过修改后的gpt 命令行实用程序)。如果是,则打开设备文件失败:
int fd = open("/dev/disk1", O_RDWR);
fd 为 -1,errno 表示错误“资源忙”。
我意识到我可以从另一个驱动器重新启动机器,从那里修改原始磁盘,然后重新启动。然而,从我的应用程序内部实现自动化/可靠并不容易。另外diskutil修改直播设备分区表没有问题,bootcamp安装程序也没有。
有没有已知的方法可以做到这一点?最坏的情况,我可以尝试在内核中进行,但 kext 并不是真正为一次性完成而设计的,我需要做的实际上是在用户空间中概念上非常简单,但在内核中却很难。
有什么想法吗?
注意:我使用sudo 运行所有程序,所以这应该不是权限问题。
【问题讨论】:
-
你看过 fdisk 的源码了吗?
-
fdisk 实际上不适用于我测试过的任何 Mac。它试图打开一个不存在的文件
/usr/standalone/i386/boot0。即使除此之外,它似乎也没有做任何聪明的事情。 -
好的,所以如果不是 fdisk,那么 freebsd 等价物(我猜是苹果的磁盘工具前端)
-
Intel Mac 默认使用 GUID 分区方案,因此我使用源自 BSD 的
gpt实用程序进行了实验。diskutil似乎不是gpt的前端,但是,正如我所提到的,gpt实际上并不起作用。diskutil的来源不可用。