自分でやるSOHOのためのITスキルアップ

 SOHOのためのIT技術情報を連載中
 とにかく自分でやってみよう !!


HOME > SOHO DIY INDEX  > mkisofs(8) ver.2.0 man page [日本語] POWERED BY IOSS

資料3: mkisofs(8) ver.2.0 man page [日本語]


MKISOFS(8)

名 称

mkisofs - Rock Ridge アトリビュートオプション付きハイブリッド ISO9660/JOLIET/HFS ファイルシステム作成コマンド

書 式

mkisofs [ オプション ] [ -o ファイル名 ] パス指定 [パス指定 ...]

概 要

mkisofs は ISO9660/JOLIET/HFS ハイブリッドファイルシステムのプリマスタリングを効果的に行うためのプログラムである。

mkisofs は Rock Ridge 互換プロトコルによって規定された SUSP (System Use Sharing Protocol) レコードにも対応している。 これにより UNIX 上で ISO9660 ファイルシステムを扱う上で必要となる、ロングファイルネーム,uid/gid, POSIX パーミッション,シンボリックリンク,ブロック型/キャラクタ型デバイスなどの利用が可能となる。

Joliet または HFS オプションを指定した場合、mkisofs はそれらのファイルシステム用のメタデータを追加する。 この内容はいずれの場合も、メディア上の実際のデータブロックへの参照となる。 いずれのオプションも指定されない場合、mkisofs は純粋な ISO9660 ファイルシステムを生成する。

mkisofs は完全な (またはシェアド) HFS ハイブリッドファイルシステムを生成することができる。 これにより、Macintosh でもその他のマシンでも同じようにファイルにアクセスすることができる。 HFS とは Hierarchical File System の略で、Macintosh の標準ファイルシステムである。

一方、mkisofs は各ファイルに対して ISO9660 の Apple 拡張を施すこともできる。 これは各ファイルに対し、CREATOR,TYPE や 適切なファインダフラグなどの Macintosh 固有の情報を付加することである。 詳細は後の HFS MACINTOSH ファイルフォーマットの章を参照のこと。

mkisofs は指定されたディレクトリツリーのスナップショットをとり、ISO9660 または HFS ファイルシステムに対応したバイナリイメージを生成する。

ISO9660 ファイルシステムにおいては、(Rock Ridge であっても) すべてのファイルは 8.3 形式 (8文字+ピリオド+3文字,英文字はすべて大文字) のファイル名をもたなければならない。 これは MS-DOS などの Rock Ridge エクステンションに対応しないシステムで利用される。 この場合、同一ディレクトリ内に存在する全てのファイルはユニークな名前とする必要がある。

mkisofs は通常、元になる UNIX ファイル名を大文字に直し、長いファイル名の場合は余計な部分を切り捨てることで 8.3 形式に対応させようとするが、同一ディレクトリ内のファイル名をユニークにすることが困難となることが多い。

このような状況に対し、mkisofs は各ファイルに重み付けをし、もし2つのファイル名が同じになる場合は、重みの低いファイル名を 3 桁の数字で表される拡張子をもつファイル名に変換することでファイル名の重複を避ける。

例えば、2つのファイル foo.bar と foo.bar.~1~ が同一ディレクトリに存在した場合、8.3 形式ではいずれも FOO.BAR となり重複してしまうが、mkisofs は foo.bar を FOO.BAR;1 とし、foo.bar.~1~ を FOO000.BAR;1 とすることで重複を回避する。

HFS オプションには多くの種類がある。 これは Apple/UNIX ファイルフォーマットには多くの種類があるため、mkisofs が ファイルに含まれる ファインダ情報やリソースフォークおよびデータ本体を適切に取り出し、コピーできるようにするために用意されたものである。 mkisofs がサポートするフォーマットの詳細は後の HFS MACINTOSH ファイルフォーマットの章を参照のこと。

mkisofs はCD-R/RWドライブなどのハードウェアの制御を行うようには設計されていない。 ほとんどのドライブは制御のためのメーカ固有のコマンドセットをもっており、ディスクを焼くためにはそれらに対応したツールが必要になる。

例えば、cdrecord ユーティリティを使えばディスクを焼くことができる。 この最新のバージョンは ftp://ftp.berlios.de/pub/cdrecord から入手することができる。

ディスクを焼く際に注意しなければならないのは、ほとんどのCD-R/RWドライブはタイミングに非常に敏感であるということである。 一度書込みを始めたらそれが完了するまでの間はバッファを空にすることは許されない。 書き込み中にバッファが空になることがあれば書込みは失敗し、読み取り不能なディスクができてしまう。

このため、書き込み中はドライブへのデータの流れが途切れないように管理することが非常に重要である。

コマンドラインの「パス指定」は ISO9660 ファイルシステムとしてコピーされるディレクトリツリーへのパスで、複数指定することができる。 複数のパスが指定された場合は、mkisofs は指定された全てのパスに存在するファイルを一つの cdrom イメージにマージする。

-graft-points オプションを使えば、パスを cdrom イメージにおけるルート以外の任意の場所に設定する(graft=接ぎ木する)ことができ、 また元のファイル名,ディレクトリ名とは異なる名前とすることもできる。 例えば ../old.lis というファイルが存在するとして、これを cdrom イメージに含めようとした場合、

foo/bar/=../old.lis

とすると cdrom イメージ内で old.lis ファイルは /foo/bar/old.lis となり、

foo/bar/xxx=../old.lis

とすれば cdrom イメージ内で old.lis は /foo/bar/xxx という異なるパスと名前になる。 同様な指定がディレクトリについても可能である。

ここで /foo/bar などは実際に存在する必要は無く mkisofs が cdrom イメージ中に作り出すものである。

このように作られるディレクトリのパーミッションはデフォルトで 0555 となり、オーナは mkisofs の実行者と同じになる。 もしこれらのディレクトリを別のパーミッションやオーナとしたい場合は、 -uid, -gid, -dir-mode, -file-mode, -new-dir-mode などのオプションを使う。

mkisofs は Cygnus'cygwin (http://sourceware.cygnus.com/cygwin/ から入手可能) でコンパイルすることで Win9X/NT4 上でも使うことができる。 その場合はこの文書中の UNIX という単語を Win32 と読み替えればよい。

オプション

-abstract ファイル名
Abstract ファイル名を指定する。 このパラメータは .mkisofsrc 内で「ABST=ファイル名」のように指定することもできる。 .mkisofsrc とコマンドラインの両方で指定された場合は、コマンドラインが優先する。
訳者注: Abstractファイルとは ISO9660 で規定されているCDの概要を説明するファイルで、 ファイル名として指定できる長さは最大37文字である。 通常は指定する必要はない。
-A アプリケーションID
ボリュームヘッダに書かれるアプリケーション ID 文字列を指定する。 これはディスク上に存在するアプリケーションを示すものであろう。 文字列の長さは最大128文字である。 これも .mkisofsrc 内で「APPI=アプリケーションID」のように指定できるがコマンドラインが優先する。
訳者注: アプリケーション ID はディスク上のデータを利用できるアプリケーションに関する情報を記述したものである。 この情報を記述したファイル名を指定する場合は、ここにアンダーバー (‘_’) で始まるファイル名を記述する。
-allow-lowercase
ISO9660 ファイル名に英小文字の使用を許可する。 これは ISO9660 規格に違反するものであるが、システムによっては問題ない場合がある。 注意して使うこと。
-allow-multidot
ISO9660 ファイルシステムとして複数のドット(‘.’) の使用を許可する。 これも ISO9660 規格に違反するものであるが、システムによっては問題ない場合がある。 注意して使うこと。なおドットで始まるファイル名の使用を許可する場合はこのオプションではなく -L オプションを使用すること。
-biblio ファイル名
書誌情報 (bibliography) が記述されたファイル名を指定する。 これも .mkisofsrc 内で「BIBLO=ファイル名」のように指定できるがコマンドラインが優先する。
訳者注: 通常は指定する必要はない。
-cache-inodes
ファイルへのハードリンクを見つけるために i-node とデバイス番号をキャッシュする。 mkisofs はハードリンク (複数の名前をもつファイル) を見つけると、CD イメージ上でも1本のファイルとすることで、スペースを節約する。 このオプションは UNIX (および UNIX ライクな) OS ではデフォルトで有効になっている。

i-node 番号がユニークでないファイルシステムでは CD イメージ上のファイル名と内容が一致しない可能性があり、注意して用いる必要がある。

-no-cache-inodes
上記オプションとは逆で、i-node とデバイス番号をキャッシュさせない。 i-node 番号がユニークでないファイルシステムでこの指定が必要となる。

Cygwin ではデフォルトでこのオプションが有効になっている。 なぜなら Cygwin の裏で動作する Microsoft OS は POSIX に準拠しておらず、 i-node 番号もユニークではないからである。 Cygwin はハッシュアルゴリズムを使って偽の i-node を生成するが、これも 100% ユニークであるとは限らない。

つまり Cygwin 上で mkisofs が i-node をキャッシュすると、複数のファイルが (あたかもハードリンクされたように) 同じに見えても、実際は異なる場合があるということである。 これは特にツリー内にかなりの数 (約 5000 個以上) の異なるファイルが存在する場合、ファイル名と内容が一致しない現象として現れる。

この問題は -no-cache-inodes オプションを与えることで回避できるが、mkisofs はハードリンクを検出できなくなるため、CD イメージのサイズが予想以上に大きくなる可能性がある。

-b El_Torito_ブートイメージ
El Torito 規格準拠のブータブル CD のためのブートイメージのパス名とファイル名を指定する。 パス名は mkisofs に与えたソースパスを基準としたものであること。 このオプションは El Torito 規格準拠のブータブル CD を作成する場合は必須である。

ブートイメージのサイズは 1200,1440,2880 KB のいずれかフロッピディスクの容量に正確に一致しなければならず、mkisofs は ISO9660 ファイルシステムに出力する際にこのいずれかのサイズに合わせる。 実際のブートにおいては、最初にブートイメージの先頭 512 バイトが読まれ、実行されることになる (通常のフロッピドライブでのブートがエミュレートされる)。 つまり LILO ベースのブートフロッピイメージなどがそのまま使えるということである。

ブートイメージがフロッピディスクイメージでない場合、-hard-disk-boot または -no-emul-boot のいずれかを追加する必要がある。 またシステムをブートさせたくない場合は -no-boot オプションを付加する。

-eltorito-alt-boot
El Torito 規格の別のブートパラメータセットでのブートを可能にする。 つまり複数の El Torito ブートを持つことができるということである。 1 枚の CD に最大 63 個の El Torio ブート を持たせることができる。
-B img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
SPARC 用ブータブル CD に必要なブートイメージ群をコンマ (‘,’) で区切ったリストで指定する。 空のフィールドがあっても構わない。 このオプションは Sun SPARC システム用のブータブル CD を作成するのに必須である。

-B オプションまたは -sparc-boot が指定された場合、ブートイメージの第1セクタは Sun ディスクラベルとなる。 このディスクラベルは ISO9660 イメージ用のスライス 0 と、このオプションで指定されたブートイメージ用のスライス1〜スライス7 を指すものである。 各ブートイメージのバイトオフセット 512〜8191 の内容は各SPARC アーキテクチャに合わせたプライマリブート(イメージ)である。
残りのイメージファイルは通常 UFS ファイルシステムで、プライマリカーネルのブートステージで使われる。

このブート方式の実装は SunOS 4.x と SunOS 5.x のものである。 ただしこれは SunOS に依存したものではなく、実は Open Boot prom に依存したものである。 つまりこの方式を使えば SPARC システムを任意の OS でブートさせることができるということである。

もし特殊なファイル名が使われた場合、実際の,そして続くブートパーティションは前のパーティションにマッピングされる。 mkisofs が -G イメージ -B として呼ばれたら、全てのアーキテクチャにおいて、すべてのブートパーティションは ISO9660 ファイルシステムイメージをもつパーティションとディスクの先頭16セクタにある汎用ブートイメージにマッピングされる。

訳者注: 最後の段落の意味は私には理解不能。
-G 汎用ブートイメージ
汎用ブータブル CD のためのブートイメージファイルへのパス名とファイル名を指定する。 汎用ブートイメージは CD の先頭 16 セクタに置かれる。 先頭16セクタとは、ISO9660 プライマリボリュームディスクリプタのセクタのことである。 このオプションが -sparc-boot オプションと共に指定された場合、汎用ブートイメージの先頭 512 バイトは Sun ディスクラベルとなる。
-hard-disk-boot
El Torito ブータブル CD のブートイメージがハードディスクイメージであることを指定する。 そのハードディスクイメージは、単一パーティションのマスタブートレコードで始まっている必要がある。
-no-emul-boot
El Torito ブータブル CD のブートイメージが非エミュレーションイメージであることを指定する。 システムはそのイメージをディスクエミュレーション無しでロードし、実行する。
-no-boot
El Torito ブータブル CD がブート不可あることを指定する。 システムはブートイメージのためにエミュレートされたドライブを提供するがブート不可となっているため、結果的に標準のブートデバイスからブートする。
-boot-load-seg セグメントアドレス
El Torito 非エミュレーションブータブル CD のロードセグメントアドレスを指定する。
-boot-load-size ロードセクタ数
El Torito 非エミュレーションブートモードにおけるロードセクタ数 (仮想セクタ数=512バイト) を指定する。 デフォルトではブートファイル全てをロードする。 BIOS によってはこの数値が 4 の倍数でないと問題となる場合がある。
-boot-info-table
ブートファイルのオフセット 8 から 56 バイトの範囲に CD-ROM レイアウト情報テーブルを書き込む。 このオプションが指定されると、元のファイルシステムにあるブートファイルが書き換えられることに注意。 特にそのファイルの再作成が容易でない場合は必ずバックアップコピーをとっておくこと! テーブルの内容については、後の EL TORITO ブート情報テーブルの章を参照。
-C 最終セッション開始セクタ番号, 新規セッション開始セクタ番号
このオプションは mkisofs で CDextra を作成する場合や、マルチセッションディスクの第2セッション以降のイメージを作成する場合に必要である。 このオプションはパラメータとしてコンマで区切られた2つの数値をもつ。 最初の数値は、そのディスクの最終セッションの開始セクタ番号で、2つ目の数値は新規セッションの開始セクタ番号である。 これらの数値は、cdrecord -msinfo ... などとすれば得られるはずである。

-C オプションが -M オプションと共に用いられた場合、既存の直前のセッションと新規セッションを合成したファイルシステムイメージが作られる。

それに対し、-C オプションが -M オプションなしで用いられた場合、mkisofs は CDextra 上の第2セッション用のファイルシステムイメージを作る。 これは、第1セッションにオーディオデータ,第2セッションに ISO9660 ファイルシステムをもつマルチセッション CD のことである。

-c ブートカタログ
El Torito ブータブル CD 作成に用いられるブートカタログのパス名とファイル名を指定する。 パス名は mkisofs に与えたソースパスを基準としたものであること。 このオプションはブータブル CD を作成する場合は必須である。

このファイルは出力ツリー内に挿入されるもので、元のファイルシステムには作成されない。 このため、既にあるファイルと重複しないように注意する必要がある。 通常“boot.catalog”などの名前が使われる。

-check-oldnames
古いセッションからインポートされたファイル名が mkisofs の ISO9660 ファイル名生成ルールに従うものかどうかをチェックする。 このオプションが指定されない場合は ISO9660 で無視できない違反、すなわちファイル名の長さが 31 文字を越えているかどうかのチェックのみ行う。
-check-session ファイル名
全ての古いセッション内のファイル名が mkisofs の ISO9660 ファイル名生成ルールに従うものかどうかをチェックする。 このオプションは“-M ファイル名 -C 0,0 -check-oldnames”に相当するものである。 パラメータの「ファイル名」については -M オプションの説明を参照。
-copyright ファイル名
コピーライトファイル名を指定する。 これは .mkisofsrc ファイル内で「COPY=ファイル名」としても指定できるが、コマンドラインが優先する。
訳者注: 通常は指定する必要はない。
-d
ピリオドをもたないファイル名の最後尾に付くピリオドを取り除く。 ISO9660 規格に違反することになるが、通常問題にならない。 注意して使うこと。
-D
深層ディレクトリの移動を行わずそのままパックする。 ISO9660 規格に違反することになるが通常問題にならない。 注意して使うこと。
-dir-mode モード
ディレクトリのモードを指定されたモードにする。 このオプションを指定すると自動的に Rock Ridge エクステンションが有効になる。
-dvd-video
DVD-Video 規格互換の UDF ファイルシステムを生成する。 規格に従ったファイルの並び替えが行われ、必要に応じてファイル間のパディングが行われる。 DVD-Video ファイル名は、英文字が大文字 (upper case) でなければならないことに注意。
-f
シンボリックリンクのリンク先を参照するようにする。 このオプションが指定されないとリンク先のファイルは無視される。 ただし Rock Ridge エクステンションが有効になっていればシンボリックリンクは正しく扱われる。
-file-mode モード
レギュラーファイルのモードを指定されたモードにする。 このオプションを指定すると自動的に Rock Ridge エクステンションが有効になる。
-gid gid
ファイルのグループ ID を指定された gid にする。 このオプションを指定すると自動的に Rock Ridge エクステンションが有効になる。
-gui
mkisofs を GUI モードで実行する。 これはまだ実装されておらず、現状は出力が冗長になるだけである。
-graft-points
ファイル名のグラフトポイント(接ぎ木ポイント)の使用を許可する。 グラフトポイントとはファイルやディレクトリを指定された任意のパス下に置かれた状態にするものである(前の概要の章を参照)。

このオプションが指定されると全てのファイル名はグラフトポイントの書式を考慮してチェックされる。 つまりファイル名は、最初に現れるエスケープされていない等号 (‘=’) によって分割される。

もしファイル名にバックスラッシュ (‘\’ ただし日本語システムでは ‘\’) や等号 (‘=’) が含まれていたら、バックスラッシュによってエスケープされなければならない。

-hide glob
ISO9660 または Rock Ridge ディレクトリ から glob で指定されたものを隠蔽---つまり見えないようにする。 glob とはシェルのワイルドカード形式のパターンで、隠したいファイル名かパス名のいずれか一部にマッチしなければならない。

glob がディレクトリ名とマッチした場合、そのディレクトリの内容も隠蔽される。 ディレクトリ名にマッチさせる場合、最後の‘/’ を付けてはならない。

隠蔽されたファイルは CD イメージ内に書き込まれるため、隠蔽を確実なものにするためには -hide-joliet オプションも使うべきである。 隠蔽に関する詳細は README.hide を参照のこと。

glob は複数指定することができる。

-hide-list ファイル名
隠蔽対象となる glob リストを指定したファイルから読み取る。
-hidden glob
ISO9660 の隠しディレクトリ属性 (hidden attribute) を glob に付与する。 これにより DOS ベースのシステムにおいて、 dir コマンドで glob が見えてしまうのを防ぐ。 glob とはシェルのワイルドカード形式のパターンで、隠したいファイル名かパス名のいずれか一部にマッチしなければならない。

glob がディレクトリ名とマッチした場合、そのディレクトリの内容も隠蔽される。 ディレクトリ名にマッチさせる場合、最後の‘/’ を付けてはならない。

glob は複数指定することができる。

-hidden-list ファイル名
隠し属性付与の対象となる glob リストを指定したファイルから読み取る。
-hide-joliet glob
Joliet ディレクトリ から glob で指定されたものを隠蔽---つまり見えないようにする。 glob とはシェルのワイルドカード形式のパターンで、隠したいファイル名かパス名のいずれか一部にマッチしなければならない。

glob がディレクトリ名とマッチした場合、そのディレクトリの内容も隠蔽される。 ディレクトリ名にマッチさせる場合、最後の‘/’ を付けてはならない。

隠蔽されたファイルは CD イメージ内に書き込まれるため、隠蔽を確実なものにするためには -hide-joliet オプションも使うべきである。 隠蔽に関する詳細は README.hide を参照のこと。

glob は複数指定することができる。

-hide-joliet-list ファイル名
隠蔽対象となる glob リストを指定したファイルから読み取る。
-hide-joliet-trans-tbl
Joliet ツリーから TRANS.TBL ファイルを隠蔽する。 このファイルは実際のファイル名と ISO9660 ファイル名の対応リストをもつものであるが、いずれの名前も Joliet ファイル名とは異なるため、あまり意味がないものである。
-hide-rr-moved
Rock Ridge ツリーにおいて、RR_MOVED ディレクトリを .rr_moved という名前に変える。 もちろんこれで完全に隠蔽されるわけではない。 このディレクトリの意味を知らない人々には、あえて見る必要はないということを示す程度の意味合いである。

もし RR_MOVED ディレクトリを完全に無くしてしまいたいのなら、-D オプションを使うべきである。 ただしこのオプションを使った場合のファイルシステムは ISO9660 レベル1 に準拠しないものとなり、MS-DOS では読めなくなる。 RR_MOVED ディレクトリについての詳細は後の注意の章を参照のこと。

-input-charset キャラクタセット名
ローカルファイル名に使われる入力キャラクタセット名を定義する。“mkisofs -input-charset help”とすれば有効なキャラクタセット名の一覧が表示される。

入出力で1:1のマッピングを望むなら、キャラクタセット名として“default”を指定すれば良い。 この場合の初期値は、DOS ベースのシステムでは cp437 、その他のシステムでは iso8859-1 である。 詳細は後のキャラクタセットの章を参照のこと。

-output-charset キャラクタセット名
Rock Ridge ファイル名で使われる出力キャラクタセット名を指定する。 デフォルトは上の入力キャラクタセットと同じになる。 詳細は後のキャラクタセットの章を参照のこと。
-iso-level レベル番号
ISO9660 準拠レベル番号を指定する。 1 から 4 までのいずれかを指定する。

レベル 1 では、ファイルは単一セクションで構成され、ファイル名は 8.3 形式のみとなる。

レベル 2 では、ファイルは単一セクションのみで構成される。

レベル 3 では、(ISO-9660:1988 を除き) 上記の制約はない。

レベル 1〜3 に共通する制約として次のようなものがある。

  • ファイル名の英文字は大文字のみ
  • アンダーバー (‘_’) の数の制限
  • ファイル名の長さは最大 31 文字
  • ディレクトリ階層は 8 レベルまで
  • 最大パス長は 255 文字

レベル 4 は正式には存在しないが、mkisofs はこれを ISO-9690:1999、つまり ISO-9690 バージョン 2 に割り当てている。

レベル 4 を指定すると、ファイル構造バージョンが 2 に設定された、バージョン番号付きエンハンストボリュームディスクリプタが作られる。 この特徴として以下が挙げられる。

  • ディレクトリ階層の深さ制限が無い
  • ドットを含まなければならないという制約が無い (ドットは特別な意味を持たない)
  • ファイル名にバージョン番号を持たせる必要が無い
  • ファイル名,ディレクトリ名は最大 207 文字 (ただし Rock Ridge では 197 文字となる)

バージョン 2 のイメージの生成において、mkisofs は エンハンストボリュームディスクリプタを作る。 これはプライマリボリュームディスクリプタ (PVD) に似ているが実際は違うものである。 (余談だが) 作りの悪いソフトウェアでは第 2 PVD コピーをブート可能なものとして、これを El Torito ボリュームディスクリプタ にコピーして ISO9660 イメージを作るものがあるので要注意である。

-J
通常の ISO9660 ファイル名に加え、Joliet ディレクトリレコードを生成する。 これは CD を主に Windows-NT や Windows-95 システム上で使いやすくするためである。 Joliet ファイル名は Unicode で指定され、パスに含まれる各コンポーネントは Unicode で最大 64 文字までとなる。

Joliet とは規格ではなく Rock Redge エクステンションとも無関係である。 Microsoft Win32 上のみで使われる Joliet エクステンションのことである。 ファイル名の長さが 64 文字に制限されることや、Unicode として UTF-16 を採用しているという事実が相互運用上の問題となっている。

-joliet-long
Joliet ファイル名の長さを Unicode で 103 文字まで許容する。 これは Joliet 仕様に違反するものであるが、事実上問題ないようである。 103 文字という数字の根拠は次のとおりである。
{ [ディレクトリレコードの最大長 (254)] − [ディレクトリレコードの実際の長さ (33)] − [CD-ROM XA システム用拡張情報 (14)] }÷ [UTF-16 文字サイズ (2)]
-jcharset キャラクタセット名
“-input-charset キャラクタセット名”を -J オプションと同時に指定したのと同じ。 詳細は後のキャラクタセットの章を参照のこと。
-l
31 文字までのファイル名を許容する。

ISO9660 規格では 31 文字までのファイル名が使えるにもかかわらず、通常は MS-DOS との互換性のために 8.3 形式が使われる。 このオプションを指定することで 31 文字すべてが使えるようになるが、このようにして作られたディスクは MS-DOS では多分使えなくなり、 Amiga などの特定のシステムでのみ利用できるだけである。 注意して使うこと。

-L
ピリオド (‘.’) で始まる ISO9660 ファイル名を許容する。

通常 MS-DOS との互換性を考慮して先行のドット (‘.’) はアンダーバー (‘_’) に置き換えられるが、このオプションを指定することでその制約を取り除く。 ISO9660 規格に違反することになるが通常問題にならない。 注意して使うこと。

-log-file ログファイル名
すべてのエラーメッセージ,警告メッセージおよびその他の情報を指定されたログファイルに出力する。 通常は標準エラー出力に出力される。
-m glob
glob で指定されたものを書込み対象から除外する。 glob とはシェルのワイルドカード形式のパターンで、除外したいファイル名の一部にマッチしなければならない (-x オプションとは異なりパスとのマッチは無い)。

技術的には glob は、ディレクトリエントリの d->d_name とのマッチが評価される。 glob は次のように複数指定することができる。

mkisofs -o rom -m '*.o' -m core -m foobar

この例では、ファイル名が“.o”で終わるファイル,“core”というファイル,そして“foobar”というファイルが書き込み対象から除外される。 また“foobar”という名前のディレクトリがあれば、そのディレクトリおよびその内容もすべて除外される。

注意: -m オプションと -x オプションの説明は誤りであり、改訂されなければならない。 現在では 2 つのオプションは共に glob をパラメータとしてもつ。 glob がパスの最終部分にマッチする場合も、パス全体とマッチした場合も除外の対象となる。

訳者注: すなわちこの -m オプションの説明は誤りであるということである。 上の注意をよく読むこと。
-exclude-list ファイル名
除外対象となる glob のリストをもつファイル名を指定する。
-max-ISO9660-filenames
37 文字までの ISO9660 ファイル名を許容する。 このオプションは -N オプションの効果を積極的に利用するもので ISO9660 のバージョン番号のためのスペースをファイル名の拡張のために流用する。

これは ISO9660 規格に違反するものであるが大抵のシステムでは問題にならない。 しかしながらアプリケーション側では、ファイル名用のバッファを最低 37 文字分確保しなければならず、このオプション付きで作成されたディスクの読込みにおいてバッファオーバーフローが発生する可能性がある。 このため使用には細心の注意が必要である。

-M パス名
 または
-M デバイス名
マージされる既存の ISO9660 イメージ へのパスを指定する。 別の指定として、 SCSI デバイスを指定することもできる。 これは cdrecord コマンドの dev= パラメータに与えるものと同じ書式である。

mkisofs の出力は、この -M オプションで指定されたイメージの最後に書き足された形の新規セッションとなる。 これを実際にメディアに書き込むためには、マルチセッションに対応した書込みソフトとドライブが必要になる。

このオプションは -C オプションと連携して用いられる。

-N
ISO9660 ファイル名から バージョン番号を取り除く。 これは ISO9660 規格に違反するものであるが、現実にはバージョン番号が使われることはほとんどない。 注意して使うこと。
-new-dir-mode モード
ISO9660 ファイルシステム内に新規ディレクトリを生成する際のモードを指定する。 デフォルトのモードは 0555 である。
-nobak
 または
-no-bak
バックアップファイルを ISO9660 ファイルシステムに含めない。 -no-bak オプションではUNIX 用エディタのバックアップファイルの特徴である ‘~’,‘#’ または“.bak”を含むファイルが対象となる。
-force-rr
前のセッションについて自動 Rock Ridge アトリビュート認識を行わない。 これは NERO burning ROM などにより生成された腐った(rotten)エクステンションレコードを表示するのに有効である。
-no-rr
前のセッションの Rock Ridge アトリビュートを引き継がない。 これは古いセッションに不当な Rock Ridge シグネチャがある場合の問題を回避するのに有効である。
-no-split-symlink-components
SL コンポーネントを分割せず、新規継続エリア (CE: Continuation Area) から開始する。 これはスペースを浪費することになるが、Sun OS 4.1.4 の cdrom ドライバ に存在する「分割された SL コンポーネントを読めない」というバグ(*1)を回避するのに有効である。
(*1) 本来 「リンクサイズ += コンポーネントサイズ」 とすべきところ、「リンクサイズ = コンポーネントサイズ」 としてしまうバグ。
-no-split-symlink-fields
SL フィールドを分割せず、新規継続エリア (CE: Continuation Area) から開始する。 これはスペースを浪費することになるが、SunOS 4.1.4 と Solaris 2.5.1 の cdrom ドライバに存在する「分割された SL フィールドを読めない」というバグ(*2)を回避するのに有効である。
(*2) ‘/’ が削除されてしまう
-o ファイル名
生成された ISO9660 ファイルシステムイメージの出力先を指定する。 「ファイル名」は、実際のディスク上のファイル以外にも、テープドライブまたは光学ディスクドライブのデバイス名であっても構わない。 もしこのオプションが指定されなければ出力先は標準出力となる。

なお、出力先として通常のディスクドライブを指す特殊ブロックデバイス名とすることもできる。 ただしディスクがマウントされ、プリマスタリングが正常に行われたかどうか確認する方法があることが前提である。

-pad
全イメージの最後に最大 150 セクタ分 (300KB) のパディングを追加する。 これが -B オプションと共に用いられた場合、パディングの位置は ISO9660 パーティションの後,かつブートパーティションの前となる。実際のパディングサイズは、第 1 ブートパーティションの開始セクタ番号によって決り 16 の倍数となる。

パディングは Linux を始めとする多くのシステムがもつ、ファイルシステム I/O の先行読み取り (read ahead) におけるバグに対処するために必要とされるものである。 このバグにより、パディングが無い場合はトラックの最後に位置する 1 個または複数のファイルの読み取りに失敗することになる。

Track at Once モードか、オーディオトラックとデータトラックが混在するミクストモードで作られた CD には通常パディングが存在する。

ファイルシステムの最後のファイルの読み取りエラーを回避するため、-pad オプションはデフォルトで有効になっている。

-no-pad
パディングを行わない。 またブートパーティションが 16 セクタの倍数で始まるという調整を行わない。
-path-list ファイル名
ISO9660 ファイルシステムに加えられるディレクトリおよびファイル名リストを記述したファイルを指定する。 このファイルはコマンドラインより後に処理される。 なおファイル名として ‘-’ を指定すると、リストは標準入力から読まれる。
-P 発行者ID
ボリュームヘッダに書かれる発行者 ID テキストを指定する。 この ID は CDROM の発行者を表す 128 文字までのテキストで、通常メールアドレスや電話番号などを記述する。

これは .mkisofsrc ファイル内で「PUBL=」としても指定できるが、コマンドラインが優先する。

訳者注: 通常は指定する必要はない。
-p 編集者ID
ボリュームヘッダに書かれる編集者 ID テキストを指定する。 この ID は CDROM の編集者を表す 128 文字までのテキストで、通常メールアドレスや電話番号などを記述する。

これは .mkisofsrc ファイル内で「PREP=」としても指定できるが、コマンドラインが優先する。

訳者注: 通常は指定する必要はない。
-print-size
ファイルシステムサイズの推定値を表示し、終了する。 この値はセクタサイズである 2048 の倍数となる。

このオプションは mkisofs の出力を cdrecord にリダイレクトして Disk At Once モードで CD-R を焼く場合などに有用である。 この場合、実際に CD を焼く前に“dry-run”を行うことで書き込まれるサイズを事前にチェックする必要があるためである。

訳者注: dry-run とはドライブへの出力をさせない状態でライティングソフトを走らせること。

従来の mkisofs ではこの情報を標準エラー出力に出力していたが、シェルスクリプトなどで利用しにくいため、現在では数字の部分だけは標準出力にも出すようにしている。

cdrecord を使って CD を焼くシェルスクリプトの例を次に示す。

cdblocks=` mkisofs -print-size -quiet ... `
mkisofs ... | cdrecord ... tsize=${cdblocks}s -
-quiet
mkisofs をさらに無口にさせる。 一切の経過表示は出力されなくなる。
-R
ISO9660 ファイルシステムを UNIX などで利用ために必要な情報を付加するため、Rock Ridge プロトコルによる SUSP および RR レコードを生成する。
-r
このオプションは -R と似ているが、ファイルの所有者やモードをより使い易くする。 「使い易く」とは具体的には次のとおりである。
  • uid と gid をゼロにする。 通常これらの値はイメージを作成したシステム以外では意味をもたないため。
  • すべての read ビットを真にする。 これによりシステムによらずすべてのファイルとディレクトリが読み取り可能となる。
  • 元のファイルに execute ビットが一つでも立っていたら、全ての execute ビットを立てる。 これによりシステムによらずファイルは実行可能なものとなる。
  • 元のディレクトリに search ビットが一つでも立っていたら、全ての search ビットを立てる。 これによりシステムによらずディレクトリは検索可能なものとなる。
  • すべての write ビットはクリアされる。 CD-Rom は通常 read-only でマウントされるからである。
  • その他の特殊ビットはすべてクリアされる。 例えば lock ビットは read-only ファイルシステムでは不便だし、uid 0 , gid 0 に対する set-uid ビットも意味が無い。
  • Win32 においてはすべてのファイルの execute ビットが立てられる。 これは Win32 および Cygwin POSIX エミュレーションレイヤ にファイルパーミッションの概念が無いためである。

-uid, -gid, -dir-mode, file-mode, -new-dir-mode などのオプションも参照のこと。

-relaxed-filenames
ISO9660 ファイル名として、数字,英大文字に加えて英小文字を除くすべての 7bit ASCII 文字が使えるようにする。 ISO9660 規格に違反することになるが通常問題にならない。 注意して使うこと。
-sort ソートファイル
メディア上のファイルの位置を定義するソートファイルを指定する。 ソートファイルの中身はファイル名とソートオフセットの重みが対になったリストである。 重みが大きいファイルはメディアの開始部分に置かれ、逆に重みが小さいファイルはメディアの終了部に置かれる。

ファイル名と重みは一つの空白文字かタブで区切られ、1行の終わりは重みを表す文字で終わっていなければならない。 行の先頭から最後の空白文字またはタブの直前までの全ての文字がファイル名とみなされる。 これはファイル名の途中や最後に空白文字を含む場合に配慮したものである。

このオプションは ISO9660 ディレクトリ内のファイルのソートを行うものではなく、CD イメージに書き込まれる順序を制御するものであり、データのレイアウトを最適化するのに有効である。 詳細は README.sort ファイルを参照のこと。

-split-output
出力ファイルを約 1GB 単位に分割する。 これは DVD サイズの ISO9660 イメージをラージファイルをサポートしない OS 上で扱うのに有用である。この場合 cdrecord は複数のファイルを結合して単一トラックとして DVD に記録することになる。

このオプションを使うには、「-o ファイル名」オプションも指定されなければならない。 このときのファイル名を filename とすると、分割されて書き出されるファイル名は、filename_00,filename_01,filename_02 ... のようになる。

-stream-media-size セクタ数
ストリーミングモードを指定し、メディアサイズをセクタ数で指定する。 これは tar プログラムの出力を mkisofs にパイプすることで中間ファイル無しに ISO9660 ファイルシステムを作成する際に用いる。

このオプションが指定されると mkisofs は標準入力からデータを読み込み、出力として STREAM.IMG というファイルを生成する。 パディングを含む最大ファイルサイズは指定されたサイズより 200 セクタ分小さくなる。 -no-pad オプションが指定された場合は指定されたサイズより 50 セクタ分小さくなる。

もし実際のファイルが指定されたサイズより小さい場合、mkisofs はパディングを行うことでサイズを合わせる。 これには多少時間がかかる場合がある。

このオプションは単純な ISO9660 ファイルシステムを作る場合にのみ指定し、マルチセッションやハイブリッド関連オプションと共に用いられるべきではない。

-stream-file-name name
将来用。
-sysid ID
システム ID を設定する。 これは .mkisofsrc ファイル内で「SYSI=」としても指定できるが、コマンドラインが優先する。
訳者注: システムIDにはオペレーティングシステム名などを記述するが通常は指定する必要はない。 最大 32 文字。
-T
CDROM の各ディレクトリ内に変換テーブルファイル TRANS.TBL を生成する。 これは Rock Ridge 非対応システムで正しいファイル名を得るために有用である。 またこのファイルにはブロック型デバイスとキャラクタ型デバイスのメジャー/マイナー番号に関する情報も含まれている。 またシンボリックリンクについてはリンク先のファイル名の情報が含まれている。
-table-name 変換テーブルファイル名
上で述べた変換テーブルファイル名を指定する。 ファイル名を除き -T オプションと同等の効果がある。 マルチセッションのイメージを作る場合、変換テーブルファイル名は前のセッションのものと同一でなければならない。
-ucs-level レベル番号
Joliet SVD の Unicode 準拠レベルを設定する。 1〜3 が有効でデフォルトは 3 である。
-udf
生成されるファイルシステムイメージに UDF サポートを含ませる。 UDF サポートは未だ限定的であり、現段階では純粋な UDF イメージを作ることはできない。 今は UDF データ構造を Joliet 構造に連結させたものとなっており、この実装には多くの抜けが存在することがわかっている。 例えば UID/GID,POSIX パーミッション,シンボリックリンクなどが未サポートである。 UDF はデータ構造に必要なスペースに加え、セクタ番号 20〜256 までの領域を消費する。
-uid uid
ファイルのユーザIDを指定された uid にする。 このオプションを指定すると自動的に Rock Ridge エクステンションが有効になる。
-use-fileversion
ファイルシステムのファイルごとに付けられたバージョン番号を使う。 このオプションが指定されない場合、すべてのファイルのバージョンは 1 となる。 指定されるバージョン番号の範囲は ;1〜;32767 である。 VMS ではこのオプションがデフォルトで有効になる。
-U
ファイル名の変換をすべて無効にする。 つまり関連オプション -d, -l, -L, -N, -relaxed-filenames, -allow-lowercase, -allow-multidot, -no-iso-translate の全てのオプションを指定したことになり、複数のドット (‘.’) がもてたり、英大小文字が混在できるなど、ISO9660 規格に完全に違反するものである。

これは HP-UX の CDFS がいかなるエクステンションも認識しないことへの対応として有効である。 使用には細心の注意を払うこと。

-no-iso-translate
ISO9660 ファイル名として使用が禁止されている ‘#’ と ‘~’ の変換をしない。 これらの文字は Microsoft システムでよく使われるため、このオプションを用意した。 ISO9660 規格に違反することになるが通常問題にならない。 注意して使うこと。
-V ボリュームID
マスタブロックに書かれるボリューム ID (ボリューム名またはラベル) を設定する。 これは .mkisofsrc ファイル内で「VOLI=」としても指定できるが、コマンドラインが優先する。

ディスクに書き込まれたボリューム ID は Solaris ボリュームマネジメントシステムによってマウントポイントとして使われ、Microsoft Win 32 と Apple Mac プラットフォームではディスク名として使われる。

-volset ボリュームセットID
ボリュームヘッダに書かれるボリュームセット ID を指定する。 これは .mkisofsrc ファイル内で「VOLS=」としても指定できるが、コマンドラインが優先する。
訳者注: ディスクが特定のボリュームセットに含まれる場合、そのセット名を表す最大 128 文字までのテキストを指定する。 通常は指定する必要はない。
-volset-size 数値
ボリュームセットサイズを表す数値を指定する。 これは CD セットの枚数であり、例えばオペレーティングシステムのインストールディスクセットの枚数などがこれにあたる。 コマンドラインにおいてこのオプションは -volset-seqno よりも前に指定されなければならない。
-volset-seqno 数値
ボリュームセットシーケンス番号を表す数値を指定する。 これは CD セット中の現在のインデックス番号である。 コマンドラインにおいてこのオプションよりも前に -volset-size が指定されていなければならない。
-v
実行中により多くの情報を表示する。 一つのコマンドラインにこのオプションを 2 回指定すると、特別なデバッグ情報も表示する。
-x パス
指定されたパスを CDROM イメージ書き込み対象から除外する。 パスはコマンドラインの引数であるパス名を含み、それに続くものとして指定する。 このオプションを次の例のように複数使用数することで複数のパスを指定可能である。
mkisofs -o cd -x /local/dir1 -x /local/dir2 /local

注意: -m オプションと -x オプションの説明は誤りであり、改訂されなければならない。 現在では 2 つのオプションは共に glob をパラメータとしてもつ。 glob がパスの最終部分にマッチする場合も、パス全体とマッチした場合も除外の対象となる。

訳者注: すなわちこの -x オプションの説明は誤りであるということである。 上の注意をよく読むこと。
-z
トランスペアレント圧縮されたファイルを扱うための特殊 RRIP レコードを生成する。 これはトランスペアレント圧縮をサポートするシステム (Linux 2.4.14 以降など) でのみ使えるオプションである。

mkisofs 実行前に mkzftree ユーティリティで対象ファイル群を圧縮しておかなければならない。 また mkisofs 実行時にはこの -z オプションに加え、-R または -r オプションを指定して Rock Ridge を有効にしなければならない。

トランスペアレント圧縮は Rock Ridge 標準ではない。 このため、できあがったディスクは Linux 上でしか透過的に読むことはできない。 他のオペレーティングシステムで読むためには mkzftree ユーティリティを使って手動でファイルの伸長を行わなければならない。


HFS オプション

-hfs
ISO9660/HFS ハイブリッド CD を作る。 このオプションは -map, -magic および (または)各種 --オプションと組み合わせて用いる。
-apple
Apple エクステンションを施した ISO9660 CD を作る。 -apple オプションは -hfs オプションと似ているが、後者が HFS ハイブリッドボリュームを作るのに対し、このオプションでは Apple エクステンションが ISO9660 に追加される。

以前の mkisofs ではこのオプションが指定されると Rock Ridge アトリビュートも含まれるようになっていたが、現在ではこれを行わないものとなっている。 これを行うためには明示的に指定しなければならない。

-map マッピングファイル
ファイル名の拡張子に対する CREATOR と TYPE の対応を示したマッピングファイルを指定し、これによるファイルのマッピングを行う。 マッピングされファイルは Apple/UNIX ファイルフォーマットでないものに限る。 詳細は後の HFS CREATOR/TYPE の章を参照。
-magic マジックファイル
ファイルのマジックナンバー (通常ファイルの先頭数バイトに格納されている) に対する CREATOR と TYPE の対応を示したマジックファイルを指定し、これによるファイルのマッピングを行う。 マッピングされファイルは Apple/UNIX ファイルフォーマットでないものに限る。 詳細は後の HFS CREATOR/TYPE の章を参照。
-hfs-creator CREATOR
全てのファイルに対するデフォルトの CREATOR を指定する。 指定する CREATOR は厳密に 4 文字であること。 詳細は後の HFS CREATOR/TYPE の章を参照。
-hfs-type TYPE
全てのファイルに対するデフォルトの TYPE を指定する。 指定する TYPE は厳密に 4 文字であること。 詳細は後の HFS CREATOR/TYPE の章を参照。
-probe
Apple/UNIX フォーマットのファイルを検出するためにファイルの内容を調べる。 このフォーマットの詳細は後の HFS MACINTOSH ファイルフォーマットの章を参照のこと。

MacBinary と AppleSingle ファイルであるかを判断するにはファイルの内容を読むしかないため、このオプションを指定すると処理時間が長くなる。 もし Apple/UNIX フォーマットのファイルがどれであるかが判っている場合は、-probe を使うよりも後の --オプションを組み合わせて用いた方が良い。

-no-desktop
空の Desktop ファイルを生成しない。 CD を Macintosh で使う際、新規 HFS Desktop ファイルが作られ、システムフォルダに入れられる。 このためにデフォルトでは空の Desktop ファイルが HFS ボリュームに追加されるが、このオプションを指定することで空の Desktop ファイルは作られない。
-mac-name
ISO9660,Joliet, Rock Ridge ファイル名として HFS ファイル名を使う。詳細は後の HFS MACINTOSH ファイル名の章を参照のこと。
-boot-hfs-file ドライバファイル
Macintosh 用ブータブル CD を作るためのドライバファイルを指定する。 詳細は後の HFS ブートドライバの章を参照のこと。

(Alpha)

-part
HFS パーティションテーブルを生成する。 デフォルトではパーティションテーブルは必要ないが、古い型の Macintosh 用ドライバではハイブリッド CDROM であることを認識するのに HFS パーティションの存在が必要なものがあるため、このオプションを用意した。
-auto AutoStartファイル
特定のアプリケーションやドキュメントを起動するため、QuickTime 2.0 Autostart 機能を使った HFS CD を作成する。 パラメータは起動するアプリケーションやドキュメントのファイル名で、CD のトップレベルにある必要がある。 ファイル名の長さは最大 12 文字である。

(Alpha)

-cluster-size サイズ
PC Exchange ファイルのクラスタまたはアロケーションユニットのサイズをバイト数で指定する。 このオプションが指定されると --exchange オプションも指定されたことになる。 詳細は後の HFS MACINTOSH ファイルフォーマットの章を参照のこと。
-hide-hfs glob
glob で指定されたファイルを HFS ボリュームから隠蔽する。 ファイルは見えなくなるだけで ISO9660 and/or Joliet ディレクトリに存在する。 glob とはシェルのワイルドカード形式のパターンで、除外したいファイル名の一部にマッチしなければならない。 glob は次のように複数指定することができる。
mkisofs -o rom -hfs -hide-hfs '*.o' -hide-hfs foobar

この例では、ファイル名が“.o”で終わるファイルと“foobar”というファイルが HFS ボリュームから隠蔽される。 また“foobar”という名前のディレクトリがあれば、そのディレクトリおよびその内容もすべて隠蔽される。

また glob はパス名であっても構わない。この場合は次のようにコマンドラインに与えられたソースディレクトリを基準としたものを指定する。

mkisofs -o rom -hfs -hide-hfs src/html src

この例では src ディレクトリ内の“html”という名前のファイルかディレクトリが隠蔽されるが、 他の場所にある“html”ファイル,ディレクトリは対象にならない。

このオプションは -hide and/or -hide-joliet オプションと共に用いるべきである。 なお glob をディレクトリ名にマッチさせる場合も最後に ‘/’ を付けないことに注意。 詳細は README.hide を参照のこと。

-hide-hfs-list ファイル名
隠蔽対象となる glob リストを指定したファイルから読み取る。
-hfs-volid HFSボリュームID
HFS パーティションのボリューム名を設定する。 これは Macintosh 上でディスクに割り当てられる名前で、-V オプションで指定されたボリューム ID はこの名前で置き換えられる。
-icon-position
Apple/UNIX ファイル内にアイコン位置情報があればそれを使う。 これにより、Macintosh のデスクトップ上に現れるアイコンの位置は元の状態が維持される。 スクリーン上のフォルダの位置とサイズ,スクロール位置,フォルダビュー (アイコンで表示,小さいアイコンで表示など) なども保存される。 将来このオプションはデフォルトで有効にされる予定。

(Alpha)

-root-info ファイル名
HFS ボリュームのルートフォルダについて、スクリーン上のサイズと位置,スクロール位置,フォルダビューなどの情報をセットする。 詳細は README.rootinfo を参照のこと。

(Alpha)

-prep-boot ファイル名
PReP ブートイメージファイルを指定する。 最大 4 個指定可能。 詳細は README.prep_boot を参照のこと。

(Alpha)

-input-hfs-charset キャラクタセット名
-mac-name オプションが指定された場合の HFS ファイル名に使われる入力キャラクタセット名を指定する。 デフォルトは cp10000 (Mac Roman) である。 詳細は後のキャラクタセットHFS MACINTOSH ファイル名の章を参照のこと。
-output-hfs-charset キャラクタセット名
HFS ファイル名に使われる出力キャラクタセット名を指定する。 デフォルトは上の入力キャラクタセット名と同じになる。 詳細は後のキャラクタセットの章を参照のこと。
-hfs-unlock
mkisofs はデフォルトで HFS ボリュームをロックされた状態にするが、このオプションを指定することでアンロックとなる。 これにより hfsutils などの他のアプリケーションでボリュームをいじれるようになる。 このオプションを使用する際の注意については後の HFS の問題/制約の章を参照のこと。
-hfs-bless フォルダ
指定したディレクトリ(フォルダ)を“Bless”する。 これは通常システムフォルダのことで、HFS ブータブル CD 作成の際に指定する。

パラメータであるフォルダはパスを含む形で指定すること。 例えばコマンドラインで ./cddata がパス指定されていて対象フォルダが“System Folder”という名前なら、パラメータとして与えるフォルダは "./cddata/System Folder" となる。 (名前がスペースを含む場合は " " で括ることを忘れずに)

-hfs-parms パラメータ(群)
HSF ファイルシステムを生成する際に変更するパラメータを指定する。 意外と使うことになるオプションである。 詳細はソースファイル libhfs_iso/hybrid.h を参照のこと。
--cap
AUFS CAP Macintosh ファイルを探す。 他の --オプションが指定され無い限り、CAP Apple/UNIX ファイルフォーマットについてのみ検索が行われ、他の Apple/UNIX ファイルフォーマットの検索は無効となる。
--netatalk
NETATALK Macintosh ファイルを探す。
--double
AppleDouble Macintosh ファイルを探す。
--ethershare
Helios EtherShare Macintosh ファイルを探す。
--ushare
IPT UShare Macintosh ファイルを探す。
--exchange
PC Exchange Macintosh ファイルを探す。
--sgi
SGI Macintosh ファイルを探す。
--xinet
XINET Macintosh ファイルを探す。
--macbin
MacBinary Macintosh ファイルを探す。
--single
AppleSingle Macintosh ファイルを探す。
--dave
Thursby Software Systems DAVE Macintosh ファイルを探す。
--sfm
Microsoft's Services for Macintosh ファイルを探す (NT のみ)。 (Alpha)
--osx-double
MacOS X AppleDouble Macintosh ファイルを探す。
--osx-hfs
MacOS X HFS Macintosh ファイルを探す。

キャラクタセット

mkisofs はファイル名を 8 ビット文字による文字列として POSIX に準拠したやり方で処理する。

一方 8 ビットで全ての言語をコーディングするのは無理である。 Unicode や ISO-10646 では少なくとも 21 ビットあれば知りうる限りの言語を表現できる文字コーディングを定義している。 その代表的なものに UTF-32,UTF-16 または UTF-8 コーディングがある。

UTF-32 はプレーンな 32 ビットコーディングであるがあまり使われない。 UTF-16 は Microsoft の Win32 で使われているが、サポートできるのは文字コードのサブセットのみであり、また 16 ビット文字は POSIX ファイルシステムインターフェースに準拠しないという欠点がある。

近年の UNIX オペレーティングシステムではファイル名として UTF-8 コーディングが使われることが多い。 これは次に示すように Unicode コードセットを完全に表現できるものである。

  • 各 32 ビット文字は 1 個以上の 8 ビット文字で表現される。
  • ISO-8859-1 (中央ヨーロッパと北米で用いられる) に分類される場合は、そのまま UTF-32 か UTF-16 にコーディングされた Unicode 文字となる。
  • 7 ビット ASCII (限定されたキャラクタセットとしてアメリカをはじめとする各国で使われる) に分類される場合は、UTF-32,UTF-16 または UTF-8 にコーディングされた Unicode 文字となる。
  • 1 バイトの UTF-8 で表現できない文字コード (通常 > 0x7F の値をもつ) の場合、エスケープシーケンスを使ってより多くの文字を表現する。

すべてのオペレーティングシステムが UTF-8 コーディングを使っていれば mkisofs はファイル名のキャラクタコード変換をやらなくても済む。 しかし残念なことに Apple は完全に独自なコーディング方法をとっているし、Microsoft は POSIX ファイル名インターフェースとは非互換の Unicode コーディングを用いている。

UTF-8 コーディングを採用していない全てのオペレーティングシステムでは、各バイトの意味はローカルオペレーティングシステムで用いられるキャラクタセットやコードページ (Microsoft 用語) に依存しており、実際の文字はその地域やユーザが使う自然言語を反映するものである。

通常はキャラクタコード 0x00〜0x1f が制御文字であり、0x20〜0x7f は 7 ビットASCII 文字,そして (PC や Mac では) 0x80〜0xff はその他の文字に使われる。 残念ながらこれは ISO 規格に従うものではない。 ISO では 0x80〜0x9f の範囲は制御文字用として確保されており、0xa0〜0xff の範囲しか他の文字として利用できない。

使いたい文字や記号の数は 256 をはるかに越えているため、1バイトではキャラクタセット中のほんの僅かな部分が表現できない。 このため同じキャラクタコードでも異なるキャラクタセット間では違う文字を表わすことになる。 例えば中央ヨーロッパで生成されたファイル名が東ヨーロッパのコンピュータ上で同じように表示されるとは限らないのである。

更に地域や言語に対応するキャラクタセットがオペレーティングシステム間で統一されていないことが、この問題を一層複雑にしている。 例えば“鋭アクセントつき小文字の e (‘é’) ”は PC 上ではコード 0x82 であるが、Macintosh 上では 0x8e であり、UNIX 上では 0xe9 である。 なお、Unicode ではこのキャラクタコードは 0x00000000e9 であり、ほとんどの UNIX システムは基本的にこれに従い、PC や Mac が標準から外れているといえる。

すべてのオペレーティングシステムのファイル名が Unicode にでも統一されない限り、そのシステムのファイル名に使われているキャラクタセットと、CD 上のファイル名として使われるべきキャラクタセットを指定することは必須である。

キャラクタセットを指定するオプションには次の 4 種類がある。

-input-charset
入力キャラクタセット。 そのシステムで使われているローカルキャラクタセットを定義する。 すべてのキャラクタセット変換の起点となるものである。 このデフォルト値は DOSベースシステム上では cp437 となり、他の全てのシステムでは iso8859-1 となる。

もし -J オプションが与えられると、Joliet ディレクトリ内では対応する Unicode が使われる。 -jcharset オプションは、 -input-charset オプションと -J オプションの組み合わせと等価である。

-output-charset
出力キャラクタセット。 CD 上の Rock Ridge ファイル名として使われるキャラクタセットを定義する。 デフォルトは入力キャラクタセットと同じになる。 これは通常、UNIX以外のプラットフォームで使うことになる。 例えば、Microsoft Win32 マシンで Rock Ridge CD を作る場合などである。 UNIX マシンでは通常入力キャラクタセットと同じで良い。
-input-hfs-charset
入力 HFS キャラクタセット。 各種 Apple/UNIX ファイルフォーマットからデコードされる HFS ファイル名に使われる HFS キャラクタセットを定義する。 これは -mac-name オプションと共に用いられるものである。 デフォルトは cp10000 (Mac Roman) である。 この詳細は HFS MACINTOSH ファイル名の章を参照のこと。
-output-hfs-charset
出力 HFS キャラクタセット。 HFS ファイル名を生成する際の HFS キャラクタセットを定義する。 ほとんどの場合 -input-charset オプションと共に用いられる。 デフォルトは入力 HFS キャラクタセットと同じになる。

mkisofs には多くのキャラクタセットが組み込まれており、“mkisofs -input-charset help”とすればその一覧が得られる。 このリストに無いキャラクタセットを使いたい場合は、そのキャラクタセットの仕様を記述したファイル(キャラクタセットファイルと呼ぶ)を作り、上の各オプションの引数として (キャラクタセット名の代わりに) そのファイル名を与えれば良い。

キャラクタセットファイルの書式は http://www.unicode.org/Public/MAPPINGS にあるマッピングファイルの書式と同じで、次のようになる。

第1カラム: 入力バイトコード (0xXX の16進表記)
第2カラム: 対応する Unicode (0xXXXX の16進表記)
(以降の文字は無視される)

空行,カラム数が 2 以外の行,および ‘#’ で始まるコメント行は警告無しに無視される。 定義されない入力バイトコードはすべて Unicode の 0x0000 にマッピングされる。

UNICODE としてサポートしているのは POSIX ファイル名互換の UTF-8 のみで、 16 ビット UNICODE (UTF-16) と 32 ビット UNICODE (UTF-32) は POSIX 非準拠のためサポートしない。 UTF-8 は Soralis を始めとする今日の UNIX では大抵実装されている。

キャラクタセットの 1:1 のマッピングを行う場合は、キャラクタセット指定オプションの引数として“default”というキーワードを与えれば良い。 これは古い mkisofs (v.1.12) の動作に相当する。

入力ファイル名から ISO9660 ファイル名への変換は、入力キャラクタセットを元にして行うわけではない。 ISO9660 キャラクタセットとして使える文字は ASCII 文字の中の一部のみであり、無意味な変換を余儀なくされる。 mkisofs は変換できない文字をすべてアンダーバー (‘_’) に置き換える。

HFS CREATOR/TYPE

Macintosh のファイルには CREATOR と TYPE というプロパティが存在する。 CREATOR はそのファイルがどのアプリケーションで作成されたものかを表し、TYPE はデータの種類を表す。 これにより、Macintosh ユーザはそのファイルをダブルクリックするだけで適切なアプリケーションを起動できたりするわけである。

CREATOR,TYPE 共に (厳密に) 4 文字の文字列で表現されるもので、Macintosh 上で ResEdit などを使えば見ることができる。

すべての Apple/UNIX 形式のファイルは CREATOR と TYPE の情報をもっている。 それ以外のファイルでもファイル名の拡張子と CREATOR./TYPE の関係を定義したマッピングファイル(-map オプション)や、ファイルの先頭数バイトにあるマジックナンバーと CREATOR./TYPE の関係を定義したマジックファイルを使って (-magic オプション) CREATOR と TYPE を得ることができる。

-map オプションと -magic オプションが両方指定された場合、コマンドラインで先に現れるオプションが優先される。

逆に -map オプションと -magic オプションのいずれも指定され無い場合、または指定されていてもマッチするものが無い場合、CREATOR と TYPE として .mkisofsrc ファイルに定義された値か、-hfs-creator オプションと -hfs-type オプションで定義された値が使われる。 それらが定義されていない場合、 CREATOR は“unix”となり、TYPE は“TEXT”となる。

マッピングファイルの書式は aufs で使われる afpfile と同じである。 各行は、拡張子,ファイル変換,CREATOR,TYPE,コメントの 5 つのカラムから構成される。 ‘#’ で始まる行はコメントとみなされ、無視される。
次にマッピングファイルの例を示す。

# Example filename mapping file
#
# EXTN   XLate   CREATOR   TYPE     Comment
.tif     Raw     '8BIM'    'TIFF'   "Photoshop TIFF image"
.hqx     Ascii   'BnHq'    'TEXT'   "BinHex file"
.doc     Raw     'MSWD'    'WDBN'   "Word file"
.mov     Raw     'TVOD'    'MooV'   "QuickTime Movie"
*        Ascii   'ttxt'    'TEXT'   "Text file"
第1カラム (EXTN)
マッピングされる UNIX ファイル名の拡張子。 最後の ‘*’ でいずれにもマッチしない場合のデフォルトを定義。
第2カラム (Xlate)
UNIX と Macintosh ファイル間のテキスト変換のタイプ。 これは aufs(1) 用であり、mkisofs では無視される。 ただし TYPE カラムにおいてバイナリファイルに対して ‘TEXT’ とすると Macintosh 上でテキスト変換が行われ、正しく読めくなる可能性があるので注意が必要である。 このため TYPE のデフォルト値は ‘????’ とするのが妥当かもしれない。
第3,第4カラム (CREATOR,TYPE)
CREATOR および TYPE キーワード。 シングルクォーテーションで括られた 4 文字の文字列でなければならない。
第5カラム (Comment)
コメント。 ダブルクォーテーションで括ること。 このフィールドは aufs との互換性のために設けられたものであり、mkisofs では無視される。

マジックファイルの書式は Linux の file(1) コマンドで使われる magic(4) とほぼ同じである。 実際マジックファイルを読んでデコードするルーチンは Linux の file(1) コマンドを元にして作られている。

マジックファイルの各行はタブで区切られたバイトオフセット,タイプ,テスト,メッセージの 4 つのカラムから成り、‘#’ で始まる行はコメントとして無視される。 次にマジックファイルの例を示す。

# Example magic file
#
# off   type      test       message
0       string    GIF8       8BIM GIFf  GIF image
0       beshort   0xffd8     8BIM JPEG  image data
0       string    SIT!       SIT! SIT!  StuffIt Archive
0       string    \037\235   LZIV ZIVU  standard unix compress
0       string    \037\213   GNUz ZIVU  gzip compressed data
0       string    %!         ASPS TEXT  Postscript
0       string    \004%!     ASPS TEXT  PC Postscript with a ^D to start
4       string    moov       txtt MooV  QuickTime movie file (moov)
4       string    mdat       txtt MooV  QuickTime movie file (mdat)

この書式の説明は magic(4) のマニュアルページを参照のこと。 オリジナルの magic(4) と異なる点は第4カラムのメッセージで、 mkisofs ではここを CREATOR と TYPE の定義に用いている。 具体的には、最初の 4 文字が CREATOR に相当し、続く 4 文字が TYPE に相当する。 CREATOR と TYPE の間の空白は無くても良い。 その他の全ての情報は無視される。 また継続行 (‘>’ で始まる行) も無視される。

-magic オプションを使った場合、マジックナンバーのチェックのために全てのファイルの読み取りが行われるため、処理時間は大幅に増加する。

この章で述べたことを以下にまとめる。

  • デフォルトの CREATOR は ‘unix’ で、TYPE は‘TEXT’ である。
  • これらのデフォルト値は .mkisofsrc ファイル内の該当するエントリで変更できる。 またオプションの -hfs-creator と -hfs-type を指定することでも変更できる。
  • ファイルが既知の Apple/UNIX フォーマットでそのフォーマットが選ばれていれば、CREATOR と TYPE はそのファイルから抽出される。
  • それ以外のファイルについては、拡張子(-map オプション) やマジックナンバー (-magic オプション) によって CREATOR と TYPE が決められる。
  • マッピングファイル内でデフォルト (‘*’) が定義されている場合は、デフォルトの CREATOR と TYPE としてそれが優先される。

すべての CREATOR と TYPE のデータベースは http://www.angelfire.com/il/szekely/ にある。

HFS MACINTOSH ファイルフォーマット

Macintosh 用のファイルはデータフォークとリソースフォークと呼ばれる 2 つの部分から成る。 いずれも空であっても構わない。 UNIX を始めとする他の OS では、通常一つの部分 (フォーク) をもつファイルしか扱うことはできない。 さらに Macintosh のファイルには多くの固有のアトリビュートが含まれており、やはりこれらを UNIX で扱うことはできない。

例えば JPEG イメージ をもつ Macintosh 用ファイルの場合、そのイメージはデータフォークに格納され、サムネイルはリソースフォークに格納されるという具合である。 プラットフォームにかかわらず意味のある部分は通常データフォークの方である。

すなわち Macintosh 用ファイルを UNIX ファイルシステムに格納するためには、2 つのフォークと (ファインダ情報として参照される) 特別なアトリビュートに対応する何らかの方法が必要になる。 残念ながら UNIX 上で Macintosh 用のファイルを格納する機能をもつソフトウェアパッケージは、それぞれ独自の方法でそれを実現しているようである。

mkisofs が (部分的にでも) サポートする Apple/UNIX フォーマットは以下のとおりである。

CAP AUFS format
データフォークは独立したファイルとなる。 リソースフォークは .resource というサブディレクトリ下のデータフォークと同じ名前のファイルに格納される。 また同様にファインダ情報は .finderinfo というサブディレクトリ下のデータフォークと同じ名前のファイルに格納される。
AppleDouble/Netatalk
データフォークは独立したファイルとなる。 このファイル名の先頭に ‘%’ を付加したファイルにリソースフォークとファインダ情報が共に格納される。 Nettalk も同じフォーマットであるが、リソースフォークとファインダ情報は .AppleDouble というサブディレクトリ下のデータフォークと同じ名前のファイルに格納される。
AppleSingle
データ構造は上と似ているが、2 つのフォークとファインダ情報は 1 本のファイルに格納される。
Helios EtherShare
データフォークは独立したファイルとなる。 リソースフォークとファインダ情報は .rsrc というサブディレクトリ下のデータフォークと同じ名前のファイルに格納される。
IPT UShare
EtherShare フォーマットとよく似ているが、ファインダ情報の格納方法が若干異なる。
MacBinary
2 つのフォークとファインダ情報は 1 本のファイルに格納される。
Apple PC Exchange
DOS (FAT) ディスクに Apple ファイルを保存するために Macintosh で使われるフォーマット。 データフォークは独立したファイルとなる。 リソースフォークは resource.frk (RESOURCE.FRK) という名前のサブディレクトリに格納される。 ファインダ情報は finder.dat (FINDER.DAT) というファイル内の 1 レコードとして格納される。 このファイルはデータフォークと同じディレクトリに作られる。

注意: mkisofs は PC Exchange ファイルが存在する (またはコピーされる元の) FAT の クラスタサイズを知る必要がある。 このサイズは -cluster-size オプションで与えられる。 ここで与えるクラスタサイズまたはアロケーションサイズは DOS の CHKDSK コマンドで知ることができる。

なお、 PC Exchange v.2.2 (MacOS 8.1) 以上 のファイルには対応していない。 対象となる PC Exchange ファイルがあるDOS メディアは vfat ではなく、msdos タイプとしてマウントされなければならない。

SGI/XINET
SGI マシン用 HFS ディスクフォーマット。 データフォークは独立したファイルとなる。 リソースフォークは .HSResource というサブディレクトリ下のデータフォークと同じ名前のファイルに格納される。 ファインダ情報は .HSancillary というファイル内の 1 レコードとして格納される。 このファイルはデータフォークと同じディレクトリに作られる。
Thursby Software Systems DAVE
Macintosh が SMB サーバに Apple ファイルを格納する際に用いられるフォーマット。 データフォークは独立したファイルとなる。 リソースフォークは resource.frk というサブディレクトリ下に格納される。 格納には AppleDouble フォーマットが用いられる。
Services for Macintosh (SFM)
NT サーバが NTFS ファイルシステム上で用いるフォーマット。 データフォークは元のファイル名として独立して格納される。 リソースフォークは“ファイル名:AFP_Resource”という NTFS ストリームとして格納される。 またファインダ情報は“ファイル名:Afp_AfpInfo”という NTFS ストリームとして格納される。 これらのストリームは通常ユーザからは見えない。

警告: mkisofs は SFM フォーマットをすべてサポートするわけではない。 NT サーバに格納された HFS ファイルやフォルダがその名前に NT では許されていない文字を使っていたら、NT はそれらの文字をプライベート用 Unicode に変換する。 許されていない文字とは、" * / < > ? | などであり、ファイル名の最後が空白かピリオドの場合はそれらも変換される。 さらに文字コード 0x01〜0x1f の制御文字や Apple のロゴマークも変換される。
残念ながらそれらプライベート用 Unicode は NT 版 mkisofs では読むことができない。 このため、このような文字を含むファイルは無視され、それがディレクトリの場合はそのディレクトリ以下全てのファイルが無視される。

MacOS X AppleDouble
MacOS X では HFS/HFS+ ファイルを非 HFS ファイルシステム (UFS や NFS など) にコピーした場合、そのファイルは AppleDouble フォーマットになる。 データフォークは独立したファイルとなる。 このファイル名の先頭に ‘._’ を付加したファイルにリソースフォークとファインダ情報が共に格納される。
MacOS X HFS (Alpha)
MacOS X システム上の HFS/HFS+ ファイルのフォーマット (Apple/UNIX エンコーディングではない)。 データフォークは独立したファイルとなる。 リソースフォークは“/rsrc”というサフィックスをもつ仮想ファイル (pseudo file) に格納される。 ファインダ情報は MacOS X のライブラリコールによってのみ得ることができる。

注意: README.macosx を参照のこと

これは mkisofs の MacOS X 版にのみ実装されている。

もしファイルがサイズゼロのリソースフォークと空のファインダ情報をもっていたら、それは Apple/UNIX エンコーディングされていないとみなされる。 このため CREATOR と TYPE は別の方法で設定される。

mkisofs は CREATOR と TYPE ,日付 および (可能なら) ファインダ情報から得られた他のフラグも設定しようと試みる。 さらにファインダ情報内に Macintosh ファイル名が存在すればそれもセットするが、存在しない場合は Unix ファイル名と同じになる。 詳細は後の HFS MACINTOSH ファイル名の章を参照のこと。

-apple オプションを指定した場合、TYPE と CREATOR は Rock Ridge アトリビュートと全く同じ形で ISO9660 ディレクトリレコード内のシステム用予備フィールドか SUSP フィールドに格納される。 実はこのオプションを指定すると、 Rock Ridge アトリビュートの先頭部分にも Apple エクステンションが追加されるようにしてある。 つまり Apple エクステンションが得られるということは、Rock Ridge エクステンションも得られるということである。

Apple エクステンションではリソースフォークが ISO9660 associated file として存在する。 これは ISO9660 ファイルシステム上の通常のファイルとほぼ同じであるが、ディレクトリレコードの associated file flag (第2ビット) がセットされる点が異なる。 このファイル名はデータフォークを格納した (Apple 以外のマシンで見える) ファイルと同じになる。 ISO9660 assosieted file は通常他の OS では無視される。

-hsf オプションを指定した場合、TYPE,CREATOR およびその他のファインダ情報は ISO9660 ボリューム上では見えない別の HFS ディレクトリに格納される。 この HFS ディレクトリは前に述べたデータおよびリソースフォークファイルに関連付けられている。

ほとんどの場合、-apple オプションよりも -hfs オプションを使う方が良い。 なぜなら -apple オプションではファイル名として、利用できる文字が制限された ISO9660 文字の使用を余儀なくされるからである。 ただし Apple エクステンションではファイルが効率良くディスク上に詰め込まれるため、より多くのファイルを書き込めるという利点がある。 これは書き込むサイズが 650MB に近い場合は重要なことである。

HFS MACINTOSH ファイル名

可能な限り、CD の HFS パートで使われるファイル名と同じ名前の Apple/UNIX ファイルが使われる。 しかしながらすべての Apple/UNIX エンコード方式が ファインダ情報による HFS ファイル名を表現できるわけではないため、例外的に UNIX ファイル名が使われることがある。 この場合は ‘/’ を含む特殊文字および ‘\x7f’ を越える文字はエスケープされて使用される。

aufs のエスケープ方式は ‘:’ に文字コードを 16 進 2 桁で続けるものである。 Nettalk と EtherShare の場合は ‘:’ の代わりに‘%’ を使うという点を除けば同様である。

mkisofs が HFS ファイル名を見つけられなかった場合は UNIX 名を用いる。 ただしすべての %xx や :xx は一つの文字コードとみなされ変換される。 もし xx に 16 進文字 (['0-9a-fA-F']) 以外の文字が含まれていた場合、変換されない。 実際は‘:’ は HFS のディレクトリセパレータとして用いられるため、‘%’に変換される。 通常の UNIX ファイルに %xx や :xx などの文字列が含まれている場合も変換されることに注意。 次に変換の例を示す。

This:2fFile → This/File
This:File → This%File
This:t7File → This%t7File

HFS ファイル名では英大文字/小文字をサポートするが、ファイルシステム自体これらを区別しない。 例えばファイル名“aBc”と“AbC”は同じとみなされる。 もし同一ディレクトリ内で HFS ファイル名として同じになる 2 つのファイルが存在したら、mkisofs は片方のファイル名に ‘_’ を付加していくことで、可能な限りユニークな名前にしようと試みる。

-mac-name オプションが与えられ、HFS ファイル名が存在すれば、mkisofs はその名前を ISO9660,Joliet および Rock Ridge ファイル名を作る基準として使う。 HFS 名なしの通常の UNIX ファイルについては UNIX 名が使われる。 以下に例を挙げる。

ある MacBinary (または PC Exchange) ファイルがあり、その HFS ファイル名が someimage.gif で UNIX ファイルシステム上では someimage.gif.bin という名前で格納されている場合、CD の HFS パートでは当然 someimage.gif というファイル名になる。 しかしながら -mac-name オプションが指定されていないと mkisofs は UNIX 名を元に他の名前を作るため、ISO9660 名は SOMEIMAG.BIN のようになり、Joliet/Rock Ridge 名は someimage.gif.bin となってしまう。 このファイルが GIF イメージファイルとすれば、本来 .gif とするのが自然である。

一方 -mac-name オプションが与えられた場合は HFS ファイル名が基準になるため、ISO9660 名は SOMEIMAG.GIF となり、Joliet/Rock Ridge 名は someimage.gif となり、都合がよい。

-mac-name オプションに -T オプションを付加しても、現状では期待したとおりの動作はしない。 TRANS.TBL ファイルには Macintosh 名は使われず UNIX 名が使われる。

HFS ファイル名を Joliet/Rock Ridge ファイル名に変換する際のデフォルトのキャラクタセットは cp10000 (Mac Roman) である。 これを変更するには -input-hfs-charset オプションでキャラクタセットを指定する。 指定可能なビルトイン HFS キャラクタセットは cp10006 (MacGreek),cp10007 (MacCyrillic),cp10029 (MacLatin2),cp10079 (MacIcelandandic) そして cp10081 (MacTurkish) である。

注意: HFS ファイル名に使われる文字コードは Apple/UNIX フォーマットから取得できる限り、それが優先され変換は行われない。 HFS ファイル名から Joliet/Rock Ridge 名への変換のみが行われる。

現状の mkisofs は ISO9660 および Joliet ファイル名として使えない文字を取り除くが、Rock Ridge 名については mkisofs が UNIX ファイル名を直接扱えるようにとの配慮からそのままとなる。 しかし文字 ‘/’ は UNIX のファイル名には使えないものの HFS ファイル名として有効であるため -mac-name オプションが与えられた場合に限り、Rock Ridge 名の‘/’ は ‘_’ に変換される。

Apple エクステンションが用いられた場合、 Macintosh 上では ISO9660 ファイル名のみが見えることになる。 しかし Macintosh の ISO9660 ドライバはレベル 2 のファイル名をサポートしていることから、 -allow-multidot オプションを使っても問題は起こらないはずである。

ただしいくつかのケースで予期しないことが起こることがある。 例えば、“this.file.name”というファイル名は“THIS.FILE”に変換される。 つまり ‘.’ はひとつだけになる。 別の例では、 ファイル名“abcdefgh”は“ABCDEFGH”として見えるが、“abcdefghi”は“ABCDEFGHI.”となる。 つまり最後に ‘.’ が付く。 これは Macintosh の問題か mkisofs/mkhybrid のいずれの問題かは不明である。

なおファイル名中のすべての英文字は Macintosh 上では大文字になる。 また当然であるが DOS/Win3.X では レベル 2 ファイル名はサポートされない。

HFS CUSTOM VOLUME/FOLDER ICONS

HFS CD にカスタムアイコンをもたせるには、ルート (トップレベル) フォルダに Macintosh 標準ボリュームアイコンファイルが存在しなければならない。 またボリュームにカスタムアイコンをもたせるには、ボリュームの ”Get Info”ボックス内にあるボリュームアイコンにそのカスタムアイコンがペーストされなければならない。 これによりルートフォルダに ‘Icon\r’ という不可視ファイルが作られる。 (‘\r’ はキャリッジリターンコードのこと)

同様にカスタムフォルダアイコンは、そのフォルダ内の ‘Icon\r’ という不可視ファイルとなる。

mkisofs を使ってそれらのカスタムアイコンを作る方法としては、Mac 上でブランクフロッピディスクをフォーマットして、その“Get Info”ボックスにアイコンをペーストするのがもっとも簡単である。 Linux に HFS モジュールがインストールされていれば、そのフロッピを次のようにマウントする。

mount -t hfs /dev/fd0 /mnt/floppy

これでフロッピはデフォルトで CAP ファイルシステムとしてマウントされるはずである。 次に mkisofs を使って次のようにイメージを生成する。

mkisofs --cap -o output source_dir /mnt/floppy

Linux を使っていない場合はフロッピのアイコンファイルをコピーするのに hfsutils が使える。 この場合アイコンファイルが制御文字 (‘\r’) を含んでいることに注意する。

hmount /dev/fd0
hdir -a
hcopy -m Icon^V^M icon_dir/icon

ここで“^V^M”はキーストロークの Ctrl+V と Ctrl+M のことである。 次に mkisofs を使って次のようにイメージを生成する。

mkisofs --macbin -o output source_dir icon_dir

カスタムフォルダアイコンの作り方/使い方も同様である。 つまり Mac 上で適当なフォルダの“Get Info”ボックスにアイコンをペーストし、作られた“Icon\r”ファイルを mkisofs ソースツリー内の対応するディレクトリに転送するだけである。

アイコンファイルは ISO9660 および Joliet ツリーからは見えなくした方が良いであろう。

Joliet CD にカスタムアイコンをもたせる手順については次の URL を参照のこと。

http://www.fadden.com/cdrfaq/faq03.html#['3-21']

HFS ブートドライバ

Macintosh 用のブータブル CD を作ることは可能である。

ブート可能な HFS CD 作成には Apple CD-ROM (互換) ドライバ,ブータブル HFS パーティションと必要なシステム,ファインダ およびその他のファイル群が必要である。

ドライバは Macintosh 用ブータブル CD があれば、apple_driver ユーティリティを使うことで取り出すことができる。 取り出されたファイルは -boot-hfs-file オプションで使う。

HFS パーティション (この場合はハイブリッドディスク) は適切なシステムフォルダをもたなければならず、これはやはり別の CD-ROM から取り出すことになる。

パーティションをブート可能なものとするためには、そこにブートブロックセットがなければならない。 ブートブロックとは、パーティションの最初の 2 ブロックに存在するものである。 通常の(ブート不可能な)パーティションではこのブートブロックはゼロで埋めつくされている。

通常 Macintosh ディスクにシステムファイルがコピーされる際に、ブートブロックに対して必要な設定が行われるが、残念ながら私はその仕様を完全に理解しているわけではない。 つまり以下の説明は多分 OK であろうという程度のものである。 

注意
Apple CD からドライバを取り出したり Apple ソフトウェアをあなたの CD にコピーするという行為により、Apple Computer, Inc. の Software License Agreements に従う義務が生じることに注意。

EL TORITO ブート情報テーブル

-boot-info-table オプションが与えられた場合、mkisofs は -b オプションで指定されたブートファイルのオフセット 8 から 56 バイトの範囲に“ブート情報テーブル”を書き込む。 これは元のファイルシステムで行われるため、このファイルの再作成が困難なものであれば、コピーを残しておくなどの準備が必要であろう。 このファイルには各種ポインタが含まれていて、それらをブート時に正確に得ることは簡単ではない。

このテーブルのフォーマットは次のとおりである。 ただしすべての整数はセクション 7.3.1 (“リトルエンディアン”) フォーマットである。

オフセット 名前 サイズ 意味
8 bi_pvd 4バイト プライマリボリュームディスクリプタのLBA
12 bi_file 4バイト ブートファイルのLBA
16 bi_length 4バイト ブートファイルの長さ (バイト数)
20 bi_csum 4バイト 32ビットチェックサム
24 bi_reserved 40バイト 予備

32 ビットチェックサムとはブートファイルのオフセット 64 から始まるすべての 32 ビットワードの合計である。 すべてのリニアブロックアドレス (LBA) は CD のセクタ数で表現される。 (通常 1 セクタ = 2048 バイト)

コンフィグレーション

mkisofs は .mkisofsrc というファイルを探す。 探す順序は、現在のワーキングディレクトリ→ユーザのホームディレクトリ→mkisofs バイナリあるディレクトリとなる。

このファイルの内容は TAG=value という形式の行から成り、この方法で各種オプションを指定できる。 TAG の大文字/小文字は区別されない。 ボリュームヘッダ中のいくつかのフィールドはこのファイルでのみ設定可能で、コマンドラインから設定することはできない。

‘#’ で始まる行はコメントとみなされる。 以下に有効な TAG をまとめる。

APPI
アプリケーション ID。 ディスク上にどのようなアプリケーションが含まれるかを記述する。 最大 128 文字。 -A オプションが優先する。
訳者注: アプリケーションIDはディスク上のデータを利用できるアプリケーションに関する情報を記述したものである。
COPY
コピーライト情報。 コピーライト通知を含むディスク上のファイル名を指定する場合が多い。 最大 37 文字。 -copyright オプションが優先する。
ABST
Abstract 情報。 Abstract を含むディスク上のファイル名を指定する場合が多い。 最大 37 文字。 -abstract オプションが優先する。
訳者注: Abstract とは CDの概要を説明したもの。
BIBL
書誌情報 (bibliography)。 Bibliography を含むディスク上のファイル名を指定する場合が多い。 最大 37 文字。 -biblio オプションが優先する。
PREP
CDROM の編集者を表す情報。 通常メールアドレスや電話番号などを記述する。 最大 128 文字。 -p オプションが優先する。
PUBL
CDROM の発行者を表す情報。 通常メールアドレスや電話番号などを記述する。 最大 128 文字。 -P オプションが優先する。
SYSI
システム ID 。 最大 32 文字。 -sysid オプションが優先する。
VOLI
ボリューム ID 。 最大 32 文字。 -V オプションが優先する。
VOLS
ボリュームセット名。 最大 128 文字。 -volset オプションが優先する。
HFS_TYPE
Macintosh ファイルのデフォルト TYPE 。 厳密に 4 文字であること。 -hfs-type オプションが優先する。
HFS_CREATOR
Macintosh ファイルのデフォルト CREATOR 。 厳密に 4 文字であること。 -hfs-creator オプションが優先する。

mkisofs をコンパイルする際にも多くのフィールドのデフォルト値を変更できる。 詳細は deafults.h を参照のこと。

使用例

cd_dir を CD 上のルートディレクトリとみなし、ISO9660 ファイルシステムイメージを cd.iso というファイル名で生成する。

% mkisofs -o cd.iso cd_dir

同様に Rock Ridge エクステンションのイメージを生成する。

% mkisofs -o cd.iso -R cd_dir

上の例に加えてすべてのファイルに読み取り許可を与え、オーナを root とする。

% mkisofs -o cd.iso -r cd_dir

Joliet および Rock Ridge エクステンション付きの HFS ハイブリッド CD イメージを生成する。

% mkisofs -o cd.iso --netatalk cd_dir

上の例に加えて“mapping”ファイルに記述された拡張子をもつファイルに対して CREATOR と TYPE を設定する。

% mkisofs -o cd.iso -map mapping cd_dir

cd_dir と another_dir をソースディレクトリとしてApple エクステンション付き ISO9660 CD イメージを生成する。 ただし既知の Apple/UNIX フォーマットをもつファイルについては既定のデコードを行い、それ以外のファイルについてはマジックナンバーを元に、“magic”ファイルで指定された CREATOR と TYPE を与える。

% mkisofs -o cd.iso -apple -magic magic -probe cd_dir another_dir

次に示すのは CD に“README”というベース名をもつ複数のファイルを置く例である。 ただし ISO9660/Rock Ridge,Joliet および HFS CD の各ファイルシステムからは 1 本の README ファイルのみが存在するように見えるが、実際はそれぞれのファイルシステムに応じた異なるファイルにアクセスできるようにする。

カレントディレクトリの内容は次のとおり。

% ls -F
README.hfs README.joliet README.unix cd_dir/

次のコマンドにより、ディレクトリ cd_dir の内容と共に 3 本の README ファイルを含む CD イメージが cd.iso に出力される。 ただし各ファイルシステムからは 1 本の README ファイルしか見えない。

% mkisofs -o cd.iso -hfs -J -r -graft-points \
-hide README.hfs -hide README.joliet \
-hide-joliet README.hfs -hide-joliet README.unix \
-hide-hfs README.joliet -hide-hfs README.unix \
README=README.hfs README=README.joliet \
README=README.unix cd_dir

これにより HFS CD からは README.hfs が README ファイルとして見え、その他の README ファイルは見えない。 Joliet および ISO9660/Rock Ridge についても同様である。

-hide オプションの組み合わせによっては予想しない結果になることもある。

作者

mkisofs は UNIX の 標準 mk*fs ツールを元にしたものではない。 なぜなら mkisofs は他と違ってディスク上の既存ファイルシステムの完全なコピーを ISO9660 ファイルシステムとして生成しなければならないからである。 mkisofs という名前はあまり適切ではないかもしれない。 なぜならこれは単にファイルシステムを生成するのではなく、ファイルシステムを含むファイルを作り出すものだからである。 しかしながら UNIX には mkproto (あまり知られていないが) のように、やはりファイルシステムを含むファイルを生成する他のツールもあるので良しとしておこう。

mkisofs ユーティリティの初期のバージョン (1993年〜1998年) は Eric Youngdale (<ericy@gnu.ai.mit.edu> または <eric@andante.org>) によって書かれた。 古いバージョンの mkisofs ユーティリティの著作権は Yggdrasil Computing, Incorporated が保有する。 SCSI トランスポートライブラリと mkisofs 対応レイヤ,およびユーティリティ内の新規部分 (1999年から開始された) が Joerg Schilling によって書かれたことで、mkisofs のコピーライトは“Copyright (C) 1999, 2000, 2001 Joerg Schilling”となった。

その他のコピーライトは次のとおりである。

HFS hybrid code Copyright (C) James Pearson 1997, 1998, 1999, 2000, 2001
libhfs code Copyright (C) 1996, 1997 Robert Leslie
libfile code Copyright (C) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.

注意

mkisofs は suid root (root 権限で実行) としてインストールするのが安全である。 これはマルチセッションイメージを作る際に既存のセッションの内容を読み取る必要があるためである。

Rock Ridge アトリビュート付きのファイルシステムイメージを作る場合、ディレクトリツリーの階層が ISO9660 で許されるレベルを越えると mkisofs はディレクトリの再配置を行う。 この結果は CD のルートディレクトリにある RR_MOVED と呼ばれるディレクトリに残されるため、これを無視してはいけない。

バグ

  • ハードリンクをもつファイルで、リンク先のファイルが ISO9660 ファイルシステムツリーに存在しない場合は、そのファイルのファイル参照カウントは誤った値になる。
  • ルートディレクトリの ‘.’ エントリにおける SUSP レコードチェックが行われない。 これはRock Ride エンハンスメント の有無を調べるために行われるもの。
    この問題はマルチセッションモードでデータをを追加するために既存のセッションを読み取る際に顕在化する。
  • マルチセッションモードでデータを追加する時、再配置されたディレクトリが正しく読み取られない。
    新規セッションに(既存の再配置されたものと同じ?)深層ディレクトリが含まれない場合、既存の再配置されたディレクトリはすべて失われる。
    繰り返すが、第 1 セッションが深層ディレクトリの再配置を伴って作成され、その深層ディレクトリとは異なる単一ディレクトリをもつ新規セッションを追加する場合などである。
  • TRANS.TBL からのマルチセッションでは RR_MOVED が再利用されない。
  • マルチセッションモードでは RR_MOVED の正式名エントリ (whole_name entry) が作成されない。

まだ他にもバグはあるはずである。 見つけたら作者に連絡してい欲しい。

HFS の問題/制約

libhfs の改造においては、各ルーチンがどのように動くべきかについて多くのことを試行錯誤しなければならなかった。 思いもしなかった状況に陥ったり、推測が間違っていたことにたまたま気付くこともあった。

このため、mkisofs が期待どおりに動くことは保証できない (私自身未だ大きな問題に遭遇していないが) 。 ほとんどの HFS 関連機能は正しく動くはずであるが、すべてを厳密にテストしたわけではない。 このためテストや実装が不十分な機能については“(Alpha)”という印をつけてある。

HFS ファイル名では英大文字/小文字をサポートするが、ファイルシステム自体これらを区別しない。 例えばファイル名“aBc”と“AbC”は同じとみなされる。 もし同一ディレクトリ内で HFS ファイル名として同じになる 2 つのファイルが存在したら、mkisofs は片方のファイル名に ‘_’ を付加していくことで、可能な限りユニークな名前にしようと試みる。

複数の HFS ファイル名/ディレクトリ名で、最初の 31 文字が同じになる名前が存在した場合、最後の数文字を“_N”で置き換えることでユニークであることを保証している。 ここで N は十進数である。

Apple/UNIX ファイルやディレクトリを接ぎ木 (grafting : 前の説明を参照) する場合は注意が必要である。 Apple/UNIX エンコードされたファイルやディレクトリの名前を変えるような指定はできない。 例えば Apple/UNIX エンコードされた“oldname”が CD に追加される場合、次のコマンドラインは不正である。

mkisofs -o output.raw -hfs -graft-points newname=oldname cd_dir

この場合 mkisofs は“oldname”をデコードできない。 なお名前の変更を除けば Apple/UNIX エンコードされたファイルやディレクトリの接ぎ木 (graft) は可能である。

-M と -C オプション付きで HFS ボリュームを生成する場合、最後のセッションにあるファイルのみが HFS ボリュームに入れられる。 mkisofs は既存のセッションにあるファイルを HFS ボリュームに入れることはできない。

セッションが -part オプション付きで生成され Mac にマウントされた場合、各セッションは異なるボリュームとみなされる。 この場合、-V か -hfs-volid オプションにより各ボリュームに異なる名前を付けたほうが良い。 さもないと各ボリュームは同じ名前でデスクトップ上に現れることになる。

シンボリックリンクは HFS ディレクトリに追加できない。(他の特殊ファイルも同様)

ハイブリッドボリュームは 同じ量のデータを収容した ISO9660 ボリュームに比べて大きくなる。 場合によって (DVD サイズのボリュームなどで) ハイブリッドボリュームは極端に大きくなることがある。 これは HFS ボリュームが大きくなればなるほどアロケーションブロックサイズ (ファイルが占有する最小容量) も大きくなるためである。 具体的には、650MB の CD のアロケーションブロックサイズは 10KB であるが、4.7GB の DVD の場合は約 70KB にもなる。

HFS ボリュームの最大ファイル数はおよそ 65500 である。 ただし本当の限界はこれより若干少ない。

UNIX マシン上で hfsutils を使えばハイブリッドボリュームにアクセスできる。 しかしそのボリュームがロックされている限り、内容を変更することはできない。 -hfs-unlock オプションを使えばアンロックの状態のイメージを作ることができるが、その場合でもボリュームの内容をいじるのは (何をしているかを完全に把握できない限り) 止めておいた方が良い。 なぜならそれは“本当の”HFS ボリュームではないからである。

-mac-name オプションに -T オプションを付加しても、現状では期待したとおりの動作はしない。 TRANS.TBL ファイルには Macintosh 名は使われず UNIX 名が使われる。

mkisofs がファイルの中身を変更することはないが、 バイナリファイルのTYPE カラムを ‘TEXT’ としてしまうと Macintosh 上でテキスト変換が行われ、正しく読めくなる可能性がある。 このため TYPE のデフォルト値は ‘????’ とするのが妥当かもしれない。

-mac-boot-file オプションはまだまったく動かない。

PC Exchange v.2.2 (MacOS 8.1) 以上 のファイルには対応していない。 対象となる PC Exchange ファイルがあるDOS メディアは Linuxでは vfat ではなく、msdos タイプとしてマウントされなければならない。

SFM フォーマットは一部分だけサポートされている。 詳細は前の HFS MACINTOSH ファイルフォーマットの章を参照のこと。

-sparc-boot または -generic-boot オプションを -boot-hfs-file や -prep-boot オプションと組み合わせて使うことはできない。

mkisofs は 4GB を越える HFS ハイブリッドイメージを生成できるはずである。 ただし厳密なテストは行っていない。

SEE ALSO

cdrecord(1), mkzftree(1), magic(5), apple_driver(8).

今後の改良について

何らかの GUI を付加したい。

入手場所

mkisofs は cdrecord パッケージに含まれており、次の場所から入手可能である。

ftp://ftp.berlios.de/pub/cdrecord/

hfsutils は次の場所から入手可能である。

ftp://ftp.mars.org/pub/hfs

mkzfree は diofs-tools パッケージに含まれており、次の場所から入手できる。

ftp://ftp.kernel.org/pub/linux/utils/fs/zisofs/

メーリングリスト

mkisofs,mkhybrid の開発に積極的に参加したい場合は、メールの本文に“subscribe”という単語を入れて次のアドレスにメールを送ることで cdwriting メーリングリストに参加できる。

other-cdwrite-request@lists.debian.org

リストのメールアドレスは次のとおり。

cdwrite@lists.debian.org

MAINTAINER

Joerg Schilling
Seestr. 110
D-13353 Berlin
Germany

HFS MKHYBRID MAINTAINER

James Pearson
j.pearson@ge.ucl.ac.uk

サポートに関する質問は下記へ。

cdrecord-support@berlios.de
または
other-cdwrite@lists.debian.org

明らかなバグを発見した場合は下記へ。

cdrecord-developers@berlios.de
または
schilling@fokus.fhg.de

メーリングリストへの参加は下記から。

http://lists.berlios.de/mailman/listinfo/cdrecord-developers
または
http://lists.berlios.de/mailman/listinfo/cdrecord-support

日本語訳

石川泰光 (ishikawa@ioss.jp)
本ドキュメントの再配布は自由とする。ただし本翻訳物に関する著作権は放棄しない。
2004年5月14日

Version 2.0 24 Dec 2002 MKISOFS(8)





  • 本記事の無断転載を禁止します。
  • 本記事の内容を実践されることは各人の責任のもとで行なって下さい。いかなる結果についても当社では関知しません。

IOSS Home



日本の商品を海外にお届け



日本の情報発信
バイリンガルブログ
Bridge Japan Blog




TTWWTP稲葉技術士事務所

Copyright © 2003-2015 Ishikawa Open System Solutions Co., Ltd. All Rights Reserved.