dmgの中には、ファイルシステムが入っている。hdiutil createの-fsで、dmgに作るファイルシステムを指定できる。大文字と小文字を区別するファイルシステムが必要な場合や、HFS+やFAT32など、APFS以外が必要な場合に指定する。
$ hdiutil create -volname "[ボリューム名]" -srcfolder [フォルダ] -fs "[ファイルシステム]" -ov [dmgのファイル名].dmg
ここでは、-fsに指定できる値と、実際に作られるファイルシステムの違いを紹介する。実行例はmacOS 27.0.1のもの。
- 親記事: 【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+ | 区別する |
APFS | APFS | 区別しない |
Case-sensitive APFS | Case-sensitive APFS | 区別する |
ExFAT | ExFAT | 区別しない |
MS-DOS | MS-DOS FAT16 | 区別しない |
MS-DOS FAT32 | MS-DOS FAT32 | 区別しない |
UDF | UDF | 区別する |
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バイト |
APFS | 10,519,552バイト |
ExFAT | 10,531,328バイト |
MS-DOS(FAT16) | 10,531,328バイト |
MS-DOS FAT32 | 34,635,264バイト |
UDF | 10,499,072バイト |
-srcfolderを指定すると、中身に合わせてボリュームの容量が自動で決まる。HFS+は約1.8 MB、APFSやExFATは約10 MB、FAT32は約34.6 MBだった。圧縮する形式(UDZOなど)の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が読めるファイルシステムを指定する
