创建、挂载、转换和校验磁盘镜像,并管理加密 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
hdiutil verify 校验的是镜像容器的校验和,不是内部文件系统。文件系统损坏要用 diskutil verifyVolume /Volumes/卷名。-noverify 会跳过挂载前的校验和检查,损坏或被篡改的镜像可能挂载出错误内容。只对本地可信镜像使用,下载来源不明时不要加。detach 报 Resource busy 时先退出使用镜像的进程、关闭 Finder 窗口和终端当前目录;-force 可能丢失未写入数据,只作为最后手段。create -ov 覆盖同名文件且不进入废纸篓。先 ls -l 确认目标,或让命令生成带日期的新文件名。-passphrase 已废弃,密码会出现在进程参数里被其他用户看到;使用 -stdinpass 或交互式提示。diskutil — 查看和校验镜像挂载出的卷。umount — 手动卸载镜像中的文件系统。mount — 查看镜像卷的挂载参数。xattr — 检查下载镜像的 quarantine 属性。mount — Linux 下 loop 设备挂载镜像的对照。合上页面,先回答,再展开对照。
hdiutil verify 检查的是镜像的哪一层?文件系统坏了该用什么命令?create -ov 和 detach -force 都有数据风险?diskutil verifyVolume。-ov 直接覆盖同名文件,-force 忽略占用强制断开,可能丢失未落盘数据。-stdinpass 并另行安全保存密码或证书恢复材料。
小程序版
微信扫码,随时查命令