返回

文章详情

hdiutil 在 macOS 27 Golden Gate 中被弃用

Hacker News2026年8月22日 19:04

上一条:不再提高城门 文章索引 杰夫 · 约翰逊(我的应用,PayPal.Me,Mastodon)2026 年 8 月 14 日 macOS 命令行工具 hdiutil 用于操作磁盘映像。在最新的 macOS 27 Golden Gate 测试版中,hdiutil 的 man hdiutil 文档的 "新功能" 部分中提到:在 macOS 27.0 中,hdiutil 被弃用。请改用 diskutil image 进行所有磁盘映像操作。diskutil image 提供 attach、create、resize、info 和 chpass 等子命令。ASIF(Apple 稀疏映像格式)图像仅由 diskutil image 支持,而不支持 hdiutil。man 页面顶部还有一个弃用通知,列出了 hdiutil 子命令的 diskutil 替代品。hdiutil 的大部分选项在 diskutil 中似乎得以保留,尽管名称不同。然而,某些 hdiutil 选项缺失,例如 -puppetstrings:提供便于其他程序解析的进度输出。PERCENTAGE 输出可以包括值 -1,这意味着 hdiutil 正在执行一个需要不确定时间才能完成的操作。任何试图解释 hdiutil 进度的程序都应使用 -puppetstrings。此外,某些特定于 hdiutil create 的选项缺失 -srcfolder:-[no]crossdev -[no]scrub -[no]anyowners -skipunreadable -[no]atomic -copyuid 我尝试通过在 Golden Gate 上执行用户主文件夹的备份来比较 hdiutil 和 diskutil,这是一项我每天在我的 MacBook Pro 的 macOS Sequoia 上执行的操作。首先:时间 hdiutil create -encryption -format UDZO -noatomic -noscrub -srcfolder /Users/stupiduser -stdinpass -verbose /Users/Shared/hdiutil.dmg 这平均花费了大约 110 到 115 秒。重要的是要注意,hdiutil 触发了身份验证提示,因为其中一个文件恼人地是由 root 用户拥有的。从终端输出:copy-helper[2598:97396] uid 501 无权拥有 /Users/stupiduser/Library/Group Containers/group.com.apple.secure-control-center-preferences/Library/Preferences/group.com.apple.secure-control-center-preferences.av.plist - 将 needAuth 设置为 YES 正在扫描... 错误 80(身份验证错误)。 /Users/stupiduser/Library/Group Containers/group.com.apple.secure-control-center-preferences/Library/Preferences/group.com.apple.secure-control-center-preferences.av.plist: 身份验证错误 磁盘映像创建继续,并在使用管理员凭据进行身份验证后成功完成。现在的新方法:时间 diskutil image --stdinpassphrase --verbose create --encrypt from --format UDZO /Users/stupiduser /Users/Shared/diskutil.dmg 这简单失败,并且尽管使用了详细选项,也没有告诉你原因。 [100% 完成] 错误:无法创建磁盘映像:该操作无法完成。 不允许操作 幸运的是,我猜到了原因,即 root 拥有的文件。与 hdiutil 不同,diskutil 不会触发身份验证提示。因此,我必须删除 root 拥有的文件才能使 diskutil 工作。 [100% 完成] /Users/Shared/diskutil.dmg 创建 完成,然后,没有特别详细。不过,在磁盘映像创建期间,进度百分比确实会实时更新,因此在某种程度上可以替代 hdiutil 的 -puppetstrings 选项。好消息是,diskutil 的速度显著更快,平均只需 40 到 45 秒即可完成,比 hdiutil 快超过一分钟。而且,通过 diskutil 生成的 dmg 文件更小,为 2.8 GB,而 hdiutil 为 2.89 GB。我装入了这两个磁盘映像,使用传输应用程序(嵌入在 Xcode 应用程序中)对它们进行比较。除了在两个命令行调用之间短短几分钟内自然修改的几个文件之外,主要区别在于 hdiutil 磁盘映像包含了 ~/.Trash/ 文件夹,而 diskutil 磁盘映像没有。换句话说,diskutil 表现得就好像 hdiutil 的 -scrub 选项处于启用状态。 -[no]scrub 在成像卷时[不]跳过临时文件。源为已装载卷的根目录时,刷写是默认行为。刷写项目包括废纸篓、临时目录、换页文件等。因此,看来 Golden Gate 中的 diskutil 需要一些改进:改善详细日志记录,处理文件权限问题,添加 -[no]scrub 选项。最后,我不理解为什么 hdiutil 必须被弃用,而同样的功能将在 diskutil 中继续存在。出于某种原因,苹果似乎决心打破长期的工作流和脚本。多年前,我实际上开发了一个应用程序 Knox,它直接调用 hdiutil。如果 hdiutil 从 macOS 中删除,那将完全破坏这样的应用程序。顺便说一下,Golden Gate 中的 hdiutil 和 diskutil 仍然受到我去年撰写的博客中提到的错误的影响,无法访问的 .bnnsir 文件在 macOS Sequoia 上。几天前,我收到了针对我向苹果提交的错误报告 "hdiutil create copy error with Siri CoreSpeech .bnnsir files"(FB17162985)的荒谬更新。尽管我提供了 100% 可靠的重现步骤,但他们询问我在最新测试版中该问题是否仍然存在。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡