ここ数ヵ月ほど、地区自治会などの年度代りな事務作業に忙殺されているうちに、桜は花から葉に代わり、ゴールデンウィークも立夏もすぎてしまいました。
月1ペースで書いてきた本連載も、そのような事情で2ヵ月ほど休載させていただいたので、ちょっと久しぶりの掲載となります。決して人気が無いから打ち切られたわけではないので(苦笑)、今後とものんびりとお付き合いいただければ幸いです。
さて、今回から数回かけてxorrisoというISO9660ファイルシステムの操作ツールを紹介しようと思います。
以前、この連載でPlamo LinuxをBIOSに代わる新しい起動システムであるUEFIに対応させた話をしました。
その際、UEFI環境にインストールするためにはDVDやUSBメモリといったインストールメディアがUEFIに対応している必要があること、そのためにはどのような設定やツールが必要なのかも紹介しました。
この回に紹介した方法で、DVDとUSBメモリそれぞれが、BIOSからでもUEFIからでも起動できるようにはなったものの、最後に触れたように、USBメモリからUEFI起動するためには、DVDイメージ(ISOファイル)をループバックでマウントし、収められているファイルやディレクトリ一式をUSBメモリのファイルシステム上にコピーする、という一手間をかける必要がありました。
実用上この手間はさほど問題にはならないものの、UEFI対応のお手本にしていたArch Linuxのインストーラでは、DVDイメージをUSBメモリにベタ書きするだけでUEFI起動ができていたので、Plamoの環境でそれができないことはちょっと気になっていました。
そこで、手が空いた時にArch Linuxの各種ドキュメントを読み直してみたところ、DVDイメージを作成するためにxorrisoというツールを使っていることに気づきました。"xorriso"という不思議な名前のツールは見たことも聞いたこともなかったので、「これは一体何だろう?」と調べてみたところ、予想外に高機能なツールに出会うことになりました。
GNU xorriso
xorrisoはGNUプロジェクトの1つとして公開されているソフトウェアで、CD-ROMやDVD用に広く利用されているISO9660ファイルシステムを操作するためのツールです。
ドキュメントによると、xorrisoは「POSIX互換なファイルシステム上のファイルオブジェクトを、Rock Ridge対応のISO9660ファイルシステムにコピーするためのツール」だそうです。
従来、Plamo Linuxの環境ではCD/DVDイメージの作成や書き込みはcdrtools由来のmkisofsとcdrecordを使ってきました。mkisofsで作ったISOファイルをcdrecordでCDやDVDに書き込む、そういうスタイルに慣れきっている人間にとって、xorrisoは一種のパラダイムシフトをもたらすツールでした。
cdrtoolsの始まりはSunのSolaris用に開発された汎用SCSIライブラリで、そのライブラリを利用して当時普及し始めていたSCSI接続のCD-Rドライブを操作するツールとしてcdrecordが開発されたそうです。そういう由来のため、Linuxからcdrecordを使う場合も汎用SCSIドライバ(sg.o)が必要で、書き込み先の指定も/dev/sr0のようなデバイス名ではなく、SCSIバスやターゲットIDを指定するdev=1,0,0のような特殊な形式になっています。また、cdrecordはISOファイルの書き込み専門で、ISOファイルを作成するのは別コマンドのmkisofsという分業体制を取っています。
一方、xorrisoは、ISO9660ファイルシステムを操作するためのlibisofs、CDやDVD等の光学ドライブを操作するためのlibburnといったライブラリが先行して開発され、それらライブラリの機能を利用するためのツールとして開発されたコマンドです。その結果、ISOファイルの作成から光ディスクへの書き込みまでをサポートすると共に、書き込み先のデバイスの指定も-dev /dev/sr0のように最近の慣例に従い、ISOファイルを作らずHDD上のファイルやディレクトリを直接光ディスクに書き込むことも可能です。
その反面、manページが5000行近くあるくらい機能が豊富で、どのオプションをどう指定すればやりたいことが実現できるのか、ドキュメントを斜め読みしただけではなかなかわかりません。そのせいか、Google等で調べてもまとまった使い方を紹介しているページはあまり無いようです。そこで今回から数回に渡ってxorrisoの機能と簡単な使い方を紹介してみようと思います。
xorrisoの使用例
執筆時点でのxorrisoの最新版は1.4.6で、上記xorrisoのホームページからソースコードがダウンロードできます。前述のようにxorrisoはlibisofsやlibburn等、複数のライブラリから構成されているものの、それらライブラリのソースコードも同梱されているので、ビルドは簡単です。
SCSIコマンドを送る際にroot権限を必要とするcdrecordとは異なり、xorrisoは一般ユーザー権限で動作するように設計されています。しかしながら、光学ドライブに書き込むためには該当するデバイスファイル(通常は/dev/sr0)に書き込み権限が必要です。
最近の一人一台環境では/dev/sr0をo+rwに設定しても構わない気はするものの、筆者が使っているPlamo Linux環境では/dev/sr0はcdrom グループに属し、cdromグループに登録したユーザーのみが書き込めるようにしています。
xorrisoから利用可能な光学ドライブを調べるには-devicesオプションを指定します。
ドライブに挿入されているメディアの情報を調べるには-tocオプションを指定します。未使用のDVD-Rに対してこのオプションを使用すると以下のような結果になりました。
cdrecord/mkisofsを使ってこのDVDにファイルを書き込むには、書き込みたいファイルを作業用のディレクトリにコピーし、サブディレクトリ等を調整した上でmkisofsでISOファイル化し、作成したISOファイルをcdrecordで書き込む、という手順が必要でした。
それに対し、xorrisoではファイルシステム上の任意の場所にあるファイルやディレクトリを直接DVDに書き込むことが可能です。
たとえば、「らじる★らじる」経由で録音した4月分の「ラジオ英会話」のファイルが"~/NHK"ディレクトリに収められているとします。
これらのファイルをDVDに書き込む場合、xorrisoでは以下のように指定します。"-map ~/NHK /ラジオ英会話"のオプションは、ファイルシステム上の"~/NHK"ディレクトリをISOファイル上では"/ラジオ英会話"ディレクトリに対応づける指示です。
書き込めたかをDVDをマウントして確認します。書き替えたDVDをマウントする際は、一度光学ドライブをオープン/クローズしてカーネル内部のキャッシュをクリアしてやる必要があります。
さて、翌月になり、5月分の録音ファイルが溜ってきました。
先に書き込んだDVDにはまだまだ余裕があるので5月分のファイルを追加してみます。xorrisoでは-update_rオプションを指定すると、DVDに書き込まれたファイルとHDD上のファイルをチェックして、書き込まれていないファイルのみを追記することができます。
追記したDVDの中身を確認すると5月分の番組もちゃんと書き込まれています。
2ヵ月分を書き込んでもDVDにはまだまだ余裕があるようなので、複数年分を整理できるようにディレクトリ名に年数を入れておきましょう。今回は最後に"-commit -eject all"を指定して、書き込み終了後、自動的にトレーをイジェクトさせました。
再度DVDの中身を確認するとディレクトリ名がちゃんと変っています。
今回利用しているのは再書き込み可能なDVD-RWではなく、一度書き込むと消去できないはずのDVD-Rメディアです。
それではなぜDVD-Rが自由に書き替えられるのか、というと、xorrisoはDVDのマルチセッション機能を利用して、過去のセッションの内容を上書きして書き替えたように見せているのです。
今まで書き込んできたDVDを-tocオプションで調べると、3つのセッションが登録されたマルチセッションDVDになっています。最初のセッションが4月分のファイルを書き込んだ状態、2番目のセッションが5月分のファイルを追記した状態、最後のセッションがディレクトリ名を変更した状態です。
マルチセッションDVDをマウントするとデフォルトでは最後のセッションがマウントされ、書き替えていった最新の内容が表示されることになります。
一方、マウント時のオプション指定で過去のセッションをマウントすることも可能で、たとえばsbsector=0を指定すると最初のセッションがマウントされ、4月分の番組のみを書き込んだ状態に戻ったかのように見えます。
xorrisoには他にもさまざまな機能があるものの、だいぶ長くなってきたので、より詳しい使い方は次回に紹介することにしましょう。
DVDのマルチセッション機能はmkisofs/cdrecordでも利用できたものの、オプション指定やセッションごとのISOファイルを用意するのが面倒で使ったことがなく、長い間、CDやDVDは「一度に全領域を書き込む」ためのメディアとしてしか使っていませんでした。
それに対しxorrisoは、今回紹介したようにDVDのマルチセッション機能を柔軟かつ簡単に扱え、DVDを「ログ構造化FS」風に利用できるので、目からウロコが落ちたような気分です。
xorrisoはこのように強力なツールなものの、指定可能なオプションが多すぎてわかりづらく、それらを解説しているドキュメントも長大で読み解くのが大変なため、広く普及しているとは言いづらいようです。今回の紹介記事が少しでもxorriso普及の手助けになればいいな、と思っています。