タイトルBrowsing Mac OS X》Mac OS X 10.1で追加されたCD-R作成機能を試してみる(2)便利さと動作原理カテゴリーメディア制作, Mac OS X
作成日2001/12/13 17:22:37作成者新居雅行
以上のように、あたかも、CD-Rドライブが普通のディスクドライブのように扱えるのがとても便利なところである。たぶん、ファイルのバックアップを取るだけなら、CD-R書き込みアプリケーションというものはもう使うことはないと思われる。また、書き込み中に他の作業をしていてもほとんど問題はないようだ。もちろん、筆者としてそうした動作を「保証」はできないが、書き込みをしながら、プロセスをチェックして、自分の環境での動作を調べて判断してほしい。筆者は、500MHzのPowerBook G4を使っているが、書き込み中にTermialでtopコマンドを使ってCPUの負荷を見ていると、Finderとカーネルでだいたい40%ほどとなっている。まだ、CPU的には余裕があると判断できる。だから、書き込みをしながら、メールを読んだり返事を書いたりしても、今までに失敗をしたことは1度もないくらいである。また、FireWireの外付けハードディスクから、外付けのCD-Rへの書き込みでも問題なく処理ができた。
これは、マルチタスク化した恩恵と言っていいだろう。Mac OS時代は、書き込みを始めると何にもできなかった。それに、うまく行ったと思ったら、スリープに入って失敗したり、書き込み速度も遅かったので、とにかくCD-Rへの書き込みはひと仕事以上の面倒臭さがあった。しかしながら、Mac OS X上で、そして12倍速といったスピードが実現した今となっては、毎日バックアップをとっても気にならない(ほんまかいな〜笑)…といっていいくらいの環境の差になっている。
上記の手順で、ファイルをCD-Rドライブのアイコンにコピーしている間も、後で説明するように、実際には、起動したハードディスク上に書き込んでいるだけで、その間はCD-RWドライブにはまったくアクセスをしていない。ファイルコピー中にMacintoshをそっとしておくという必要もないわけだ。ネットワークからコピーしてもいっこうにかまわない。それに、CD-Rディスクの容量を超えそうになるとエラーがその場で出る。以前だと書き処理をしてからエラーが出るなどとにかく手際が悪くなりがちであったが、そうした心配もない。

それでは、実際に背後でどんな動きになっているかは興味あるところだ。ただ、完璧に分かったわけではないのであるが、解析した範囲での動作を説明してみたい。動作を見る限りは、どこかにファイルを作っておいて、CD-Rの中身を覚えておいて、それを書き込みの指示でディスクに書き込むと言う感じかなというあたりは想像できるところだろう。
まず、CD-Rディスクを入れると、hdidという名前のプロセスが1つ起動する。そのプロセス情報を見ると、次のようになっている。

/usr/bin/hdid /System/Library/CoreServices/Finder.app/Contents/Resources/cdr74-proxy.dmg -shadow /tmp/burndisk000342 -plist -drivekey

このhdidの詳細はmanコマンドで参照できる。基本的には、ディスクイメージファイルをマウントしたりするのに使うコマンドなのであるが、1つ目の引数がマウントするディスクイメージファイルだ。すると、なんとFinderアプリケーションのパッケージ内にあるcdr74-proxy.dmgというイメージファイルをマウントしていることになる。ところが、該当するディレクトリを見てみると次のようなものだ。書き込み処理は12月に行っているのに、なぜかファイルの日付けは「OSをビルドした日」のような感じである。

-rw-r--r-- 1 root wheel 131957 Sep 8 16:29 cdr21-proxy.dmg
-rw-r--r-- 1 root wheel 31650 Sep 8 16:29 cdr4-proxy.dmg
-rw-r--r-- 1 root wheel 388039 Sep 8 16:29 cdr63-proxy.dmg
-rw-r--r-- 1 root wheel 417511 Sep 8 16:29 cdr74-proxy.dmg
-rw-r--r-- 1 root wheel 439791 Sep 8 16:29 cdr80-proxy.dmg

実は、hdidは、単にマウントするだけなら、マウントをしてプロセスを終えてしまう。ここで-shadowというオプションがある場合には、実際に書き込みを行った場合、指定したイメージファイルのcdr74-proxy.dmgではなく、シャドウとして指定した/tmp/burndisk000342というファイルの方に書き込みが行われると言う動作になる。つまり、マウントしたドライブに対する書き込み処理が、-shadowで指定したファイルにリダイレクトされるのである。その後に読み出しを行うと、やっぱりリダイレクトされたファイルから行う。cdr74-proxy.dmgが生ディスクのイメージだとすると、実際の読み書きは/tmp/burndisk****ファイルに対して行われるということになるだろう。
つまり、cdr74-proxy.dmg等のファイルは、ディスクのふりをするだけのためのものだろう。たとえば、ここでは620MBのディスクのふりをしておけば、それ以上のファイルのコピーをしてもFinderで警告が出るようにできるという具合だ。従って、Finderでファイルをコピーした結果は/tmp/burndisk****ファイルに残され、実際にCD-Rに書き込みを行うときには/tmp/burndisk****ファイルから読み出されるということになると考えられる。
ただ、そうなると、/tmpディレクトリでlsコマンドを入れると「burndisk000342」なるファイルが見えると思うのだが、それが見えないのである。これについては理由は分からない。fs_usageコマンドでファイルシステムの読み書きを見たところ、確かにCD-Rをマウントするときなどに/tmp/burndisk****ファイルへのアクセスがあるので、ファイルは作っているとは思われるが、いろいろなタイミングで見てみたものの実際に見ることはできなかった。ただ、もし、CD-Rの書き込みが失敗したり、カーネルパニックなどが発生すると、/tmp/burndisk****ファイルが残っている可能性がある。tmpディレクトリごと削除して再起動するとクリアできるのではないかと思うのだが、これは実際に試したわけではなく想像の範囲である。

引き続いて、CD-ROMのコピーを手軽に行う方法を説明しよう。
(この項、続く)
関連リンク