hdiutil createは非推奨になり、実行すると、diskutil image createへの移行を勧める警告が表示される。diskutil image createは、フォルダやdmgから作るfromと、空のdmgを作るblankの2つのサブコマンドを持つ。
$ diskutil image create from --volumeName "[ボリューム名]" [フォルダ] [dmgのファイル名].dmg
$ diskutil image create blank --size 20m --volumeName "[ボリューム名]" [dmgのファイル名].dmg
ここでは、diskutil image createでdmgを作る方法と、hdiutilとの違いを紹介する。実行例はmacOS 27.0.1のもの。
- 親記事: 【dmg】作り方まとめ
hdiutilとの対応
hdiutilの主なコマンドは、次のdiskutilのコマンドに置き換えられる。
| やりたいこと | hdiutil | diskutil |
|---|---|---|
| フォルダからdmgを作る | hdiutil create -srcfolder | diskutil image create from |
| ボリューム名を指定する | -volname | --volumeName |
| 空のdmgを作る | hdiutil create -size | diskutil image create blank --size |
| ファイルシステムを指定する | -fs | blankの--fs |
| 形式を変換する | hdiutil convert -format | diskutil image create from --format |
| 暗号化する | -encryption | --encrypt |
| マウントする | hdiutil attach | diskutil image attach |
| マウントを解除する | hdiutil detach | diskutil eject |
| dmgの情報を表示する | hdiutil imageinfo | diskutil image info |
この対応は、hdiutilの非推奨の警告が勧める移行先に沿っている。
フォルダからdmgを作る
diskutil image create fromに、フォルダとdmgのファイル名を指定する。
$ diskutil image create from src default.dmg
default.dmg created
形式を指定しない場合の形式は、ULFO(lzfseで圧縮した読み取り専用の形式)である。diskutil image infoで確認できる。
$ diskutil image info default.dmg | grep -E 'Image Format|Format Description'
Image Format: ULFO
Format Description: UDIF read-only compressed image (lzfse)
hdiutil createの既定の形式はUDZOである。形式が違うため、同じフォルダから作ったdmgでも、既定の設定では、形式が異なる。
マウントすると、ボリューム名は、フォルダの名前になる。ファイルシステムはAPFSである。ボリューム名は、--volumeNameで指定する。
$ diskutil image create from --volumeName "My Volume" src vn.dmg
$ diskutil info [マウントポイント] | grep 'Volume Name'
Volume Name: My Volume
同名のファイルは上書きされる
作成先に同名のdmgがあっても、エラーにならず、createdと表示されて、dmgが作り直される。hdiutil createの-ovに相当するオプションはない。
$ diskutil image create from src default.dmg
default.dmg created
$ echo $?
0
既存のdmgを残したい場合は、作成先のファイル名を変える。
形式を指定する
--formatで、形式を指定する。fromで指定できる形式は、ASIF、RAW、UDRO、UDSB、UDZO、ULFO、ULMOである。同じフォルダから、形式を変えて作ったdmgの結果を示す。
--format | 出力先 | 内容 | サイズ |
|---|---|---|---|
UDZO | .dmg | zlibで圧縮した読み取り専用 | 2,025 KB |
ULFO | .dmg | lzfseで圧縮した読み取り専用(既定) | 2,032 KB |
ULMO | .dmg | lzmaで圧縮した読み取り専用 | 2,015 KB |
UDRO | .dmg | 圧縮しない読み取り専用 | 2,947 KB |
RAW | .dmg | 圧縮しない読み書き可能 | 6,332 KB |
UDSB | .sparsebundle | スパースバンドル | ディレクトリで12,580 KB |
ASIF | .asif | Apple sparse image | 10,527 KB |
中身は、約2 MBの乱数のファイルと、圧縮が効くテキストを含む小さなフォルダである。--helpには、出力先の拡張子が.asifか.sparsebundleの場合を除いて、既定の形式はULFOと書かれている。
ASIFのdmgはhdiutilで開けない
ASIF形式のdmgをhdiutil attachでマウントすると、エラーになる。
$ hdiutil attach f-ASIF.asif -readonly -nobrowse -mountpoint [マウントポイント]
hdiutil: this image format is not supported by hdiutil. Please use 'diskutil image attach'
hdiutil: attach failed - 対応していないイメージフォーマットです
$ echo $?
1
diskutil image attachでは、マウントできた。ASIFのdmgを使う場合は、hdiutilではなく、diskutilで扱う。
notarytool submitが受け付けるファイルは、zip、pkg、UDIF形式のdmgである。ASIFやRAWのdmgを公証できるかは、確認していない。
参考: 【notarytool】dmgを公証する (submit)
空のdmgを作る
diskutil image create blankで、空のdmgを作る。--sizeは必須である。
$ diskutil image create blank --size 20m blank.dmg
blank.dmg created
$ diskutil image info blank.dmg | grep -E 'Image Format|Total Bytes'
Image Format: RAW
Total Bytes: 19999744
形式を指定しない場合の形式は、RAW(読み書き可能)である。ファイルシステムはAPFS、ボリューム名はuntitledだった。
--size 20mで作ったdmgは、19,999,744バイトだった。hdiutil create -size 20mで作ったdmgは、20 MiB(20,971,520バイト)だった。単位のmの意味が、diskutilとhdiutilで異なる。
ファイルシステムを指定する
--fsで、ファイルシステムを指定する。指定できる値は、APFS、ExFAT、MS-DOS、Noneである。
--fs | 作成 | マウント後のファイルシステム |
|---|---|---|
APFS | 成功 | APFS |
ExFAT | 成功 | ExFAT |
MS-DOS | 成功 | MS-DOS FAT16 |
None | 成功 | マウントできない |
--fs Noneで作ったdmgは、ファイルシステムがないため、diskutil image attachがError: Failed to mount the volumeで失敗する。
参考: 【hdiutil】dmgのファイルシステムを指定する
スパースな形式で作る
blankの--formatには、RAW、ASIF、UDSBを指定できる。1 GBの容量で作ると、ASIFは約14.7 MBのファイル、UDSBは約5.3 MBのディレクトリになった。
$ diskutil image create blank --size 1g --format ASIF b.asif
$ diskutil image create blank --size 1g --format UDSB b.sparsebundle
dmgの容量を変更する
diskutil image resizeで、dmgの容量を変更できる。引数にdmgだけを指定すると、容量の下限と上限が表示される。
$ diskutil image resize blank.dmg
Minimum bytes: 4.2 MB
Current bytes: 20.0 MB
Maximum bytes: 454.3 GB
上限の値は、環境によって異なる。
--sizeに新しい容量を指定すると、容量を増やせる。
$ diskutil image resize --size 40m blank.dmg
blank.dmg resized successfully
--size minを指定すると、容量が下限まで小さくなる。20 MBのdmgは、約4.2 MBになった。
$ diskutil image resize --size min blank.dmg
blank.dmg resized successfully
マウントしているdmgの容量は変更できない。Resource busyのエラーで、終了コード1になる。
$ diskutil image resize --size 60m blank.dmg
Error:
The operation couldn’t be completed. Resource busy
$ echo $?
1
