hdiutil提供五种创建.dmg方法:一、创建空白加密APFS映像;二、将文件夹制作为UDZO压缩只读映像;三、创建动态扩容的稀疏加密映像;四、从磁盘设备制作位级镜像;五、创建区分大小写的APFS映像。

如果您需要在Mac上通过命令行高效创建各类磁盘映像(.dmg文件),但不确定hdiutil的具体用法与参数组合,则可能是由于缺乏对create、convert、makehybrid等核心子命令的系统性掌握。以下是针对不同需求场景的多种hdiutil创建方法:
一、使用hdiutil创建空白加密磁盘映像
该方法生成一个预分配大小、带AES加密、可挂载为读写卷的.dmg文件,适用于构建安全临时工作区或密码保护存储空间。
1、打开“应用程序 > 实用工具 > 终端”。
2、输入以下命令(将500m替换为所需容量,如2g、10g;SecureVault替换为期望卷标;output.dmg替换为完整保存路径):
hdiutil create -size 500m -encryption AES-256 -stdinpass -volname SecureVault -fs APFS output.dmg
3、按回车后,终端将提示输入密码;键入密码并再次回车确认,不显示明文。
4、命令执行完毕后,output.dmg即生成于指定路径;双击可挂载,输入密码后即可访问卷宗。
二、使用hdiutil将现有文件夹直接制作为压缩只读DMG
此方式跳过手动拖入步骤,直接将整个文件夹结构封装为高压缩率的UDZO格式.dmg,适合分发软件包或归档资料。
1、确保目标文件夹路径中不含中文、空格或特殊字符;推荐使用绝对路径,例如/Users/yourname/Documents/MyApp。
2、在终端中执行以下命令(替换/path/to/folder为实际文件夹路径,/path/to/archive.dmg为输出路径):
hdiutil create -srcfolder /path/to/folder -format UDZO /path/to/archive.dmg
3、等待进度完成;生成的.dmg文件为只读格式,双击挂载后内容不可修改,但加载速度快、体积小。
三、使用hdiutil创建动态扩容的稀疏加密映像
稀疏映像(.sparseimage)初始仅占用少量磁盘空间,随写入数据自动增长,适合长期存储且容量需求不确定的场景,同时支持完整加密。
1、启动终端,运行以下命令(-type SPARSE指定稀疏类型,-volname设定挂载名,-agentpass启用钥匙串密码管理):
hdiutil create -type SPARSE -size 1g -encryption AES-128 -agentpass -volname WorkSpace -fs APFS /path/to/WorkSpace.sparseimage
2、执行后系统会调用钥匙串访问界面,要求设置并确认密码;勾选“始终允许”可避免后续重复授权。
3、生成完成后,双击该.sparseimage文件即可挂载为桌面新卷;所有写入操作均实时加密,推出后自动封存。
四、使用hdiutil从磁盘设备或已挂载卷创建精确镜像
该方法用于制作物理设备(如USB驱动器)或已挂载宗卷的逐扇区位复制映像,保留分区表、引导信息与全部元数据,适用于备份与取证。
1、先通过diskutil list命令识别目标设备标识符,例如/dev/disk2(务必确认无误,误选系统盘将导致严重后果)。
2、执行镜像创建命令(-nospotlight禁用Spotlight索引以加快速度,-format UDRW生成可重写映像):
hdiutil create -srcdevice /dev/disk2 -format UDRW -o /path/to/disk2_backup.dmg -nospotlight
3、操作期间请勿拔出设备或中断电源;完成提示出现后,.dmg文件即为该设备的完整位级副本。
五、使用hdiutil创建带自定义文件系统与区分大小写的APFS磁盘映像
开发人员常需严格区分大小写的文件系统以兼容Linux构建环境或Git仓库行为;hdiutil可精准指定APFS(区分大小写)格式,规避图形界面限制。
1、在终端中输入以下命令(注意:macOS 12+需使用APFS(区分大小写),旧版可用HFS+格式):
hdiutil create -size 2g -fs 'APFS (Case-sensitive)' -volname DevEnv -type SPARSE /path/to/DevEnv.sparseimage
2、命令成功后,该.sparseimage挂载时将呈现区分大小写的文件系统行为,例如file.txt与File.TXT将被识别为两个独立文件。
3、如需验证,可在挂载卷中执行touch test.TXT && touch test.txt,随后ls | wc -l应返回2。

















