系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

hdiutil

创建、挂载、转换和校验磁盘镜像,并管理加密 DMG。

补充说明

hdiutil 操作的是磁盘镜像容器,常见动词有 create、attach、detach、convert、verify、compact、resize、chpass。attach 把镜像接到系统,可能自动挂载其中的卷;detach 卸载并断开镜像;create -srcfolder 直接把目录打包成镜像;convert 在 UDRW、UDZO、UDSP 等格式间转换。Linux 没有同名工具,通常用 dd/mkfs 加 loop 设备达到类似目的。

create 的格式决定用途:默认空镜像通常是可读写 UDRW,-format UDZO 生成压缩只读镜像,-type SPARSE 生成按需增长的稀疏镜像。-srcfolder 会创建新文件系统并复制内容,适合制作分发镜像;-size 指定虚拟容量,创建后可以 attach 再写入。

加密镜像用 -encryption AES-256 配合 -stdinpass,密码从标准输入或终端提示读取,避免出现在 ps 的参数里。密码丢失后没有恢复密钥就无法打开镜像,重要镜像必须另外保存密码或使用证书恢复。

影响范围:attach 会把镜像中的卷挂到 /Volumes,可能触发 Spotlight 索引和 Finder 窗口;detach -force 会忽略仍在使用镜像的进程,未落盘数据可能丢失;create -ov 会覆盖同名镜像文件。 先备份:覆盖前保留原镜像或改名;加密镜像务必确认密码已妥善保存。 如何回滚:被 -ov 覆盖的文件无法恢复,只能从备份取回;强制卸载后重新挂载并用 diskutil verifyVolume 检查文件系统。

常用示例

# 把目录打包成压缩只读镜像,适合分发
% hdiutil create -srcfolder ~/Projects/app -format UDZO -o app.dmg

# 创建 1 GB 可读写 APFS 镜像,默认类型为 UDRW
% hdiutil create -size 1g -fs APFS -volname Work work.dmg

# 创建 AES-256 加密镜像,密码通过标准输入读取
% hdiutil create -encryption AES-256 -stdinpass -size 1g -fs APFS -volname Vault vault.dmg

# 只读挂载且不在 Finder 中显示,适合脚本处理
% hdiutil attach -nobrowse -readonly app.dmg

# 转换格式,生成压缩只读副本
% hdiutil convert work.dmg -format UDZO -o work-compressed.dmg

# 校验只读镜像的校验和;它不检查内部文件系统一致性
% hdiutil verify app.dmg

# 卸载镜像,设备名或挂载点都可以
% hdiutil detach /Volumes/Work

# 跳过校验直接挂载;仅用于确认可信的本地镜像
% hdiutil attach -noverify -nobrowse trusted.dmg

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. hdiutil verify 检查的是镜像的哪一层?文件系统坏了该用什么命令?
  2. 为什么 create -ov 和 detach -force 都有数据风险?
  3. 加密镜像的密码丢失后还能恢复吗?应该怎样避免?
答案
  1. 检查容器校验和;文件系统一致性用 diskutil verifyVolume。
  2. -ov 直接覆盖同名文件,-force 忽略占用强制断开,可能丢失未落盘数据。
  3. 不能恢复;使用 -stdinpass 并另行安全保存密码或证书恢复材料。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令