dmgの中には、ファイルシステムが入っている。hdiutil createの-fsで、dmgに作るファイルシステムを指定できる。大文字と小文字を区別するファイルシステムが必要な場合や、HFS+やFAT32など、APFS以外が必要な場合に指定する。

$ hdiutil create -volname "[ボリューム名]" -srcfolder [フォルダ] -fs "[ファイルシステム]" -ov [dmgのファイル名].dmg

ここでは、-fsに指定できる値と、実際に作られるファイルシステムの違いを紹介する。実行例はmacOS 27.0.1のもの。

参考: 【hdiutil】フォルダからdmgを作る

既定のファイルシステム

-fsを省略すると、dmgのファイルシステムはAPFSになる。man hdiutilにも、既定のファイルシステムはAPFSと書かれている。フォルダから作る場合(-srcfolder)も、-sizeを指定して空のdmgを作る場合も、APFSで作られた。

$ hdiutil create -size 10m -volname Blank -ov blank.dmg
$ diskutil image attach --mountOptions nobrowse --mountPoint [マウントポイント] blank.dmg
$ diskutil info [マウントポイント] | grep -E 'Volume Name|File System Personality'
   Volume Name:               Blank
   File System Personality:   APFS

指定できるファイルシステム

-fsに指定できる値は、hdiutil create -helpで確認できる。主な値と、dmgをマウントしてdiskutil infoで確認した結果を示す。

-fsの値File System Personality大文字と小文字の区別
HFS+HFS+区別しない
Journaled HFS+Journaled HFS+区別しない
Case-sensitive HFS+Case-sensitive HFS+区別する
Case-sensitive Journaled HFS+Case-sensitive Journaled HFS+区別する
APFSAPFS区別しない
Case-sensitive APFSCase-sensitive APFS区別する
ExFATExFAT区別しない
MS-DOSMS-DOS FAT16区別しない
MS-DOS FAT32MS-DOS FAT32区別しない
UDFUDF区別する

MS-DOSを指定すると、FAT16のファイルシステムができた。FAT32にしたい場合は、MS-DOS FAT32を指定する。

man hdiutilには、HFSX、JHFS+X、HFS+Jのような短い名前も書かれている。この3つの値は、-fsに指定できた。

大文字と小文字の区別を確認する

大文字と小文字を区別するかは、a.txtとA.txtを同じディレクトリに作って確認した。ファイルが2つできれば、区別するファイルシステムである。

$ hdiutil create -volname FsT -srcfolder src -fs "Case-sensitive APFS" -format UDRW -ov fs.dmg
$ diskutil image attach --mountOptions nobrowse --mountPoint [マウントポイント] fs.dmg
$ touch [マウントポイント]/a.txt [マウントポイント]/A.txt
$ ls [マウントポイント]
a.txt
A.txt
README.txt

区別しないファイルシステムでは、touchで同じファイルを2回更新するだけなので、ファイルは1つになる。

ファイルシステムによるdmgのサイズの違い

書き込み可能な形式(UDRW)で、同じ小さなフォルダ(README.txtだけ)からdmgを作ると、ファイルシステムによってdmgのサイズが違った。UDRWのdmgのサイズは、ボリュームの容量と同じである。

-fsの値dmgのサイズ
HFS+1,799,168バイト
Journaled HFS+2,327,552バイト
Case-sensitive HFS+1,799,168バイト
APFS10,519,552バイト
ExFAT10,531,328バイト
MS-DOS(FAT16)10,531,328バイト
MS-DOS FAT3234,635,264バイト
UDF10,499,072バイト

-srcfolderを指定すると、中身に合わせてボリュームの容量が自動で決まる。HFS+は約1.8 MB、APFSやExFATは約10 MB、FAT32は約34.6 MBだった。圧縮する形式(UDZOなど)のdmgは、ボリュームの容量が大きくても、ファイルのサイズが中身と近い。

参考: 【hdiutil】dmgの圧縮形式を選ぶ

ファイルシステムに合わない容量ではエラーになる

-fsは、dmgの容量を調整しない。ファイルシステムに対して小さすぎる容量を-sizeで指定すると、dmgの作成に失敗する。

FAT32では、10 MBの容量を指定すると失敗した。40 MBの容量を指定すると、dmgを作成できた。

$ hdiutil create -size 10m -fs "MS-DOS FAT32" -volname F32 -ov f32.dmg
hdiutil: create failed - その操作は許可されていません
$ echo $?
1
$ hdiutil create -size 40m -fs "MS-DOS FAT32" -volname F32 -ov f32.dmg
$ echo $?
0

-srcfolderでフォルダから作る場合は、容量が自動で決まるため、この失敗は起きない。

dmgのファイルシステムを確認する

dmgのファイルシステムは、マウントしてdiskutil infoで確認する。

$ diskutil info [マウントポイント] | grep 'File System Personality'
   File System Personality:   APFS

ファイルシステムの選び方

特に理由がなければ、既定のAPFSのままにする。次のような場合に、-fsを指定する。

  • 大文字と小文字を区別するファイルシステムが必要な場合は、Case-sensitive APFSなどを指定する
  • 古いmacOSで開く必要がある場合は、APFSに対応したmacOSのバージョンを確認して、HFS+を指定するかを判断する
  • macOS以外のOSで読む場合は、ExFATやMS-DOS FAT32など、対象のOSが読めるファイルシステムを指定する