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

第92回 xorrisoとUEFIブート再び[その2]

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

前回のxorrisoの簡単な使い方に続き,今回はxorrisoのマニュアルを参照しつつ,もう少し体系的にオプション類の指定方法を紹介しましょう。

メディアを指定するオプション

xorrisoでは-devオプションで操作するメディアを指定します。このオプションでは"-dev /dev/sr0"のように書き出したい光学ドライブを指定することも,"-dev discimage.iso"のように通常ファイルを指定して,ファイルシステム上にISOイメージを作成することも可能です。

"-dev"オプションに存在しないファイルを指定した場合は,その名前の新規ISOイメージを作成し,既存のISOイメージを指定した場合は,そのISOイメージを対象に処理を行うことになります。

複数の光学ドライブ間で内容をコピーしたり,ファイルシステム上に作成したISOイメージを光学ドライブに書き出す場合のように,読み込み元と書き出し先を区別したい場合は,読み込み用に-indev書き出し用に-outdevを指定します。

たとえば,後述するような方法で作成したISOイメージをDVD-R等に書き出す際は,"-indev discimage.iso -outdev /dev/sr0"のような指定になります。また,"-indev"と"-outdev"の双方にファイル名を指定すれば,元のISOイメージは保持したまま,ファイルを追加,削除した新しいISOイメージを作ることもできます。

ISOイメージへファイルを追加するオプション

前回簡単に触れたように,xorrisoはファイルシステム上の任意の場所にあるファイルやディレクトリを,光学ドライブやISOイメージに書き出すことが可能です。

ISOイメージに書き出すファイルやディレクトリを指定するために,-add-cpr-mapの3種のオプションが用意されています。

"-map"には亜種として,1つのファイルやディレクトリのみを対象とする-map_singleと複数のファイルやディレクトリに対応する-map_lがあります。

以下,これらオプションをmanページの記述を参照しながら紹介してみます。

-addオプション

-addオプションに関するmanページの記述は以下の通りです。参考のために私訳を付けておきます。

-add pathspec [...] | disk_path [***]

Insert the given files or directory trees from filesystem into the ISO image.
If -pathspecs is set to "on" or "as_mkisofs" then pattern expansion is always
disabled and character '=' has a special meaning.
It separates the ISO image path from the disk path:  iso_rr_path=disk_path

指定されたファイルやディレクトリツリーをファイルシステムからISOイメージに書き出す。-pathspecsオプションに"on"か"as_mkisofs"を指定すると,ファイル名の展開機能は無効になる。合わせて'='(イコール)がファイルシステム上のパスとISOイメージ上のパスを結び付ける特別な文字になり,iso_rr_path=disk_pathの形式で指定できるようになる。

-addオプションは,mkisofsとの互換性のため設けられたオプションで,mkisofsが用いているのと同じ,"iso_rr_path=disk_path"の形式で,書き出すファイルやディレクトリを指定します。以下,実例を示しながら説明しましょう。

xorrisoでは,"iso_rr_path"はISOイメージ上のファイルやディレクトリを意味し,"disk_path"はファイルシステム上のファイルやディレクトリを意味します。

手元のNHKフォルダに「ラジオ英会話」を録音したファイルがあるとします。

$ ls -l NHK
合計 251,658,240
-rw-r--r--+ 1 kojima users 5,485,197  6月 12日  11:10 ラジオ英会話_2017_04_001.m4a
-rw-r--r--+ 1 kojima users 5,485,197  6月 12日  11:10 ラジオ英会話_2017_04_002.m4a
-rw-r--r--+ 1 kojima users 5,485,449  6月 12日  11:10 ラジオ英会話_2017_04_003.m4a
...

これらのファイルをISOイメージ上の"ラジオ英会話"ディレクトリに書き出したい場合,-addオプションを使うとこのような指定になります。

$ xorriso -dev disc01.iso -pathspecs on -add ラジオ英会話=NHK 
GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

Drive current: -dev 'disc01.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data,  122g free
Added to ISO image: directory '/ラジオ英会話'='/home/kojima/NHK'
xorriso : UPDATE : 21 files added in 1 seconds
xorriso : UPDATE : Writing:       5488s   10.2%   fifo   0%  buf  50%
...

"iso_rr_path=disk_path"の組み合わせは複数回指定でき,ファイルを直接指定することも可能です。たとえば,番組ファイルの3つをそれぞれepisode01から03という名前に変更して追加する場合,以下のような指定になります。

$ xorriso -dev disc01.iso -pathspecs on \
  -add episode01.m4a=NHK/ラジオ英会話_2017_04_001.m4a \
       episode02.m4a=NHK/ラジオ英会話_2017_04_002.m4a \
       episode03.m4a=NHK/ラジオ英会話_2017_04_003.m4a

GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 41 nodes read in 1 seconds
Drive current: -dev 'disc01.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Media summary: 1 session, 107186 data blocks,  209m data,  122g free
Volume id    : 'ISOIMAGE'
Added to ISO image: file '/episode01.m4a'='/home/kojima/NHK/ラジオ英会話_2017_04_001.m4a'
Added to ISO image: file '/episode02.m4a'='/home/kojima/NHK/ラジオ英会話_2017_04_002.m4a'
...

書き出したISOイメージの内容を確認するには,xorrisoの-findオプションを使うと,ループバックマウントする手間が省けて便利です。

$ xorriso -dev disc01.iso -find
GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
...
'.'
'./episode01.m4a'
'./episode02.m4a'
'./episode03.m4a'
'./ラジオ英会話'
'./ラジオ英会話/ラジオ英会話_2017_04_001.m4a'
'./ラジオ英会話/ラジオ英会話_2017_04_002.m4a'
...

-cprオプション

-cprはシェルから使える"cp -r"と同様の機能を持ったオプションです。このオプションのmanページの記述は以下の通りです。

-cpr disk_path [***] iso_rr_path
     Insert the given files or directory trees from filesystem into the
     ISO image.
     The rules for generating the ISO addresses are similar as with
     shell command cp -r.  Nevertheless, directories of the iso_rr_path
     are created if necessary.  Especially a not yet existing
     iso_rr_path will be handled as directory if multiple disk_paths are
     present.  The leafnames of the multiple disk_paths will be grafted
     under that directory as would be done with an existing directory.
     If a single disk_path is present then a non-existing iso_rr_path
     will get the same type as the disk_path.

ファイルシステム上にある指定したファイルやディレクトリツリーをISOイメージに書き出す。ISOイメージ上のファイル名生成ルールはシェルコマンドのcp -rと同様だが,必要に応じてiso_rr_pathのディレクトリは作成される。特に,複数のdisk_pathの書き出し先として指定された存在しないiso_rr_pathはディレクトリとして生成され,既存のディレクトリに書き出す場合と同様,指定された(複数の)disk_pathはそのディレクトリ以下にサブツリー構造を保持する。disk_pathが単独のファイルやディレクトリの場合,生成されるiso_rr_pathは指定されたdisk_pathと同じ種類になる。

-cprオプションを使えば,シェルから実行する"cp -r"コマンド同様,disk_pathに指定した複数のファイルやサブディレクトリを含むディレクトリを,ISOイメージのiso_rr_pathに指定したディレクトリに書き出すことができます。

指定方法行の"disk_path [***]"という記述は,⁠ローカルなファイルシステム上のファイルやディレクトリ(disk_path)⁠「任意の数([***])⁠指定できる,という意味です。

このオプションを使えば,NHKディレクトリ以下にまとめて保存している番組ファイルを,パターンマッチを使ってISOイメージ上では月ごとに分けて書き出す,という処理も可能です。この場合,-disk_pattern onオプションを合わせて指定し,ファイルシステム上のファイル名展開機能を有効にします。

$ xorisso -dev disc02.iso -disk_pattern on \
    -cpr NHK/ラジオ英会話_2017_04* 2017_04 -- \
    -cpr NHK/ラジオ英会話_2017_05* 2017_05 -- \
...
Added to ISO image: file '/2017_04/ラジオ英会話_2017_04_001.m4a'='/home/kojima/NHK/ラジオ英会話_2017_04_001.m4a'
Added to ISO image: file '/2017_04/ラジオ英会話_2017_04_002.m4a'='/home/kojima/NHK/ラジオ英会話_2017_04_002.m4a'
...
Added to ISO image: file '/2017_05/ラジオ英会話_2017_05_001.m4a'='/home/kojima/NHK/ラジオ英会話_2017_05_001.m4a'
Added to ISO image: file '/2017_05/ラジオ英会話_2017_05_002.m4a'='/home/kojima/NHK/ラジオ英会話_2017_05_002.m4a'
...

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入