抱歉,隐藏内容 回复 后可见

本文将简单介绍macOS系统的diskutil命令介绍和使用,以及事例创建一个带pe分区的黑苹果系统dmg安装镜像的过程。

MacOS 系统自带一个图形化的磁盘管理工具(Disk Utility),同时还有一个命令行版本的 diskutil。通过该命令的使用,可以很快捷地对本地磁盘进行擦除数据、调整分区大小、格式化等操作。

 

diskutil 命令的格式为:diskutil <verb> <options>

不带任何选项的 diskutil 命令会列出该命令支持的 verb 及其对应的介绍:

~ diskutil
Disk Utility Tool
Utility to manage local disks and volumes

Usage:  diskutil [quiet] <verb> <options>, where <verb> is as follows:

     list (List the partitions of a disk)
     info[rmation](Get information on a specific disk or partition)
     listFilesystems      (List file systems available for formatting)
     activity     (Continuous log of system-wide disk arbitration)

     u[n]mount    (Unmount a single volume)
     unmountDisk  (Unmount an entire disk (all volumes))
     eject(Eject a disk)
     mount(Mount a single volume)
     mountDisk    (Mount an entire disk (all mountable volumes))

     rename[Volume]       (Rename a volume)

     verifyVolume (Verify the file system data structures of a volume)
     repairVolume (Repair the file system data structures of a volume)
     verifyDisk   (Verify the components of a partition map of a disk)
     repairDisk   (Repair the components of a partition map of a disk)

     eraseDisk    (Erase an existing disk, removing all volumes)
     eraseVolume  (Erase an existing volume)
     reformat     (Erase an existing volume with same name and type)
     eraseOptical (Erase optical media (CD/RW, DVD/RW, etc.))
     zeroDisk     (Erase a disk, writing zeros to the media)
     randomDisk   (Erase a disk, writing random data to the media)
     secureErase  (Securely erase a disk or freespace on a volume)

     partitionDisk((re)Partition a disk, removing all volumes)
     resizeVolume (Resize a volume, increasing or decreasing its size)
     splitPartition       (Split an existing partition into two or more)
     mergePartitions      (Combine two or more existing partitions into one)

     appleRAID <verb>     (Perform additional verbs related to AppleRAID)
     coreStorage <verb>   (Perform additional verbs related to CoreStorage)
     apfs <verb>  (Perform additional verbs related to APFS)

diskutil <verb> with no options will provide help on that verb

上面列出的 verb 主要分为以下几类:

获取磁盘和分区信息:如 list、info、activity 等
挂(卸)载磁盘或卷:如 mount、eject、mountDisk 等
验证、修复磁盘分区或文件系统:如 verifyVolume、repairDisk 等
分区操作:如 splitPartitions、mergePartitions 等
其他:如 appleRAID、apfs 等
如不清楚某个 verb 的具体命令格式,可以直接使用 diskutil 命令加上该 verb 并且不带任何其他选项,命令行即输出该 verb 的使用介绍。如 eraseDisk 的使用介绍:

~ diskutil eraseDisk
Usage:  diskutil eraseDisk format name [APM[Format]|MBR[Format]|GPT[Format]]
MountPoint|DiskIdentifier|DeviceNode

Completely erase an existing whole disk.  All volumes on this disk will be
destroyed.  Ownership of the affected disk is required.

Format is the specific file system name you want to erase it as (HFS+, etc.).

Example: diskutil eraseDisk JHFS+ UntitledUFS disk3

 

获取磁盘分区信息

list

可以使用 list 选项简要列出 MacOS 系统的磁盘及分区信息,包括分区类型(TYPE)、分区名(NAME)、容量大小(SIZE)和标志符(IDENTIFIER)等。如此时系统挂载了 dmg 映像文件,其信息也会显示在列表中(下表中的 disk3 )。

diskutil list

如上图,可以列出系统中所有在用的磁盘列表,以及每个磁盘的具体分区信息,还可以使用具体命令查看某个分区的,比如 diskutil list disk4 使用,这样只会列出第四个盘的具体信息。

 

info

info 选项可以列出指定磁盘或分区的详细信息。如查看 disk2 的信息:

diskutil info disk2

输出的信息包括设备标志符(Device Identifier)、设备节点(Device Node)、设备名(Device / Media Name)、容量大小(Disk Size)、块大小(Block Size)等。

也可以查询具体分区的信息,比如使用diskutil info disk2s2 ,这样就是查询第二个磁盘的第二个分区具体信息。

 

擦除磁盘或分区

eraseDisk 选项用于擦除整个磁盘并重新格式化。该命令的格式为:

diskutil eraseDisk <format> <name> [APM|MBR|GPT] MountPoint|DiskIdentifier|DeviceNode

format 用于指定擦除数据后需要重新建立的文件系统类型。可以为 %noformat% 来跳过初始化文件系统的操作。其他支持的类型可以通过 listFilesystems 选项查看。

具体使用举个例子,比如创建一个15gb大小,可以包含EFI以及PE维护盘的dmg镜像文件

打开 启动台 - 其他 - 磁盘工具,这个是macOS自带的磁盘工具,点 文件 - 新建映像 - 新建空白映像,新建一个15GB大小,名字叫macos就可以的一个空白dmg文件。

等待创建完成后,在终端 输入 diskutil list ,可以看到刚才创建的虚拟磁盘分区,是disk4

可以看到现在已经创建好了一个GPT格式,自带EFI分区的安装镜像,其中可以用来放系统安装文件.app的空间有14.7GB

接下来要说两个格式化命令,第一个是格式化为MBR格式分区的,基本用不上 ,主要是用下面的GPT的

MBR

sudo diskutil eraseDisk ExFAT StarkyDisk MBR disk4

GPT

diskutil eraseDisk ExFAT StarkyDisk disk4

完成后效果

以及创建磁盘分区命令partionDisk

diskutil partitionDisk MountPoint|DiskIdentifier|DeviceNode
[numberOfPartitions] [APM|MBR|GPT]
[part1Format part1Name part1Size part2Format part2Name part2Size part3Format part3Name part3Size ...]

命令选项中的 Size 用来指定分区的大小(以扇区数计量),合法的值包括带有指定后缀的浮点数。其中的后缀有 B(ytes), S(512-byte-
blocks), K(ilobytes), M(egabytes), G(igabytes), T(erabytes), P(etabytes),也可以是 % 来表示对整个磁盘的占比。
最后一个分区会自动扩展到占用整个磁盘的剩余空间,如果想为最后一个分区指定固定的大小,可在其后再创建一个类型为『free space』的分区。

sudo diskutil partitionDisk disk4 3 MBR MS-DOS F01 3G JHFS+ F02 3G "Free Space" F03 0
Started partitioning on disk4

比如上面的参考代码,把第三个分区用mbr格式分成三个部分,一个fat32 3g 一个 hfs+ 3g。一个空闲分区

 

不过主要的可以看下面的这个

sudo diskutil splitPartition disk2s2 2 MS-DOS F01 1g JHFS+ F02 13.8g

把刚才的第二个分区重新分区,分成一个fat32的分区,1g大小,还有一个hfs+,13.8g。

 

还可以用mergePartitions 选项用来将多个已存在的分区合并为一个大的分区。该选项的格式为:

diskutil mergePartitions [force] format name DiskIdentifier|DeviceNode DiskIdentifier|DeviceNode

第一个分区参数为起始分区,第二个分区参数为结束分区。这两个分区之间的所有分区都将被合并。
如果 force 选项没有被指定,且合并前的第一个分区是可调整大小的文件系统(如 JHFS+),则第一个分区上的数据会保留到合并后的分区。

diskutil mergePartitions JHFS+ Starky disk4s2 disk4s4

 

以及用resizeVolume命令调整分区大小,不过不会减小dmg总大小,而是把省下来的空间变成未分配了。

sudo diskutil resizeVolume disk4s2 4g

比如上面的命令,把第二个分区分出4g出来。

 

最后,可以修改卷标,比如下面的命令和效果图,分出了一个1g的pe分区,以及剩下的用来放苹果安装的app,最后把pe文件复制到pe分区,efi文件复制到efi分区。

接下来用苹果自带的磁盘工具转化一下,改成压缩,保存出来的新文件就可以上传到网盘了。

pe文件可以来这里下载:https://www.mfpud.com/tools/wepe/

EFI可以来这里:https://www.mfpud.com/opencore/ocefi/

sudo diskutil splitPartition disk4s2 2 MS-DOS PE 1g JHFS+ macOS 13.7g
sudo diskutil splitPartition disk3s2 2 FAT32 PE 0.4g JHFS+ macOS 9.2g