プログラミング
macOS 27 Golden Gateでhdiutilが非推奨に
hdiutil is deprecated in macOS 27 Golden Gate (lapcatsoftware.com)
要約
macOS 27 Golden Gate beta版で、ディスクイメージ操作ツールのhdiutilが非推奨となり、diskutil imageに置き換えられることが発表されました。新しいdiskutil imageは、パフォーマンスや生成されるディスクイメージのサイズで優れていますが、root権限を持つファイルに対する認証プロンプトの欠如や一部オプションの不足といった課題も指摘されています。著者は、長年のワークフローやスクリプトが影響を受ける可能性を懸念しています。
全文翻訳
macOS 27 Golden Gate August 14 2026
macOSのコマンドラインツールであるhdiutilは、ディスクイメージを操作するために使用されます。
最新のmacOS 27 Golden Gateベータ版のman hdiutilのWHAT'S NEWセクションによると、「macOS 27.0では、hdiutilは非推奨です。すべてのディスクイメージ操作にはdiskutil imageを使用してください。」とあります。
diskutil imageは、attach、create、resize、info、chpassのサブコマンドを提供します。
ASIF(Apple Sparse Image Format)イメージはdiskutil imageのみがサポートしており、hdiutilはサポートしていません。
manページの先頭にはDEPRECATION NOTICEもあり、hdiutilのサブコマンドに対するdiskutilの置き換えがリストされています。
hdiutilのオプションの大部分は、名前は異なりますがdiskutilに引き継がれているようです。
しかし、いくつかのhdiutilオプションが欠落しています。例えば、解析しやすい進捗出力を提供する-puppetstringsオプションです。
PERCENTAGE出力には、完了までに不定な時間がかかる操作を示唆する値-1を含めることができます。hdiutilの進捗を解釈しようとするプログラムは-puppetstringsを使用すべきです。
また、hdiutil create -srcfolderに固有のオプションである-[no]crossdev、-[no]scrub、-[no]anyowners、-skipunreadable、-[no]atomic、-copyuidも欠落しています。
私はGolden Gateでhdiutilとdiskutilを比較しようと、ユーザーのホームフォルダのバックアップを実行しました。これはmacOS SequoiaのMacBook Proで毎日行っていることです。
まず、以下のコマンドを実行しました。
time 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 does not have ownership of /Users/stupiduser/Library/Group Containers/group.com.apple.secure-control-center-preferences/Library/Preferences/group.com.apple.secure-control-center-preferences.av.plist - setting needAuth to YES
Scanning… Error 80 (Authentication error).
/Users/stupiduser/Library/Group Containers/group.com.apple.secure-control-center-preferences/Library/Preferences/group.com.apple.secure-control-center-preferences.av.plist: Authentication error
ディスクイメージの作成は継続され、管理者資格情報で認証した後、正常に完了します。
次に、新しい方法を試します。
time diskutil image --stdinpassphrase --verbose create --encrypt from --format UDZO /Users/stupiduser /Users/Shared/diskutil.dmg
これは単純に失敗し、verboseオプションにもかかわらず、理由を教えてくれません。
[100% completed] Error: Failed to create disk image: The operation couldn’t be completed. Operation not permitted
幸い、原因を推測できました。root権限を持つファイルです。hdiutilとは異なり、diskutilは認証プロンプトをトリガーしません。
そのため、diskutilを機能させるには、root権限を持つファイルを削除する必要がありました。
[100% completed] /Users/Shared/diskutil.dmg created
これもまた、あまりverboseではありません。
しかし、ディスクイメージ作成中に進捗パーセンテージがインプレースで更新されるため、hdiutilの-puppetstringsオプションの代替となるものが何らかの形で存在します。
良いニュースは、diskutilが著しく高速で、平均して約40秒から45秒で完了し、hdiutilよりも1分以上速かったことです。
また、diskutilから生成されたdmgファイルも小さく、2.8GBでした。一方、hdiutilでは2.89GBでした。
2つのディスクイメージをマウントし、FileMergeアプリ(Xcodeアプリに内蔵)を使用して比較しました。
2つのコマンドライン呼び出しの間に自然に変更されたいくつかのファイルを除けば、主な違いは、hdiutilのディスクイメージに~/.Trash/フォルダが含まれていたのに対し、diskutilのディスクイメージには含まれていなかったことでした。
言い換えれば、diskutilはhdiutilの-scrubオプションが有効になっているかのように動作しました。
-[no]scrub do [not] skip temporary files when imaging a volume. Scrubbing is the default when the source is the root of a mounted volume. Scrubbed items include trashes, temporary directories, swap files, etc.
つまり、Golden Gateのdiskutilにはいくつかの改善が必要なようです。
- verboseロギングの改善
- ファイルパーミッションの問題への対応
- -[no]scrubオプションの追加
結論として、同じ機能がdiskutilで引き続き利用できるのに、なぜhdiutilを非推奨にする必要があるのか理解できません。
何らかの理由で、Appleは長年のワークフローやスクリプトを破壊することに固執しているようです。
数年前、私は実際にhdiutilを直接呼び出すKnoxというアプリで仕事をしたことがあります。
もしhdiutilがmacOSから削除されたら、そのようなアプリは完全に壊れてしまいます。
ちなみに、Golden Gateのhdiutilとdiskutilの両方で、昨年ブログに書いたバグ、macOS Sequoiaでのアクセス不能な.bnnsirファイルの問題がまだ残っています。
数日前、Appleに提出したバグレポート「Siri CoreSpeech .bnnsirファイルでのhdiutil create copy error」(FB17162985)に、とんでもないアップデートがありました。
Appleに再現手順を100%確実に提供したにもかかわらず、彼らは最新ベータ版でも問題が発生するかどうか尋ね、もし発生するならiOSのsysdiagnoseを提出するように求めてきました。
そうです、AppleはmacOSのバグに対してiOSのsysdiagnoseを要求しました。
そして言うまでもなく、最新のGolden Gateベータ版では、このバグは魔法のように修正されていませんでした。