玩式草子─ソフトウェアとたわむれる日々

第91回 xorrisoとUEFIブート再び[その1]

この記事を読むのに必要な時間:およそ 6 分

ここ数ヵ月ほど,地区自治会などの年度代りな事務作業に忙殺されているうちに,桜は花から葉に代わり,ゴールデンウィークも立夏もすぎてしまいました。

月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ファイルシステムにコピーするためのツール」だそうです。

"XORRISO"という不思議な名前は,もともとは"POsix","RockRidge","ISO9660"の頭文字から"PORRISO"という名称を考えたものの,Linuxを筆頭に昨今のUNIX由来のOSではファイル名長が14文字というPOSIX仕様ではなく,255文字まで許容するX/Openの仕様を採用し,このコマンド自身その仕様に準じているので,"X/Open", "RockRidge", "ISO9660"の頭文字を取って"XORRISO"という名称にしたそうです。そこから考えると"xorriso"は「エクソリソ」とでも読むのでしょうか。

従来,Plamo Linuxの環境ではCD/DVDイメージの作成や書き込みはcdrtools由来のmkisofscdrecordを使ってきました。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ファイルシステムを操作するためのlibisofsCDや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グループに登録したユーザーのみが書き込めるようにしています。

$ ls -l /dev/sr0
brw-rw----+ 1 root cdrom 11, 0  5月  5日  09:41 /dev/sr0
$ grep cdrom /etc/group
cdrom::32:kojima

xorrisoから利用可能な光学ドライブを調べるには-devicesオプションを指定します。

$ xorriso -devices
GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

Beginning to scan for devices ...
Full drive scan done
-----------------------------------------------------------------------------
0  -dev '/dev/sr0' rwrw-- :  'HL-DT-ST' 'DVDRAM GH24NSB0' 
-----------------------------------------------------------------------------

ドライブに挿入されているメディアの情報を調べるには-tocオプションを指定します。未使用のDVD-Rに対してこのオプションを使用すると以下のような結果になりました。

$ xorriso -dev /dev/sr0 -toc
GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

Drive current: -dev '/dev/sr0'
Media current: DVD-R sequential recording
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free
Drive current: -dev '/dev/sr0'
Drive type   : vendor 'HL-DT-ST' product 'DVDRAM GH24NSB0' revision 'UN00'
Drive id     : 'KL9E8M95241     '
Media current: DVD-R sequential recording
Media product: TYG03 , Taiyo Yuden Company Limited
Media status : is blank
Media blocks : 0 readable , 2298496 writable , 2298496 overall
Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free

cdrecord/mkisofsを使ってこのDVDにファイルを書き込むには,書き込みたいファイルを作業用のディレクトリにコピーし,サブディレクトリ等を調整した上でmkisofsでISOファイル化し,作成したISOファイルをcdrecordで書き込む,という手順が必要でした。

それに対し,xorrisoではファイルシステム上の任意の場所にあるファイルやディレクトリを直接DVDに書き込むことが可能です。

たとえば,⁠らじる★らじる」経由で録音した4月分の「ラジオ英会話」のファイルが"~/NHK"ディレクトリに収められているとします。

$ ls  ~/NHK
2016-04-04-06-45_ラジオ英会話_2016_04_001.m4a
2016-04-05-06-45_ラジオ英会話_2016_04_002.m4a
...
2016-04-29-06-45_ラジオ英会話_2016_04_020.m4a

これらのファイルをDVDに書き込む場合,xorrisoでは以下のように指定します。"-map ~/NHK /ラジオ英会話"のオプションは,ファイルシステム上の"~/NHK"ディレクトリをISOファイル上では"/ラジオ英会話"ディレクトリに対応づける指示です。

$ xorriso -dev /dev/sr0 -map ~/NHK /ラジオ英会話
GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

Drive current: -dev '/dev/sr0'
Media current: DVD-R sequential recording
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free
xorriso : UPDATE : 21 files added in 1 seconds
Added to ISO image: directory '/ラジオ英会話'='/home/kojima/NHK'
xorriso : UPDATE : Thank you for being patient. Working since 0 seconds.
xorriso : UPDATE : Writing:         16s    0.0%   fifo 100%  buf 100%    0.0xD 
xorriso : UPDATE : Writing:         16s    0.0%   fifo 100%  buf 100%    0.0xD 
...
xorriso : UPDATE : Closing track/session. Working since 64 seconds
ISO image produced: 53612 sectors
Written to medium : 53776 sectors at LBA 0
Writing to '/dev/sr0' completed successfully.

書き込めたかをDVDをマウントして確認します。書き替えたDVDをマウントする際は,一度光学ドライブをオープン/クローズしてカーネル内部のキャッシュをクリアしてやる必要があります。

$ eject /dev/sr0 && eject -t /dev/sr0
$ mount /cdrom
$ ls -R /cdrom
/cdrom/ラジオ英会話/:
2016-04-04-06-45_ラジオ英会話_2016_04_001.m4a  2016-04-19-06-45_ラジオ英会話_2016_04_012.m4a
2016-04-05-06-45_ラジオ英会話_2016_04_002.m4a  2016-04-20-06-45_ラジオ英会話_2016_04_013.m4a
...

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入