近几年已经比较少不使用 U 盘直接使用硬盘安装黑苹果的教程了。这可能和 U 盘越便宜、速度越快有关,也有可能跟此方法操作过于麻烦有关。
本文介绍写入原版 dmg 镜像到硬盘分区的方法 (不需要抹掉整个硬盘),主要用于不方便使用 U 盘安装的情况。
方法原理
教程开始前先介绍清楚此方法的基本原理:
为什么 dmg 镜像只能直接写入到 U 盘?因为 dmg 是硬盘镜像 (Disk Image),其原始数据是包含分区表的完整硬盘镜像,写入 U 盘就相当于硬盘对拷。前面加粗了原始数据,是要强调 dmg 是压缩格式,不能直接写入 U 盘。使用 TransMac 等工具写入其实是边解压成原始数据边写入。
既然 dmg 是带分区表的硬盘镜像,我们按照分区表提取出对应分区的数据,再写入硬盘分区就可以了,这个过程相当于分区对拷。
工具准备
首先我们需要把 dmg 转换成 raw img 以便提取内容。
Linux 可以使用 dmg2img 和 qemu-img,可从软件源安装,或者自行编译。Windows 似乎没有 dmg2img,不过也有 qemu-img,我使用的是 Cloudbase Solutions 提供的预编译的 qemu-img。
接下来是从 img 中提取分区数据,Linux 可以直接使用 loop mount 挂载,Windows 我使用的是 7-Zip
最后是写入分区,Linux 可以直接使用 dd,Windows 也有 dd for windows
操作步骤
以下教程针对 Windows 平台,相信各位 Linux 用户有能力理解并在 Linux 下操作。
1.dmg 转换成 raw img
打开命令行,切换到 qemu-img 的目录。
先执行 qemu-img --help
查看帮助。帮助很长,我们只需要关注 convert
命令的参数:
convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_id_or_name] [-l snapshot_param] [-S sparse_size] filename [filename2 [...]] output_filename |
以及最下面支持的格式:
Supported formats: dmg vpc host_device bochs blkverify blkdebug parallels file nbd vmdk vdi qcow2 qed cloop qcow vhdx sheepdog null-aio vvfat raw null-co |
可以看到是支持 dmg 和 raw 的。
接下来开始转换,我们只需要指定输入格式和输出格式即可:
qemu-img convert -f dmg -O raw <dmg文件名> <输出文件名> |
2.提取分区数据
用 7-Zip 打开刚刚转换的 img,可以看到有两个“文件”,点 Info 可以看到 Type 是 GPT。
这两个文件对应的是两个分区,我们需要的是 disk image.hfsx
这个文件,提取出来。
需要注意的是,不要直接拖放文件来提取,因为 7-Zip 会先提取到临时目录,再复制到你拖放的地方。
EFI System Partition.img
是 EFI 系统分区,大多数黑苹果镜像会在里面附带引导程序,可以用 7-Zip 直接打开提取文件。
3.写入硬盘分区
先准备一个至少 8GiB 的硬盘分区 (我自己准备了 16GiB,上图可以看到 disk image.hfsx
已经有 7.13GiB 了),分配盘符为 Z:
。如果分区已经格式化了,建议在磁盘管理中删除该分区重新新建,新建时选择不格式化。
请自行搜索使用磁盘管理压缩、新建分区的方法,在此不再赘述。
接下来以管理员身份运行命令行,切换到 dd 的目录。
执行 dd --list
可以查看所有硬盘分区,找到要写入的分区。如果已经分配了盘符,可以跳过这一步。
执行
dd if=<disk image.hfsx路径> of=<要写入的分区> bs=4M |
其中 <要写入的分区>
是上一步 list 找到的,如果分配了盘符 Z:
,可以直接写 \\.\z:
。
这一步开始写入数据到硬盘分区,请耐心等待。
4.设置分区 ID
最后需要把分区的 ID 设为 HFS。运行 diskpart
。
执行 list disk
查看所有硬盘,确认分区所在的硬盘编号。
执行 select disk <#>
,其中的 <#>
是上一步记下的硬盘编号。
执行 list part
查看所有分区,确认分区编号。
执行 select part <#>
,其中的 <#>
是上一步记下的分区编号。
如果是 GPT 分区表,执行 set id=48465300-0000-11AA-AA11-00306543ECAC
。
如果是 MBR 分区表,执行 set id=AF
。
教程到此结束,可以尝试启动 macOS 了。