配布するdmgは、サイズを小さくしたい場合がある。一方、あとからファイルを書き込みたいdmgは、書き込み可能な形式にする必要がある。hdiutil createの-formatで、dmgの形式を指定できる。
$ hdiutil create -volname "[ボリューム名]" -srcfolder [フォルダ] -format ULFO -ov [dmgのファイル名].dmg
ここでは、-formatに指定できる主な形式と、同じ中身から作ったdmgのサイズの違い、書き込みの可否を紹介する。実行例はmacOS 27.0.1のもの。
- 親記事: 【dmg】作り方まとめ
指定できる形式
hdiutil createで、フォルダからdmgを作る場合の既定の形式は、UDZOである。-formatには、次の形式を指定できる。
| 形式 | 内容 | 書き込み | 備考 |
|---|---|---|---|
UDZO | zlibで圧縮 | 不可 | 既定の形式 |
ULFO | lzfseで圧縮 | 不可 | OS X 10.11以降 |
ULMO | lzmaで圧縮 | 不可 | macOS 10.15以降 |
UDBZ | bzip2で圧縮 | 不可 | 非推奨 |
UDCO | ADCで圧縮 | 不可 | |
UDRO | 圧縮しない | 不可 | |
UDRW | 圧縮しない | 可 | 書き込み用 |
対応するmacOSのバージョンは、man hdiutilの記載による。UDBZは、manページで非推奨と書かれている。
-formatには、スパースイメージ(UDSP、UDSB)など、増える容量に合わせて大きくなる形式も指定できる。
同じ中身で形式ごとのサイズを比べる
同じフォルダから、-formatを変えてdmgを作り、ファイルのサイズを比べた。中身は、圧縮が効きやすいテキストと、圧縮が効かない乱数の2種類である。
- テキスト: 169個のMarkdownファイル(約1 MB)
- 乱数:
/dev/urandomで作った1個のファイル(20,000,000バイト)
| 形式 | テキスト(約1 MB)のdmg | 乱数(約20 MB)のdmg |
|---|---|---|
UDRO | 1,453 KB | 20,262 KB |
UDRW | 13,214 KB | 32,516 KB |
UDZO | 472 KB | 20,376 KB |
ULFO | 354 KB | 20,570 KB |
ULMO | 279 KB | 20,370 KB |
UDBZ | 268 KB | 20,464 KB |
UDCO | 325 KB | 20,056 KB |
サイズは、1 KBを1,000バイトとして四捨五入した値である。
テキストでは、圧縮する形式のdmgが、UDROの3分の1から5分の1ほどになった。UDZO、ULFO、ULMOの順に小さくなった。乱数は圧縮が効かず、どの形式でも、元のファイルとほぼ同じサイズになった。圧縮の効果は、中身によって大きく変わる。
UDRWは、圧縮されない。ファイルのサイズは、ボリュームの容量と同じで、中身より大きくなる。テキストのdmgでは、ファイルのサイズが13,213,696バイトで、hdiutil imageinfoのTotal Bytesと一致した。
形式ごとの書き込みの可否
UDRO、UDZO、ULFOのdmgは、マウントしてもファイルを書き込めない。touchで新しいファイルを作ろうとすると、エラーになる。
$ diskutil image attach --mountOptions nobrowse --mountPoint [マウントポイント] [dmgのファイル名].dmg
$ touch [マウントポイント]/new.txt
touch: cannot touch '[マウントポイント]/new.txt': Read-only file system
UDRWのdmgは、ファイルを書き込める。diskutil ejectでマウントを解除したあとに、もう一度マウントしても、書き込んだファイルが残っている。
$ diskutil image attach --mountOptions nobrowse --mountPoint [マウントポイント] text-UDRW.dmg
$ touch [マウントポイント]/new.txt
$ echo $?
0
空のdmgを作って、ファイルを書き込む手順は、別の記事で紹介している。
dmgの形式を確認する
作成したdmgの形式は、hdiutil imageinfoで確認できる。
$ hdiutil imageinfo [dmgのファイル名].dmg | grep -E '^Format'
Format Description: UDIF読み出し専用圧縮(lzfse)
Format: ULFO
Format:の行に、形式が表示される。hdiutil imageinfoは非推奨で、実行すると、diskutil image infoへの移行を勧める警告が表示される。diskutil image infoでも、形式を確認できる。ただし、UDCOのdmgでは、Operation not supportedのエラーになった。
$ diskutil image info [UDCOのdmg].dmg
Error: Failed to retrieve info for disk image: The operation couldn’t be completed. Operation not supported
形式の選び方
配布用のdmgは、読み取り専用の圧縮形式から選ぶ。
- 特に理由がなければ、既定の
UDZOでよい - 同じ中身でもっと小さくしたい場合は、
ULFOかULMOを指定する。ULMOは、macOS 10.15以降でないと開けない UDBZは非推奨のため、新しく作るdmgには使わないUDRWは、書き込み用の形式である。配布する前に、読み取り専用の圧縮形式に変換する
配布するdmgを、古いmacOSで開けるようにしたい場合は、対応するmacOSのバージョンを確認して、形式を選ぶ。
