xorrisofs - Emulation of ISO 9660 program mkisofs by program xorriso
xorrisofs [ options ] [-o filename ] pathspec [pathspecs ...]
xorrisofs produces Rock Ridge enhanced ISO 9660 filesystems and add-on sessions to such filesystems. Optionally it can produce Joliet directory trees too.
xorrisofs understands options of program mkisofs from cdrtools by Joerg Schilling. Its implementation is part of program xorriso which shares no source code with cdrtools.
ISO 9660, Rock Ridge, Joliet, HFS+:
ISO 9660 (aka ECMA-119) is a
read-only filesystem that is mainly used for optical
media CD, DVD, BD, but may also reside on other storage
devices like disk files, USB sticks or disk partitions. It
is widely readable by many operating systems and by boot
facilities of personal computers.
ISO 9660 describes directories and data files by very
restricted filenames with no distinction of upper case and
lower case. Its metadata do not comply to fundamental POSIX
specifications.
Rock Ridge is the name of a set of additional
information which enhance an ISO 9660 filesystem so that it
can represent a POSIX compliant filesystem with ownership,
access permissions, symbolic links, and other attributes.
Rock Ridge allows filenames of up to 255 bytes and paths of
up to 1024 bytes.
xorrisofs produces Rock Ridge information by default. It is
strongly discouraged to disable this feature.
Joliet is the name of an additional directory tree which
provides filenames up to 64 characters encoded as
UTF-16. A Joliet tree is mainly interesting for
reading the ISO image by operating systems of Microsoft
Corporation. Production of this directory tree may be
enabled by option -J.
ISO 9660:1999 is the name of an additional directory
tree which provides longer filenames. It allows single file
names to have up to 207 characters. It might be of use with
some older computer system boot facilities which read
neither Rock Ridge nor Joliet but need longer filenames
nevertheless. Production of this directory tree may be
enabled by option -iso-level 4.
HFS+ is the name of a filesystem which is normally used
for writing and reading on hard disks and similar devices.
It is possible to embed a HFS+ partition into the emerging
ISO 9660 image and to mark it by Apple Partition Map
entries. This interferes with options which copy data into
the first 32 KiB of the ISO image, like -G or
-isohybrid-mbr. See option -hfsplus.
The main purpose for having an embedded HFS+ partition is
booting of certain models of Apple computers.
Inserting files into the ISO image:
xorrisofs deals with two kinds of file addresses:
disk_path is a path to an object in the local filesystem
tree.
iso_rr_path is the Rock Ridge address of a file object
in the ISO image. If no Rock Ridge information shall be
stored in an emerging ISO, then the names will get mapped to
ISO 9660 names of limited length and character set.
A program
argument is handled as a pathspec, if it is not
recognized as original mkisofs option or additional
xorrisofs option. A pathspec depicts an input file
object by a disk_path. If option -graft-points
is not present, then the behavior depends on the file type
of disk_path. Directories get merged with the
/-directory of the ISO image. Files of other types get
copied into the /-directory.
If -graft-points is present then each pathspec
gets split at the first occurrence of the =-character.
The part before the = is taken as target, i.e. the
iso_rr_path for the file object in the ISO image. The part
after the first = is taken as source, i.e. the
disk_path of the input object.
It is possible to make =-characters part of the
iso_rr_path by preceding them with a \-character. The
same must be done for \-characters which shall be part
of the iso_rr_path.
If the source
part of the pathspec leads to a directory, then all files
underneath this directory get inserted into the image, too.
It is possible to exclude particular files from being
inserted by help of option -m.
In case that target already exists, the following rules
apply: Directories and other files may overwrite existing
non-directories. Directories get merged with existing
directories. Non-directories may not overwrite
existing directories.
Relation to program xorriso:
xorrisofs is actually a command mode of program
xorriso, which gets entered either by xorriso command
"-as mkisofs" or by starting the program by
one of the names "xorrisofs", "mkisofs",
"genisoimage", or "genisofs".
This command mode can be left by argument
"--" which leads to generic xorriso
command mode. See man xorriso for its
description.
xorriso
performs image reading and writing by help of libburn, which
is mainly intended for optical drives, but also operates on
all POSIX file types except directories.
The program messages call any image file a
"drive". File types which are not supported for
reading are reported as "blank". The reported free
media space may be quite fictional.
Nevertheless xorrisofs does not operate directly on
optical drives, but rather forces libburn to regard them as
general device files. So for writing of sequential optical
media (CD, DVD-R, DVD+R, BD-R) one will have to
use a burn program. E.g the cdrecord emulation of xorriso.
See EXAMPLES.
Image loading:
The following
options control loading of an existing ISO image for the
purpose of preparing a suitable add-on session. If
they are missing then a new image is composed from scratch.
-M disk_path
Set the path from which to load
the existing ISO image directory tree on which to base the
upcoming directory tree as add-on session. The path
must lead to a random-access readable file object. On
GNU/Linux: regular data files or block device files.
A special kind of pseudo disk_path has the form
"/dev/fd/"number. It depicts the open file
descriptor with the given number, regardless whether the
operating system supports this feature by file nodes in
/dev/fd or not. E.g. /dev/fd/3 is file descriptor 3 which
was opened by the program that later started xorriso.
-prev-session disk_path
Alias of -M.
-dev disk_path
Alias of -M.
-C last_session_start,next_writeable_address
Set the 2 KiB block address
last_session_start from where to read the ISO image out of
the file given by option -M.
Separated by a comma, set the next_writeable_address to
which the add-on session will finally be written.
Decisive is actually the block address which the intended
readers will have to use as superblock address on the
intended medium.
Both values can be inquired from optical media by help of
burn programs and cdrecord option -msinfo. xorriso
itself can obtain it in its cdrecord emulation.
values=$(xorriso -as cdrecord dev=/dev/...
-msinfo)
echo $values
Option -C may be used without option -M to
create an ISO image from scratch and prepare it for being
finally written to a block address other than 0. Parameter
last_session_start must then be set to 0.
-cdrecord-params last_session_start,next_writeable_address
Alias of -C.
Settings for file insertion:
-path-list disk_path
Read pathspecs line-by-line from disk_file and insert the depicted file objects into the ISO image. If disk_path is "-" then read the pathspecs from standard input.
--quoted_path_list disk_path
Like option
-path-list but reading quoted words rather than
plain lines. Whitespace outside of quotes will be discarded.
On the other hand it is possible to represent pathspecs
which contain newline characters.
The double quotation mark " and the single quotation
mark ’ can be used to enclose whitespace and make it
part of pathspecs. Each mark type can enclose the marks of
the other type. A trailing backslash \ outside quotations or
an open quotation cause the next input line to be
appended.
-f |
Resolve symbolic links on disk rather than storing them as symbolic links in the ISO image. |
-follow-links
Alias of -f.
-graft-points
Enable interpretation of input file pathspecs as combination of iso_rr_path and disk_path, separated by a =-character.
-m disk_pattern
Exclude files from being
inserted into the image. Silently ignored are those files of
which the disk_path matches the given shell parser pattern.
If no /-character is part of the pattern, then it gets
matched against the leaf name of the disk file.
It is possible to give more than one -m option.
-exclude
Alias of -m.
-x |
Alias of -m. |
-old-exclude
Alias of -m.
-exclude-list disk_path
Perform -m using each line out of file disk_path as argument disk_pattern.
-z |
Enable recognition and proper processing of zisofs compressed files as produced by program mkzftree. These files will get equipped with the necessary meta data so that a Linux kernel will recognize them and deliver their content in uncompressed form. |
-transparent-compression
Alias of -z.
--zisofs-version-2
Enable the recognition and
proper processing of experimental zisofs version 2
compressed files. The Linux kernel (as of 5.9) does not yet
know this format and will complain like
isofs: Unknown ZF compression algorithm: PZ
This complaint can be prevented by option
--zisofs2-susp-z2 .
The files will be shown by unaware kernels as they were
submitted to xorriso, i.e. with zisofs2 header, block
pointer list, and compressed data.
--zisofs-version-2 also enables
-z.
--zisofs2-susp-z2
Enable the production of SUSP entries "Z2" instead of "ZF" with zisofs2 compressed files. Unaware Linux kernels silently ignore "Z2" entries.
--zisofs2-susp-zf
Enable the production of SUSP entries "ZF" instead of "Z2" with zisofs2 compressed files. Unaware Linux kernels complain about zisofs2 "ZF" by "Unknown ZF compression algorithm" and thus leave a mark in the system log.
-root iso_rr_path
Insert all files under the
given iso_rr_path. If option -graft-points is
given, then iso_rr_path is prepended to each target part of
a pathspec.
The default for -root is "/".
-old-root iso_rr_path
Enable incremental insertion of
files into the loaded image. The effective target and source
addresses of given pathspecs get compared whether the target
already exists in the ISO image and is still identical to
the source on disk. Metadata in the ISO image will get
adjusted, if they differ from those on disk. New files and
files with changed content will get newly added. Target
files which do not exist in any of the according pathspec
sources will get removed from the ISO directory tree.
If the effective setting of -root differs from the
iso_rr_path given with -old-root, then the files
underneath the -old-root directory get cloned
underneath the -root directory. Cloning happens before
file comparison.
--old-root-no-ino
Disable recording and use of
disk inode numbers. If no disk inode numbers are recorded,
then option -old-root will have to read disk
file content and compare it with the MD5 checksum that is
recorded in the ISO image.
With recorded disk inode numbers and with credible ctime and
mtime, it is possible to detect potential changes in the
content without actually reading it. A loophole remains if
multiple different filesystems may get mounted at the same
directory, like it is habit with /mnt. In this case one has
to use option --old-root-devno or
disable the inode number shortcut by
--old-root-no-ino.
--old-root-devno
Enable comparison of recorded device numbers together with recorded inode numbers. This works only with good old stable device numbers which get out of fashion, regrettably. If the hard disk has a different device number after each reboot, then this comparison will see all files as changed and thus prevent any incremental size saving.
--old-root-no-md5
Disable recording and use of MD5 checksums for data file content. If neither checksums and nor disk inode numbers are recorded, then option -old-root will have to read ISO image file content when comparing it with disk file content.
Settings for image production:
-o disk_path
Set the output file address for
the emerging ISO image. If the address exists as regular
file, it will be truncated to length 0 when image production
begins. It may not already exist as directory. If it does
not exist yet then its parent directory must exist and a
regular file will get created.
A special kind of pseudo disk_path has the form
"/dev/fd/"number. It depicts the open file
descriptor with the given number, regardless whether the
operating system supports this feature by file nodes in
/dev/fd or not. E.g. /dev/fd/4 is file descriptor 4 which
was opened by the program that later started xorriso.
Default is standard output (/dev/fd/1) which may also be set
by disk_path "-".
-output disk_path
Alias of -o.
--stdio_sync "on"|"off"|"end"|number
Set the number of bytes after
which to force output to disk in order to keep the memory
from being clogged with lots of pending data for slow
devices. "on" is the same as "16m".
Forced output can be disabled by "off", or be
delayed by "end" until all data are produced. If a
number is chosen, then it must be at least 64k.
The default with xorriso mkisofs emulation is
--stdio_sync "off".
xorriso uses an inner fifo buffer with default size 4 MiB.
So forcing the operating system i/o cache to disk does not
necessarily block the simultaneous production of more image
content.
--emul-toc
Write a second superblock with
the first session into random-access files. If further
sessions get appended and the first superblock gets updated,
then the second superblock will not be overwritten. So it is
still possible to mount the first session and to find the
start blocks of the further sessions.
The price is 64 KiB extra space consumption. If
-partition_offset is non-zero, then it is 128
KiB plus twice the partition setup.
--no-emul-toc
Do not write a second
superblock with the first session into random-access
files.
This is the default.
--sort-weight weight_number iso_rr_path
Attribute a LBA weight number
to regular files. If iso_rr_path leads to a directory then
all regular files underneath will get the weight_number.
The weight_number may range from -2147483648 to
2147483647. The higher it is, the lower will be the block
address of the file data in the emerging ISO image.
Currently the El Torito boot catalog has a hardcoded weight
of 1 billion. Normally it should occupy the block with the
lowest possible address. Data files get added or loaded with
initial weight 0. Boot image files have a default weight of
2.
--sort-weight-list disk_path
Read pairs of weight number and
iso_rr_path from a file of the local filesystem. Apply each
pair like with --sort-weight.
Only the last --sort-weight-list or
--sort-weight-patterns of a
xorrisofs run gets into effect.
The weight number is read from the start of the line. The
iso_rr_path part of an input line begins immediately after
the first blank or tab character of the line.
Notes for the case that this feature is used within a
sequence of generic xorriso commands (not an issue with a
pure mkisofs emulation run):
The addressed files must already be in the ISO image model
when you execute
-as mkisofs --sort-weight-list
disk_path --
Several such commands may be used to apply more than one
weight file.
Data files which are loaded by -indev or -dev
get a weight between 1 and 2 exp 28 = 268,435,456, depending
on their block address. This shall keep them roughly in the
same order if the write method of modifying is applied.
--sort-weight-patterns disk_path
Like --sort-weight-list , but expanding the iso_rr_paths as shell parser patterns and applying --sort-weight to each matching file.
-uid number|name
Use the given number or locally existing user name as owner id of all files and directories in the emerging filesystem. Empty name or name "-" revoke this feature.
-gid number|name
Use the given number or locally existing group name as group id of all files and directories in the emerging filesystem. Empty name or name "-" revoke this feature.
-dir-mode mode
Set the access permissions for all directories in the image to the given mode which is either an octal number beginning with "0" or a comma separated list of statements of the form [ugoa]*[+-=][rwxst]* . E.g. ug=rx,a-rwx
-file-mode mode
Like -dir-mode but for all regular data files in the image.
-pad |
Add 300 KiB to the end of the produced ISO image. This circumvents possible read errors from ISO images which have been written to CD media in TAO mode. The additional bytes are claimed as part of the ISO image if not --emul-toc is given. |
Option -pad is the default.
-no-pad
Disable padding of 300 KiB to the end of the produced ISO image. This is safe if the image is not meant to be written on CD or if it gets written to CD as only track in write mode SAO.
--old-empty
Use the old way of of giving block addresses in the range of [0,31] to files with no own data content. The new way is to have a dedicated block to which all such files will point.
Settings for standards compliance:
-iso-level number
Specify the ISO 9660 version
which defines the limitations of file naming and data file
size. The naming restrictions do not apply to the Rock Ridge
names but only to the low-level ISO 9660 names. There
are three conformance levels:
Level 1 allows ISO names of the form 8.3 and file size up to
4 GiB - 1.
Level 2 allows ISO names with up to 32 characters and file
size up to 4 GiB - 1.
Level 3 allows ISO names with up to 32 characters and file
size of up to 400 GiB - 200 KiB. (This size limitation
is set by the xorriso implementation and not by ISO 9660
which would allow nearly 8 TiB.)
Pseudo-level 4 enables production of an additional ISO
9660:1999 directory tree.
-disallow_dir_id_ext
Do not follow a bad habit of mkisofs which allows dots in the ISO names of directories. On the other hand, some bootable GNU/Linux images depend on this bad habit.
-U |
This option allows ISO file names without dot and up to 37 characters, ISO file paths longer than 255 characters, and all ASCII characters in file names. Further it omits the semicolon and the version numbers at the end of ISO names. |
This all violates ISO 9660 specs.
-untranslated-filenames
Alias of -U.
-untranslated_name_len number
Allow ISO file names up to the
given number of characters without any character conversion.
The maximum number is 96. If a file name has more
characters, then image production will fail deliberately.
This violates ISO 9660 specs.
-allow-lowercase
Allow lowercase character in
ISO file names.
This violates ISO 9660 specs.
-relaxed-filenames
Allow nearly all 7-bit
characters in ISO file names. Not allowed are 0x0 and
’/’. If not option -allow-lowercase
is given, then lowercase letters get converted to uppercase.
This violates ISO 9660 specs.
-d |
Do not add trailing dot to ISO file names without dot. |
This violates ISO 9660 specs.
-omit-period
Alias of -d.
-l |
Allow up to 31 characters in ISO file names. |
-full-iso9660-filenames
Alias of -l.
-max-iso9660-filenames
Allow up to 37 characters in
ISO file names.
This violates ISO 9660 specs.
-N |
Omit the semicolon and the version numbers at the end of ISO names. |
This violates ISO 9660 specs.
-omit-version-number
Alias of -N.
Settings for standards extensions:
-R |
With mkisofs this option enables Rock Ridge extensions. xorrisofs produces them by default. It is strongly discouraged to disable them by option --norock. | ||
-rock |
Alias of -R. | ||
-r |
Enable Rock Ridge and set user and group id of all files in the ISO image to 0. Grant r-permissions to all. Deny all w-permissions. If any x-permission is set, grant x-permission to all. Remove s-bit and t-bit. |
These attribute changes stay delayed until mkisofs emulation ends. Within the same -as mkisofs emulation command they can be revoked by a subsequent option --norock. For compatibility reasons, option -R does not revoke the changes ordered by -r.
-rational-rock
Alias of -r.
--norock
This option disables the
production of Rock Ridge extensions for the ISO 9660 file
objects. The multi-session capabilities of
xorrisofs depend much on the naming fidelity of Rock
Ridge. So it is strongly discouraged to disable it by this
option, except for the special use case to revoke the effect
of -r by:
--norock -R
--set_all_file_dates timestring
Set mtime, atime, and ctime of
all files and directories to the given time.
Valid timestring formats are: ’Nov 8 14:51:13 CET
2007’, 110814512007.13, 2007110814511300. See also
--modification-date= and man xorriso,
Examples of input timestrings.
If the timestring is "set_to_mtime", then the
atime and ctime of each file and directory get set to the
value found in their mtime.
These actions stay delayed until actual ISO production
begins. Up to then they can be revoked by
--set_all_file_dates with empty timestring or
timestring "default".
The timestamps of the El Torito boot catalog file get
refreshed when the ISO is produced. They can be influenced
by --modification-date=.
-file_name_limit number
Set the maximum permissible
length for file names in the range of 64 to 255. Path
components which are longer than the given number will get
truncated and have their last 33 bytes overwritten by a
colon ’:’ and the hex representation of the MD5
of the first 4095 bytes of the whole oversized name.
Potential incomplete UTF-8 characters will get their
leading bytes replaced by ’_’.
Linux kernels up to at least 4.1 misrepresent names of
length 254 and 255. If you expect such names in or under
disk_paths and plan to mount the ISO by such Linux kernels,
consider to set -file_name_limit 253.
-D |
The standard ECMA-119 demands that no path in the image shall have more than 8 name components or 255 characters. Therefore it would be necessary to move deeper directory trees to a higher directory. Rock Ridge offers an opportunity to let these relocated directories appear at their original deep position, but this feature might not be implemented properly by operating systems which mount the image. |
Option -D disables this
deep directory relocation, and thus violates ISO 9660 specs.
xorrisofs has -D set by default. If given explicitly
then it overrides the options -rr_reloc_dir and
-hide-rr-moved.
-disable-deep-relocation
Alias of -D.
-rr_reloc_dir name
Enable the relocation of deep
directories and thus avoid ECMA-119 file paths of more
than 8 name components or 255 characters. Directories which
lead to such file paths will get moved to a directory in the
root directory of the image. Its name gets set by this
option. It is permissible to use the root directory itself.
The overall directory tree will appear originally deep when
interpreted as Rock Ridge tree. It will appear as
re-arranged if only ECMA-119 information is
considered.
If the given relocation target directory does not already
exist when image production begins, then it will get created
and marked for Rock Ridge as relocation artefact. At least
on GNU/Linux it will not be displayed in mounted Rock Ridge
images.
The name must not contain a ’/’ character after
its first character and it must not be longer than 255
bytes.
This option has no effect if option -D is present.
-hide-rr-moved
Alias of -rr_reloc_dir "/.rr_moved"
--for_backup
Enable all options which
improve backup fidelity:
--acl, --xattr-any,
--md5, --hardlinks.
If you later restore a backup with xattr from non-user
namespaces, then make sure that the target operating system
and filesystem know what these attributes mean. Possibly you
will need administrator privileges to record or restore such
attributes. At recording time, xorriso will try to tolerate
missing privileges and just record what is readable.
Option -xattr after option -for_backup excludes
non-user attributes from being recorded.
--acl |
Enable recording and loading of ACLs from GNU/Linux or FreeBSD (see man getfacl, man acl). They will not be in effect with mounted ISO images. But xorriso can restore them on the same systems when extracting files from the ISO image. |
--xattr
Enable recording and loading of GNU/Linux or FreeBSD extended attributes in user namespace (see man getfattr and man attr, man getextattr and man 9 extattr, respectively). They will not be in effect with mounted ISO images. But xorriso can restore them on the same systems when extracting files from the ISO image.
--xattr-any
Enable recording and loading of GNU/Linux or FreeBSD extended attributes in all namespaces. This might need administrator privileges, even if the owner of the disk file tries to read the attributes.
--md5 |
Enable recording of MD5 checksums for the overall ISO image and for each single data file in the image. xorriso can check the content of an ISO image with these sums and raise alert on mismatch. See man xorriso, options -check_media, check_md5_r. xorriso can print recorded MD5 checksums. E.g. by: |
-find / -exec get_md5
--hardlinks
Enable loading and recording of
hardlink relations. Search for families of iso_rr files
which stem from the same disk file, have identical content
filtering and have identical properties. The members of each
family get the same inode number in the ISO image.
Whether these numbers are respected at mount time depends on
the operating system. xorriso can create hardlink families
when extracting files from the ISO image.
--scdbackup_tag disk_path record_name
Append a scdbackup checksum
record to the image. This works only if the parameter
next_writeable_address of option -C is 0 and
--md5 is enabled. If disk_path is not an empty
string, then append a scdbackup checksum record to the end
of this file. record_name is a word that gets part of tag
and record.
Program scdbackup_verify will recognize and verify tag and
file record.
An empty record_name disables this feature.
-J |
Enable the production of an additional Joliet directory tree along with the ISO 9660 Rock Ridge tree. |
-joliet
Alias of -J.
-joliet-long
Allow 103 characters in Joliet
file names rather than 64 as is prescribed by the
specification. Allow Joliet paths longer than the prescribed
limit of 240 characters.
Oversized names get truncated. Without this option,
oversized paths get excluded from the Joliet tree.
-joliet-utf16
Encode Joliet file names in UTF-16BE rather than UCS-2. The difference is with characters which are not present in UCS-2 and get encoded in UTF-16 by 2 words of 16 bit each. Both words then stem from a reserved subset of UCS-2.
-hfsplus
Enable the production of an
additional HFS+ filesystem inside the ISO 9660 image and
mark it by Apple Partition Map (APM) entries in the System
Area, the first 32 KiB of the image.
This may collide with options like -G or
-isohybrid-mbr which submit user data for
inclusion in the same address range. The first 8 bytes of
the System Area get overwritten by { 0x45, 0x52, 0x08 0x00,
0xeb, 0x02, 0xff, 0xff } which can be executed as x86
machine code without negative effects. So if an MBR gets
combined with this feature, then its first 8 bytes should
contain no essential commands.
The next blocks of 2 KiB in the System Area will be occupied
by APM entries. The first one covers the part of the ISO
image before the HFS+ filesystem metadata. The second one
marks the range from HFS+ metadata to the end of file
content data. If more ISO image data follow, then a third
partition entry gets produced. Other features of xorriso
might cause the need for more APM entries.
Be aware that HFS+ is case-insensitive although it can
record file names with upper-case and lower-case
letters. Therefore, file names from the iso_rr name tree may
collide in the HFS+ name tree. In this case they get changed
by adding underscore characters and counting numbers. In
case of very long names, it might be necessary to map them
to "MANGLED_...".
WARNING:
The HFS+ implementation in libisofs has a limit of
125,829,120 bytes for the size of the overall directory
tree. This suffices for about 300,000 files of normal name
length. If the limit gets exceeded, a FAILURE event will be
issued and the ISO production will not happen.
-hfsplus-serial-no
Set a string of 16 digits "0" to "9" and letters "a" to "f", which will be used as unique serial number of an emerging HFS+ filesystem.
-hfsplus-block-size number
Set the allocation block size to be used when producing HFS+ filesystems. Permissible are 512, 2048, or 0. The latter lets the program decide.
-apm-block-size number
Set the block size to be used
when describing partitions by an Apple Partition Map.
Permissible are 512, 2048, or 0. The latter lets the program
decide.
Note that size 512 is not compatible with production of GPT,
and that size 2048 will not be mountable -t hfsplus at
least by older Linux kernels.
-hfsplus-file-creator-type creator type iso_rr_path
Set the HFS+ creator and type attributes of a file in the emerging image. These are two codes of 4 characters each.
-hfs-bless-by blessing iso_rr_path
Issue a HFS+ blessing. They are
roles which can be attributed to up to four directories and
a data file:
"ppc_bootdir", "intel_bootfile",
"show_folder", "os9_folder",
"osx_folder".
They may be abbreviated as "p", "i",
"s", "9", and "x".
Each such role can be attributed to at most one file object.
"intel_bootfile" is the one that would apply to a
data file. All others apply to directories. No file object
can bear more than one blessing.
-hfs-bless disk_path
Issue HFS+ blessing
"ppc_bootdir" to the directory which stems from
the directory disk_path in the local filesystem tree.
This works only if there is at least one data file
underneath the directory. disk_path can become ambiguous if
files from different local filesystem sub-trees are
put into the same sub-tree of the ISO image. Consider
to use -hfs-bless-by "p" for
unambiguous addressing via iso_rr_path.
Settings for file hiding:
-hide disk_path_pattern
Make files invisible in the
directory tree of ISO 9660 and Rock Ridge, if their
disk_path matches the given shell parser pattern. The data
content of such hidden files will be included in the
resulting image, even if they do not show up in any
directory. But you will need own means to find nameless data
in the image.
This command does not apply to the boot catalog.
-hide-list disk_path
Perform -hide using each line out of file disk_path as argument disk_path_pattern.
-hide-joliet disk_path_pattern
Like option -hide but making files invisible in the directory tree of Joliet, if their disk_path matches the given shell parser pattern.
-hide-joliet-list disk_path
Perform -hide-joliet using each line out of file disk_path as argument disk_path_pattern.
-hide-hfsplus disk_path_pattern
Like option -hide but making files invisible in the directory tree of HFS+, if their disk_path matches the given shell parser pattern.
-hide-hfsplus-list disk_path
Perform -hide-hfsplus using each line out of file disk_path as argument disk_path_pattern.
ISO image ID strings:
The following
strings and file addresses get stored in the Primary Volume
Descriptor of the ISO9660 image. The file addresses are ISO
9660 paths. These files should have iso_rr_paths which
consist only of the characters [A-Z0-9_] and
exactly one dot which separates at most 8 characters from at
most 3 characters.
-V text
Set the Volume Id of the ISO
image. xorriso accepts any text up to 32 characters, but
according to rarely obeyed specs stricter rules apply:
Conformant are ASCII characters out of
[A-Z0-9_]. Like: "IMAGE_23"
Joliet allows 16 UCS-2 characters. Like: "Windows
name"
Be aware that the volume id might get used automatically as
name of the mount point when the medium is inserted into a
playful computer system.
-volid text
Alias of -V.
-volset text
Set the Volume Set Id of the ISO image. Permissible are up to 128 characters.
-P text
Set the Publisher Id of the ISO image. This may identify the person or organisation who specified what shall be recorded. Permissible are up to 128 characters.
-publisher text
Alias of -P.
-A text
Set the Application Id of the
ISO image. This may identify the specification of how the
data are recorded. Permissible are up to 128 characters.
The special text "@xorriso@" gets converted to the
id string of xorriso which is normally written as Preparer
Id. It is a wrong tradition to write the program id as
Application Id.
-appid text
Alias of -A.
-sysid text
Set the System Id of the ISO image. This may identify the system which can recognize and act upon the content of the System Area in image blocks 0 to 15. Permissible are up to 32 characters.
-p text
Set the Preparer Id of the ISO
image. This may identify the person or other entity which
controls the preparation of the data which shall be
recorded. Normally this should be the id of xorriso and not
of the person or program which operates xorriso. Please
avoid to change it. Permissible are up to 128 characters.
The special text "@xorriso@" gets converted to the
id string of xorriso which is default at program
startup.
-preparer text
Alias of -p.
-abstract iso_path
Set the address of the Abstract File of the ISO image. This should be the ISO 9660 path of a file in the image which contains an abstract statement about the image content. Permissible are up to 37 characters.
-biblio iso_path
Set the address of the Biblio File of the ISO image. This should be the ISO 9660 path of a file in the image which contains bibliographic records. Permissible are up to 37 characters.
-copyright iso_path
Set the address of the Copyright File of the ISO image. This should be the ISO 9660 path of a file in the image which contains a copyright statement. Permissible are up to 37 characters.
--modification-date=YYYYMMDDhhmmsscc
Set a timestring that overrides
ISO image creation and modification timestamps literally. It
must consist of 16 decimal digits which form
YYYYMMDDhhmmsscc, with YYYY between 1970 and 2999. Time zone
is GMT. It is supposed to match this GRUB line:
search --fs-uuid --set
YYYY-MM-DD-hh-mm-ss-cc
E.g. 2010040711405800 is 7 Apr 2010 11:40:58 (+0
centiseconds).
Among the influenced timestamps are: isohybrid MBR id, El
Torito boot catalog file, HFS+ superblock.
--application_use character|0xXY|disk_path
Specify the content of the
Application Use field which can take at most 512 bytes.
If the parameter of this command is empty, then the field is
filled with 512 0-bytes. If it is a single character,
then it gets repeated 512 times. If it begins by
"0x" followed by two hex digits
[0-9a-fA-F], then the digits are read as
byte value which gets repeated 512 times.
Any other parameter text is used as disk_path to open a data
file and to read up to 512 bytes from it. If the file is
smaller than 512 bytes, then the remaining bytes in the
field get set to binary 0.
El Torito Bootable ISO images:
The precondition for a bootable ISO image is to have in the ISO image the files of a boot loader. The boot facilities of computers get directed to such files, which usually execute further program files from the ISO image. xorrisofs can produce several kinds of boot block or boot record, which become part of the ISO image, and get interpreted by the according boot facility.
An El Torito boot record points the bootstrapping facility to
a boot catalog with one or more boot images, which are
binary program files stored in the ISO image. The content of
the boot image files is not in the scope of El Torito.
xorriso composes the boot catalog according to the boot
image files given and structured by options -b,
-e, -eltorito-alt-boot, and
--efi-boot. Often it contains only one
entry.
Normally the boot images are data files inside the ISO
filesystem. By special path
"--interval:appended_partition_NNN:all::"
it is possible to refer to an appended partition. The number
NNN gives the partition number as used with the
corresponding option -append_partition. E.g.:
-append_partition 2 0xef /tmp/efi.img
-e --interval:appended_partition_2:all::
El Torito gets interpreted by boot facilities PC-BIOS
and EFI. Most bootable GNU/Linux CDs are equipped with
ISOLINUX or GRUB boot images for PC-BIOS.
xorrisofs supports the example options out of the
ISOLINUX wiki, the options used in GRUB script
grub-mkrescue, and the example in the FreeBSD
AvgLiveCD wiki.
For CD booting
via boot facilities other than PC-BIOS and EFI, and
for booting from USB sticks or hard disks, see the next
section about the System Area.
-b iso_rr_path
Specify the boot image file
which shall be mentioned in the current entry of the El
Torito boot catalog. It will be marked as suitable for
PC-BIOS.
With boot images from ISOLINUX and GRUB this option should
be accompanied by options -c ,
-no-emul-boot ,
-boot-load-size 4 ,
-boot-info-table.
-eltorito-boot iso_rr_path
Alias of -b.
-eltorito-alt-boot
Finalize the current El Torito boot catalog entry and begin a new one. A boot image file and all its necessary options shall be specified before option -eltorito-alt-boot. All further El Torito boot options apply to the new catalog entry. Up to 32 catalog entries are possible.
-e iso_rr_path
Specify the boot image file
which shall be mentioned in the current entry of the El
Torito boot catalog. It will be marked as suitable for EFI.
Option -e should be followed by option
-no-emul-boot and no other El Torito
options before an eventual
-eltorito-alt-boot.
--efi-boot iso_rr_path
Perform -eltorito-alt-boot, option -e with the given iso_rr_path, -no-emul-boot, and again -eltorito-alt-boot. This gesture is used for achieving EFI-bootability of the GRUB2 rescue CD.
-eltorito-platform "x86"|"PPC"|"Mac"|"efi"|0xnn|nnn
Set the Platform Id number for
the next option -b or -eltorito-boot. The
number may be chosen by a platform name or by a number
between 0 and 255 (0x00 and 0xFF). "x86" = 0 is
for PC-BIOS, "PPC" = 1 for some PowerPC
systems, "Mac" = 2 for some MacIntosh systems,
"efi" = 0xEF for EFI on modern PCs with x86
compatible CPUs or others.
If the new platform id differs from the previous one,
-eltorito-alt-boot gets performed.
-boot-load-size number|"full"
Set the number of
512-byte blocks to be loaded at boot time from the
boot image in the current catalog entry.
Non-emulating BIOS bootimages usually need a load size
of 4. Nevertheless the default setting of mkisofs is to use
the full size of the boot image rounded up to a multiple of
4 512-byte blocks. This default may be explicitly
enforced by the word "full" instead of a number.
EFI boot images usually get set the number of blocks
occupied by the boot image file.
El Torito cannot represent load sizes higher than 65535.
-hard-disk-boot
Mark the boot image in the current catalog entry as emulated hard disk. (Not suitable for any known boot loader.)
-no-emul-boot
Mark the boot image in the
current catalog entry as not emulating floppy or hard disk.
(This is to be used with all known boot loaders.)
If neither -hard-disk-boot nor
-no-emul-boot is given, then the boot
image will be marked as emulating a floppy. (Not suitable
for any known boot loader.)
-eltorito-id text|56_hexdigits
Define the ID string of the boot catalog section where the boot image will be listed. If the value consists of 56 characters [0-9A-Fa-f] then it is converted into 28 bytes, else the first 28 characters become the ID string. The ID string of the first boot image becomes the overall catalog ID. It is limited to 24 characters. Other id_strings become section IDs.
-eltorito-selcrit hexdigits
Define the Selection Criteria of the boot image. Up to 20 bytes get read from the given characters [0-9A-Fa-f]. They get attributed to the boot image entry in the catalog.
-boot-info-table
Overwrite bytes 8 to 63 in the current boot image. The information will be supplied by xorriso in the course of image production: Block address of the Primary Volume Descriptor, block address of the boot image file, size of the boot image file.
--grub2-boot-info
Overwrite bytes 2548 to 2555 in the current boot image by the address of that boot image. The address is written as 64 bit little-endian number. It is the 2KB block address of the boot image content, multiplied by 4, and then incremented by 5.
-c iso_rr_path
Set the address of the El Torito boot catalog file within the image. This file address is not significant for the booting PC-BIOS or EFI, but it may later be read by other programs in order to learn about the available boot images.
-eltorito-catalog iso_rr_path
Alias of -c.
--boot-catalog-hide
Prevent the El Torito boot catalog from appearing as file in the directory trees of the image.
System Area, MBR, GPT, APM, other boot blocks:
The first 16
blocks of an ISO image are the System Area. It is reserved
for system dependent boot software. This may be the boot
facilities and partition tables of various hardware
architectures.
A MBR (Master Boot Record) contains boot code and a
partition table. It is read by PC-BIOS when booting
from USB stick or hard disk, and by PowerPC CHRP or PReP
when booting. An MBR partition with type 0xee indicates the
presence of GPT.
A GPT (GUID Partition Table) marks partitions in a
more modern way. It is read by EFI when booting from USB
stick or hard disk, and may be used for finding and mounting
a HFS+ partition inside the ISO image.
An APM (Apple Partition Map) marks the HFS+
partition. It is read by Macs for booting and for mounting.
MBR, GPT and APM are combinable. APM occupies the first 8
bytes of MBR boot code. All three do not hamper El Torito
booting from CDROM.
xorrisofs supports further boot facilities: MIPS Big
Endian (SGI), MIPS Little Endian (DEC), SUN SPARC,
HP-PA, DEC Alpha. Those are mutually not combinable
and also not combinable with MBR, GPT, or APM.
Several of the
following options expect disk paths as input but also accept
description strings for the libisofs interval reader, which
is able to cut out data from disk files or -indev and
to zeroize parts of the content: -G,
-generic-boot,
--embedded-boot,
--grub2-mbr, -isohybrid-mbr,
-efi-boot-part,
-prep-boot-part, -B,
-sparc-boot, -append_partition.
The description string consists of the following components,
separated by colon ’:’
"--interval:"Flags":"Interval":"Zeroizers":"Source
The component "--interval" states that
this is not a plain disk path but rather a interval reader
description string.
The component Flags modifies the further interpretation:
"local_fs" demands to read from a file depicted by
the path in Source.
"imported_iso" demands to read from the
-indev. This works only if -outdev is not the
same as -indev. The Source component is ignored.
"appended_partition_NNN" with a decimal number NNN
works only for options which announce El Torito boot image
paths: -b, -e, --efi-boot. The
number gives the partition number as used with the
corresponding option -append_partition.
The component Interval consists of two byte address numbers
separated by a "-" character. E.g.
"0-429" means to read bytes 0 to 429.
The component Zeroizers consists of zero or more comma
separated strings. They define which part of the read data
to zeroize. Byte number 0 means the byte read from the
Interval start address. Each string may be one of:
"zero_mbrpt" demands to zeroize the MBR partition
table if bytes 510 and 511 bear the MBR signature 0x55 0xaa.
"zero_gpt" demands to check for a GPT header in
bytes 512 to 1023, to zeroize it and its partition table
blocks.
"zero_apm" demands to check for an APM block 0 and
to zeroize its partition table blocks.
Start_byte"-"End_byte demands to zeroize the
read-in bytes beginning with number Start_byte and
ending after End_byte.
The component Source is the file path with flag
"local_fs", and ignored with flag
"imported_iso".
Byte numbers may be scaled by a suffix out of {k,m,g,t,s,d}
meaning multiplication by {1024, 1024k, 1024m, 1024g, 2048,
512}. A scaled value end number depicts the last byte of the
scaled range.
E.g. "0d-0d" is "0-511".
Examples:
"local_fs:0-32767:zero_mbrpt,zero_gpt,440-443:/tmp/template.iso"
"imported_iso:45056d-47103d::"
-G disk_path
Copy at most 32768 bytes from
the given disk file to the very start of the ISO image.
Other than a El Torito boot image, the file disk_path needs
not to be added to the ISO image. It will not show up as
file in the directory trees.
In multi-session situations, the special disk_path
"." prevents reading of a disk file but
nevertheless causes the adjustments in the existing MBR,
which were ordered by other options.
-generic-boot disk_path
Alias of -G.
--embedded-boot disk_path
Alias of -G.
--grub2-mbr disk_path
Install disk_path in the System Area and treat it as modern GRUB2 MBR. The content start address of the first boot image is converted to a count of 512 byte blocks, and an offset of 4 is added. The result is written as 64 bit little-endian number to byte address 0x1b0.
-isohybrid-mbr disk_path
Install disk_path as ISOLINUX
isohybrid MBR which makes the boot image given by option
-b bootable from USB sticks and hard disks via
PC-BIOS. This preparation is normally done by ISOLINUX
program isohybrid on the already produced ISO image.
The disk path should lead to one of the Syslinux files
isohdp[fp]x*.bin . The MBR gets patched according to
isohybrid needs. The first partition describes the range of
the ISO image. Its start is at block 0 by default, but may
be set to 64 disk blocks by option -partition_offset
16.
For the meaning of special disk_path "." see
option -G.
-isohybrid-gpt-basdat
Mark the current El Torito boot
image (see options -b and -e) in an actually
invalid GPT as partition of type Basic Data. This works only
with -isohybrid-mbr and has the same impact on
the system area as -efi-boot-part. It
cannot be combined with -efi-boot-part or
-hfsplus.
The first three boot images which are marked by GPT will
also show up as partition entries in MBR. The MBR partition
of type 0xEF is what actually is used by EFI firmware for
booting from USB stick. The MBR partition for PC-BIOS
gets type 0x00 rather than 0x17 in this case. Often the
further MBR entries are the ones which actually get used by
EFI.
-isohybrid-gpt-hfsplus
Mark the current El Torito boot image (see options -b and -e) in GPT as partition of type HFS+. Impact and restrictions are like with -isohybrid-gpt-basdat.
-isohybrid-apm-hfsplus
Mark the current El Torito boot
image (see options -b and -e) in Apple Partition
Map as partition of type HFS+. This works only with
-isohybrid-mbr and has a similar impact on the
system area as -hfsplus. It cannot be combined with
-efi-boot-part or -hfsplus.
The ISOLINUX isohybrid MBR file must begin by a known
pattern of 32 bytes of x86 machine code which essentially
does nothing. It will get overwritten by 32 bytes of APM
header mock-up.
-part_like_isohybrid
Control whether -isohybrid-gpt-basdat, -isohybrid-gpt-hfsplus, and -isohybrid-apm-hfsplus apply even if not -isohybrid-mbr is present. No MBR partition of type 0xee emerges, even if GPT gets produced. Gaps between GPT and APM partitions will not be filled by more partitions. Appended partitions get mentioned in APM if other APM partitions emerge.
-iso_mbr_part_type "default"|number|type_guid
Set the partition type of the
MBR or GPT partition which represents the ISO or at least
protects it.
Number may be 0x00 to 0xff. The text "default"
re-enables the default types of the various occasions
to create an ISO MBR partition. This is without effect if no
such partition emerges by other settings or if the partition
type is prescribed mandatorily like 0xee for GPT protective
MBR or 0x96 for CHRP.
If instead a type_guid is given by a 32-digit hex
string like a2a0d0ebe5b9334487c068b6b72699c7 or by a
structured text like
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7,
then it will be used as partition type if the ISO filesystem
appears as partition in GPT. In MBR,
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
will be mapped to 0xef. Any other GUID will be mapped to
0x83.
--protective-msdos-label
Patch the System Area by a simple PC-DOS partition table where partition 1 claims the range of the ISO image but leaves the first block unclaimed. This is mutally exclusive to option -isohybrid-mbr.
--mbr-force-bootable
Enforce an MBR partition with
"bootable/active" flag if options like
--protective-msdos-label or
--grub2-mbr are given. These options
normally cause the flag to be set if there is an MBR
partition of type other than 0xee or 0xef. If no such
partition exists, then no bootflag is set, unless
--mbr-force-bootable forces creation
of a dummy partition of type 0x00 which covers only the
first block of the ISO image.
If no bootable MBR is indicated by other options and a
partition gets created by -append_partition, then
--mbr-force-bootable causes a
bootflag like it would do with e.g.
--protective-msdos-label.
--gpt-iso-bootable
Set bit 2 of the GPT partition flags for the ISO 9660 partition if such a GPT partition emerges. This bit is specified as "Legacy BIOS bootable" but its true significance is unclear. Some GPT-aware BIOS might want to see it in some partition.
--gpt-iso-not-ro
Do not set bit 60 of the GPT partition flags for the ISO 9660 partition if such a GPT partition emerges. This bit is specified as "Read-only" and thus appropriate. But it is unusual in GPT disk partitions.
-partition_offset 2kb_block_adr
Cause a partition table with a
single partition that begins at the given block address.
This is counted in 2048 byte blocks, not in 512 byte blocks.
If the block address is non-zero then it must be at
least 16. Values larger than 16 are hardly of use. A
non-zero partition offset causes two superblocks to be
generated and two sets of directory trees. The image is then
mountable from its absolute start as well as from the
partition start.
The offset value of an ISO image gets preserved when a new
session is added to a loaded image. So the value defined
here is only in effect if a new ISO image gets written.
-partition_hd_cyl number
Set the number of heads per cylinder for the MBR partition table. 0 chooses a default value. Maximum is 255.
-partition_sec_hd number
Set the number of sectors per
head for the MBR partition table. 0 chooses a default value.
Maximum is 63.
The product partition_sec_hd * partition_hd_cyl * 512 is the
cylinder size. It should be divisible by 2048 in order to
make exact alignment possible. With appended partitions and
-appended_part_as_gpt there is no limit for the number
of cylinders. Else there may be at most 1024 of them. If the
cylinder size is too small to stay below the limit, then
appropriate values of partition_hd_cyl are chosen with
partition_sec_hd 32 or 63. If the image is larger than
8,422,686,720 bytes, then the cylinder size constraints
cannot be fulfilled for MBR. They seem not overly important
anyway. Flat block addresses in partition tables are good
for 1 TiB.
-partition_cyl_align mode
Control image size alignment to
an integer number of cylinders. It is prescribed by
isohybrid specs and it seems to please program fdisk.
Cylinder size must be divisible by 2048. Images larger than
8,323,596,288 bytes cannot be aligned in MBR partition
table.
Mode "auto" is default. Alignment by padding
happens only if option -isohybrid-mbr is given.
Mode "on" causes alignment by padding with option
--protective-msdos-label too. Mode
"all" is like "on" but also pads up
partitions from -append_partition to an aligned size.
Mode "off" disables alignment unconditionally.
-append_partition partition_number type_code disk_path
Cause a prepared filesystem
image to be appended to the ISO image and to be described by
a partition table entry in a boot block at the start of the
emerging ISO image. The partition entry will bear the size
of the submitted file rounded up to the next multiple of
2048 bytes or to the next multiple of the cylinder size.
Beware of subsequent multi-session runs. The appended
partition will get overwritten.
partition_number may be 1 to 4. Number 1 will put the whole
ISO image into the unclaimed space before partition 1. So
together with most xorriso MBR or GPT features, number 2
would be the most natural choice.
The type_code may be "FAT12", "FAT16",
"Linux", or a hexadecimal number between 0x00 and
0xff. Not all those numbers will yield usable results. For a
list of codes search the Internet for "Partition
Types" or run fdisk command "L". If the
partition appears in GPT then type_code 0xef is mapped to
the EFI System Partition Type GUID. All others get mapped to
Basic Data Type GUID.
type_code may also be a type GUID as plain hex string like
a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.
It will be used if the partition is mentioned in GPT. In
MBR,
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
will be mapped to 0xef. Any other GUID will be mapped to
0x83. In APM,
48465300-0000-11AA-AA11-00306543ECAC
will be mapped to partition type "Apple_HFS", any
other to "Data".
If some other command causes the production of GPT, then the
appended partitions will be mentioned there too, even if not
-appended_part_as_gpt is given.
-appended_part_as_gpt
Marks partitions from
-append_partition in GPT rather than in MBR. In this
case the MBR shows a single partition of type 0xee which
covers the whole output data.
By default, appended partitions get marked in GPT only if
GPT is produced because of other options.
-appended_part_as_apm
Marks partitions from
-append_partition in Apple Partition Map, too.
By default, appended partitions get marked in APM only if
APM is produced because of other options and
-part_like_isohybrid is enabled.
-efi-boot-part disk_path
Copy a file from disk into the
emerging ISO image and mark it by a GPT entry as EFI System
Partition. EFI boot firmware is supposed to use a FAT
filesystem image in such a partition for booting from USB
stick or hard disk.
Instead of a disk_path, the word
--efi-boot-image may be given. It
exposes in GPT the content of the first El Torito EFI boot
image as EFI system partition. EFI boot images are
introduced by options -e or
--efi-boot. The affected EFI boot image
cannot show up in HFS+ because it is stored outside the HFS+
partition.
--gpt_disk_guid value
Control whether an emerging GPT
shall get a randomly generated disk GUID or whether the GUID
is supplied by the user. Value "random" is
default. Value "modification-date" produces
a low quality GUID from the value set by option
--modification-date=.
A string of 32 hex digits, or a RFC 4122 compliant GUID
string may be used to set the disk GUID directly. UEFI
prescribes the first three components of a RFC 4122 GUID
string to be byte-swapped in the binary
representation:
E.g. --gpt_disk_guid
2303cd2a-73c7-424a-a298-25632da7f446
equals --gpt_disk_guid
2acd0323c7734a42a29825632da7f446
The partition GUIDs get generated by minimally varying the
disk GUID.
-chrp-boot-part
Mark the block range of the
whole emerging ISO image as MBR partition of type 0x96. This
is not compatible with any other feature that produces MBR
partition entries. It makes GPT unrecognizable.
CHRP is often used in conjunction with HFS. It is not yet
tested whether HFS+ filesystems produced with option
-hfsplus would boot on any CHRP capable machine which
does not boot pure ISO 9660 as well.
-chrp-boot
Alias of -chrp-boot-part.
-prep-boot-part disk_path
Copy a file from disk into the emerging ISO image and mark it by a MBR partition entry of type 0x41. PReP boot firmware is supposed to read the content of the partition as single ELF executable file. This option is compatible with other MBR partitions and with GPT.
-mips-boot iso_rr_path
Declare a data file in the image to be a MIPS Big Endian boot file and cause production of a MIPS Big Endian Volume Header. This is mutually exclusive with production of other boot blocks like MBR. It will overwrite the first 512 bytes of any data provided by -G. Up to 15 boot files can be declared by multiple -mips-boot options.
-mipsel-boot iso_rr_path
Declare a data file in the image to be the MIPS Little Endian boot file. This is mutually exclusive with other boot blocks. It will overwrite the first 512 bytes of any data provided by -G. Only a single boot file can be declared by -mipsel-boot.
-B disk_path[,disk_path ...]
Cause one or more data files on
disk to be written after the end of the ISO image. A SUN
Disk Label will be written into the first 512 bytes of the
ISO image which lists this image as partition 1 and the
given disk_paths as partition 2 up to 8.
The disk files should contain suitable boot images for SUN
SPARC systems.
The pseudo disk_path "..." causes that all empty
partition entries become copies of the last non-empty
entry. If no other disk_path is given before "..."
then all partitions describe the ISO image. In this case,
the boot loader code has to be imported by option
-G.
-sparc-boot disk_path[,disk_path ...]
Alias of -B.
-sparc-label text
Set the ASCII label text of a SUN Disk Label.
--grub2-sparc-core iso_rr_path
Cause the content address and size of the given data file in the image to be written after the SUN Disk Label. Both numbers are counted in bytes. The address is written as 64 bit big-endian number to byte 0x228. The size is written as 32 bit big-endian number to byte 0x230.
-hppa-cmdline text
Set the PALO command line for
HP-PA. Up to 1023 characters are permitted by default.
With -hppa-hdrversion 4 the limit is 127.
Note that the first five -hppa options are mandatory,
if any of the -hppa options is given. Only option
-hppa-hdrversion is allowed to be missing.
-hppa-bootloader iso_rr_path
Designate the given path as HP-PA bootloader file.
-hppa-kernel-32 iso_rr_path
Designate the given path as HP-PA 32 bit kernel file.
-hppa-kernel-64 iso_rr_path
Designate the given path as HP-PA 64 bit kernel file.
-hppa-ramdisk iso_rr_path
Designate the given path as HP-PA RAM disk file.
-hppa-hdrversion number
Choose between PALO header version 5 (default) and version 4. For the appropriate value see in PALO source code: PALOHDRVERSION.
-alpha-boot iso_rr_path
Declare a data file in the image to be the DEC Alpha SRM Secondary Bootstrap Loader and cause production of a boot sector which points to it. This is mutually exclusive with production of other boot blocks like MBR.
Character sets:
Character sets
should not matter as long as only english alphanumeric
characters are used for file names or as long as all writers
and readers of the medium use the same character set.
Outside these constraints it may be necessary to let xorriso
convert byte codes.
A conversion from input character set to the output
character set is performed when an ISO image gets written.
Vice versa there is a conversion from output character set
to the input character set when an ISO image gets loaded.
The sets can be defined by options
-input-charset and -output-charset,
if needed.
-input-charset character_set_name
Set the character set from which to convert disk file names when inserting them into the ISO image.
-output-charset character_set_name
Set the character set from which to convert names of loaded ISO images and to which to convert names when writing ISO images.
Jigdo Template Extraction:
From man
genisoimage: "Jigdo is a tool to help in the
distribution of large files like CD and DVD images; see
http://atterer.net/jigdo/ for more details. Debian CDs and
DVD ISO images are published on the web in jigdo format to
allow end users to download them more efficiently."
If the use of libjte was enabled at compile time of xorriso,
then xorrisofs can produce a .jigdo and a .template
file together with a single-session ISO image. If not,
then Jigdo options will cause a FAILURE event, which
normally leads to program abort.
One may determine the ability for Jigdo by:
$ xorrisofs -version 2>&1 | grep
’^libjte’ && echo YES
The .jigdo file
contains checksums and symbolic file addresses. The
.template file contains the compressed ISO image with
reference tags instead of the content bytes of the listed
files.
Input for this process are the normal arguments for a
xorrisofs session with no image loaded, and a
checksum file which lists those data files which may be
listed in the .jigdo file and externally referenced in the
.template file. Each designated file is represented in the
checksum file by a single text line:
Checksum as hex digits, 2 blanks, size as 12 decimal digits
or blanks, 2 blanks, symbolic file address
The kind of checksum is chosen by -jigdo
"checksum_algorithm" with values "md5"
(32 hex digits) or "sha256" (64 hex digits). It
will also be used for the file address lines in the .jigdo
file.
The default is "md5".
The file address in a checksum file line has to bear the
same basename as the disk_path of the file which it shall
match. The directory path of the file address is decisive
for To=From mapping, not for file recognition. After To=From
mapping, the file address gets written into the .jigdo file.
Jigdo restore tools will convert these addresses into really
reachable data source addresses from which they can read.
If the list of jigdo parameters is not empty, then padding
will be counted as part of the ISO image.
-jigdo-checksum-algorithm
"md5"|"sha256"
Set the checksum algorithm which shall be used for the data file entries in the .jigdo file and is expected in the checksum file. Default is "md5".
-jigdo-jigdo disk_path
Set the disk_path for the .jigdo file with the checksums and download addresses for filling the holes in .template.
-jigdo-template disk_path
Set the disk_path for the .template file with the holed and compressed ISO image copy.
-jigdo-min-file-size size
Set the minimum size for a data file to be listed in the .jigdo file and being a hole in the .template file. size may be a plain number counting bytes, or a number with appended letter "k", "m", "g" to count KiB (1024 bytes), MiB (1024 KiB), or GiB (1024 MiB).
-jigdo-force-checksum disk_path_pattern
adds a regular expression pattern which will get compared with the absolute disk_path of any data file that was not found in the checksum file. A match causes a MISHAP event, which normally does not abort the program run but finally causes a non-zero exit value of the program.
-jigdo-force-md5 disk_path_pattern
Outdated alias of -jigdo-force-checksum.
-jigdo-exclude disk_path_pattern
Add a regular expression pattern which will get compared with the absolute disk_path of any data file. A match causes the file to stay in .template in any case.
-jigdo-map To=From
Add a string pair of the form To=From to the parameter list. If a data file gets listed in the .jigdo file, then it is referred by the file address from its line in the checksum file. This file address gets checked whether it begins with the From string. If so, then this string will be replaced by the To string and a ’:’ character, before it goes into the .jigdo file. The From string should end by a ’/’ character.
-checksum-list disk_path
Set the disk_path where to find the checksum file file with symbolic file addresses and checksums according to -jigdo-checksum-algorithm.
-md5-list disk_path
Outdated alias of -checksum-list.
-jigdo-template-compress "gzip"|"bzip2"
Choose one of "bzip2" or "gzip" for the compression of the template file. The jigdo file is put out uncompressed.
-checksum_algorithm_iso list_of_names
Choose one or more of "md5", "sha1", "sha256", "sha512" for the auxiliary "# Image Hex" checksums in the .jigdo file. The list_of_names may e.g. look like "md5,sha1,sha512". Value "all" chooses all available algorithms. Note that MD5 stays always enabled.
-checksum_algorithm_template list_of_names
Choose the algorithms for the "# Template Hex" checksums in the .jigdo file. The rules for list_of_names are the same as with -checksum_algorithm_iso.
Miscellaneous options:
-print-size
Print to stdandard output the
foreseeable number of 2048 byte blocks in the emerging ISO
image. Do not produce this image.
The result depends on several settings.
If option --emul-toc is given, then
padding (see -pad) is not counted as part of the image
size. In this case either use -no-pad or add 150
(= 300 KiB) to the resulting number.
If mkisofs emulation ends after option
-print-size, then the properties of the most
recently specified boot image file cannot be edited by
subsequent xorriso commands.
--no_rc
Only if used as first argument this option prevents reading and interpretation of startup files. See section FILES below.
-help |
List supported options to stderr. Original mkisofs options bear their original mkisofs description texts. | ||
-quiet |
Suppress most messages of the program run, except those which indicate problems or errors. | ||
-gui |
Increase the frequency of pacifier messages while writing an ISO image. |
-log-file disk_path
Truncate file disk_path to 0 size and redirect to it all messages which would normally appear on stderr. -log-file with empty text as disk_path re-enables output to stderr.
-v |
Enable the output of informational program messages. |
-verbose
Alias of -v.
-version
Print to standard output a text
that begins with
"mkisofs 2.01-Emulation Copyright (C)"
and to standard error the version information of
xorriso.
Overview of examples:
A simple image production run
Set ISO image paths by -graft-points
Perform multi-session runs
Let xorrisofs work underneath growisofs
Incremental backup of a few directory trees
Incremental backup with accumulated trees
Create bootable images for PC-BIOS and EFI
A simple image production run
A prepared file tree in directory ./for_iso gets copied into
the root directory of the ISO image. File permissions get
set to read-only for everybody. Joliet attributes for
Microsoft systems get added. The resulting image gets
written as data file ./image.iso on disk.
$ xorrisofs -r -J -o ./image.iso
./for_iso
Set ISO image paths by -graft-points
Without option -graft-points each given disk
file is copied into the root directory of the ISO image,
maintaining its name. If a directory is given, then its
files and sub-directories are copied into the root
directory, maintaining their names.
$ xorrisofs ... /home/me/datafile /tmp/directory
yields in the ISO image root directory:
/datafile
/file_1_from_directory
...
/file_N_from_directory
With option
-graft-points it is possible to put files and
directories to arbitrary paths in the ISO image.
$ xorrisofs ... -graft-points /home/me/datafile
/dir=/tmp/directory
yields in the ISO image root directory:
/datafile
/dir
Eventually needed parent directories in the image will be
created automatically:
/datafiles/file1=/home/me/datafile
yields in the ISO image:
/datafiles/file1
The attributes of directory /datafiles get copied from
/home/me on disk.
Normally one
should avoid = and \ characters in the ISO part of a
pathspec. But if it must be, one may escape them:
/with_\=_and_\\/file=/tmp/directory/file
yields in the ISO image:
/with_=_and_\/file
Perform multi-session runs
This example works for multi-session media only:
CD-R[W], DVD-R[W], DVD+R, BD-R. Add
cdrskin option --grow_overwriteable_iso to all
-as cdrecord runs in order to enable
multi-session emulation on overwritable media.
The first session is written like this:
$ xorrisofs -graft-points \
/tree1=prepared_for_iso/tree1 \
| xorriso -as cdrecord -v dev=/dev/sr0
blank=fast -multi -eject -
Follow-up sessions are written like this (the run of
dd is only to give demons a chance to spoil it):
$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
$ xorrisofs -M /dev/sr0 -C $m
-graft-points \
/tree2=prepared_for_iso/tree2 \
| xorriso -as cdrecord -v dev=/dev/sr0
-waiti -multi -eject -
Always eject the drive tray between sessions.
The run of xorriso -as mkisofs will read old sessions
via the CD-ROM driver of /dev/sr0. This driver might
not be aware of the changed content as long as the medium is
not loaded again. In this case the previous session would
not be properly assessed by xorriso and the new session
would contain only the newly added files.
Some systems have not enough patience with automatic tray
loading and some demons may interfere with a first
CD-ROM driver read attempt from a freshly loaded
medium.
When loading the tray manually, wait 10 seconds after the
drive has stopped blinking.
A safe automatic way seems to be a separate run of xorriso
for loading the tray with proper waiting, and a subsequent
run of dd which shall offer itself to any problems caused by
demons assessing the changed drive status. If this does not
help, insert a run of "sleep 10" between xorriso
and dd.
Let xorrisofs work underneath growisofs
growisofs expects an ISO formatter program which understands
options -C and -M. A variable is defined to
override the hardcoded default name.
$ export MKISOFS="xorrisofs"
$ growisofs -Z /dev/dvd /some/files
$ growisofs -M /dev/dvd /more/files
If no "xorrisofs" is available on your system,
then you will have to create a link pointing to the xorriso
binary and tell growisofs to use it. E.g. by:
$ ln -s $(which xorriso) "$HOME/xorrisofs"
$ export MKISOFS="$HOME/xorrisofs"
One may quit mkisofs emulation by argument
"--" and make use of all xorriso
commands. growisofs dislikes options which start with
"-o" but -outdev must be set to
"-". So use "outdev" instead:
$ growisofs -Z /dev/dvd --for_backup
-- \
outdev - -update_r /my/files /files
$ growisofs -M /dev/dvd --for_backup
-- \
outdev - -update_r /my/files /files
Note that --for_backup is given in the mkisofs
emulation. To preserve the recorded extra data it must
already be in effect, when the emulation loads the
image.
Incremental backup of a few directory trees
This changes the directory trees /open_source_project and
/personal_mail in the ISO image so that they become exact
copies of their disk counterparts. ISO file objects get
created, deleted or get their attributes adjusted
accordingly.
ACL, xattr, hard links and MD5 checksums will be recorded.
It is expected that inode numbers in the disk filesystem are
persistent over cycles of mounting and booting. Files with
names matching *.o or *.swp get excluded explicitly.
To be used
several times on the same medium, whenever an update of the
two disk trees to the medium is desired. Begin with a blank
medium and update it until he run fails gracefully due to
lack of remaining space on the old one.
Always eject the drive tray between sessions. A run of dd
shall give demons a chance to spoil the first read on
freshly loaded media.
$ msinfo=$(xorriso -as cdrecord dev=/dev/sr0
-msinfo)
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
$ load_opts=
$ test -n "$msinfo" &&
load_opts="-M /dev/sr0 -C $msinfo"
$ xorrisofs $load_opts -o -
--for_backup -m ’*.o’ -m
’*.swp’ \
-V PROJ_MAIL_"$(date
’+%Y_%m_%d_%H%M%S’)"
-graft-points \
-old-root / \
/projects=/home/thomas/projects \
/personal_mail=/home/thomas/personal_mail \
| xorriso -as cdrecord dev=/dev/sr0 -v
-multi -waiti -eject -
This makes sense if the full backup leaves substantial remaining capacity on media and if the expected changes are much smaller than the full backup.
Better do not use your youngest backup for -old-root.
Have at least two media which you use alternatingly. So only
older backups get endangered by the new write operation,
while the newest backup is stored safely on a different
medium.
Always have a blank medium ready to perform a full backup in
case the update attempt fails due to insufficient remaining
capacity. This failure will not spoil the old medium, of
course.
If inode numbers on disk are not persistent, then use option --old-root-no-ino . In this case an update run will compare recorded MD5 sums against the current file content on hard disk.
With
mount option -o "sbsector=" on
GNU/Linux or -s on FreeBSD or NetBSD it is
possible to access the session trees which represent the
older backup versions. With CD media, GNU/Linux mount
accepts session numbers directly by its option
"session=".
Multi-session media and most overwritable media
written by xorriso can tell the sbsectors of their sessions
by xorriso option -toc:
$ xorriso -dev /dev/sr0 -toc
xorriso can print the matching mount command for a session
number:
$ xorriso -mount_cmd /dev/sr0 session 12 /mnt
or for a volume id that matches a search expression:
$ xorriso -mount_cmd /dev/sr0 volid
’*2008_12_05*’ /mnt
Both yield on standard output something like:
mount -t iso9660 -o
nodev,noexec,nosuid,ro,sbsector=1460256
’/dev/sr0’ ’/mnt’
The superuser may let xorriso execute the mount command
directly:
# osirrox -mount /dev/sr0 "volid"
’*2008_12_05*’ /mnt
Incremental backup with accumulated trees
Solaris does not offer the option to mount older sessions.
In order to keep them accessible, one may map all files to a
file tree under a session directory and accumulate those
directories from session to session. The -root tree is
cloned from the -old-root tree before it gets
compared with the appropriate trees on disk.
This demands to know the previously used session directory
name.
With the first session:
$ xorrisofs -root /session1 \
-o - --for_backup -m
’*.o’ -m ’*.swp’ \
-V PROJ_MAIL_"$(date
’+%Y_%m_%d_%H%M%S’)"
-graft-points \
/projects=/home/thomas/projects \
/personal_mail=/home/thomas/personal_mail \
| xorriso -as cdrecord dev=/dev/sr0 -v
blank=as_needed \
-multi -waiti -eject -
With the second
session, option -old-root refers to /session1
and the new -root is /session2.
Always eject the drive tray between sessions. A run of dd
shall give demons a chance to spoil the first read on
freshly loaded media.
$ msinfo=$(xorriso -as cdrecord dev=/dev/sr0
-msinfo)
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
$ load_opts=
$ test -n "$msinfo" &&
load_opts="-M /dev/sr0 -C $msinfo"
$ xorrisofs $load_opts -root /session2
-old-root /session1 \
-o - --for_backup -m
’*.o’ -m ’*.swp’ \
-V PROJ_MAIL_"$(date
’+%Y_%m_%d_%H%M%S’)"
-graft-points \
/projects=/home/thomas/projects \
/personal_mail=/home/thomas/personal_mail \
| xorriso -as cdrecord dev=/dev/sr0 -v
-multi -waiti -eject -
With the third session, option -old-root refers
to /session2. The new -root is /session3. And so
on.
Create bootable images for PC-BIOS and EFI
The SYSLINUX/ISOLINUX boot loader suite is popular for
booting PC-BIOS. The ISOLINUX wiki prescribes to
create on disk a directory ./CD_root and to copy all desired
files underneath that directory. Especially file
isolinux.bin shall be copied to
./CD_root/isolinux/isolinux.bin . This is the boot image
file.
The prescribed mkisofs options can be used unchanged with
xorrisofs:
$ xorrisofs -o output.iso \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot
-boot-load-size 4
-boot-info-table \
./CD_root
Put it on CD by a burn program. E.g.:
$ xorriso -as cdrecord -v dev=/dev/sr0
blank=as_needed output.iso
The image from
above example will boot from CD, DVD or BD, but not from USB
stick or other hard-disk-like devices. This can
be done by help of an isohybrid MBR. Syslinux provides
matching template files as isohdp[fp]x*.bin . E.g.
/usr/lib/syslinux/isohdpfx.bin .
If a few hundred KB of size do not matter, then option
-partition_offset can be used to create a partition
table where partition 1 starts not at block 0. This
facilitates later manipulations of the USB stick by tools
for partitioning and formatting.
The image from the following example will be prepared for
booting via MBR and its first partition will start at hard
disk block 64.
It will also boot from optical media.
$ xorrisofs -o output.iso \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot
-boot-load-size 4
-boot-info-table \
-isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \
-partition_offset 16 \
./CD_root
Become superuser and copy the image to the unpartitioned
base device file of the USB stick. On GNU/Linux this is e.g.
/dev/sdb, not /dev/sdb1.
CAUTION: This will overwrite any partitioning on the USB
stick and make remaining data unaccessible.
So first make sure you got the correct address of the
intended device. E.g. by reading 100 MiB data from it and
watching it blinking:
# dd bs=2K if=/dev/sdb count=50K >/dev/null
Now copy the image onto it
# dd bs=2K if=output.iso of=/dev/sdb
Now for EFI:
The boot image file has to be the image of an EFI System
Partition, i.e. a FAT filesystem with directory /EFI/BOOT
and boot files with EFI prescribed names: BOOTIA32.EFI for
32 bit x86, BOOTx64.EFI for 64 bit AMD/x86 (in
UEFI-2.4 there is indeed a lower case "x"),
BOOTAA64.EFI for 64 bit ARM. The software in the FAT
filesystem should be able to find and inspect the ISO
filesystem for boot loader configuration and start of
operating system. GRUB2 program grub-mkimage can
produce such a FAT filesystem with suitable content, which
then uses further GRUB2 software from the ISO filesystem.
EFI boot equipment may be combined with above ISOLINUX
isohybrid for PC-BIOS in a not really UEFI-2.4
compliant way, which obviously works well. It yields MBR and
GPT partition tables, both with nested partitions. Assumed
the EFI System Partition image is ready as
./CD_root/boot/grub/efi.img, add the following options
before the directory address ./CD_root:
-eltorito-alt-boot -e
’boot/grub/efi.img’
-no-emul-boot \
-isohybrid-gpt-basdat \
More compliant with UEFI-2.4 is to decide for either
MBR or GPT and to append a copy of the EFI System Partition
in order to avoid overlap of ISO partition and EFI
partition. Here for MBR:
-eltorito-alt-boot -e
’boot/grub/efi.img’
-no-emul-boot \
-append_partition 2 0xef ./CD_root/boot/grub/efi.img \
The resulting ISOs are supposed to boot from optical media
and USB stick. One may omit option
-eltorito-alt-boot if no option -b
is used to make the ISO bootable via PC-BIOS.
For ISOs with pure GRUB2 boot equipment consider to use GRUB2 tool grub-mkrescue as frontend to xorrisofs.
If you have a
bootable ISO filesystem and want to know its equipment plus
a proposal how to reproduce it, try:
$ xorriso -hfsplus on -indev IMAGE.iso \
-report_el_torito plain -report_system_area
plain \
-print "" -print "=======
Proposal for xorrisofs options:" \
-report_el_torito as_mkisofs
Startup files:
If not --no_rc is given as the first argument
then xorrisofs attempts on startup to read and
execute lines from the following files:
/etc/default/xorriso
/etc/opt/xorriso/rc
/etc/xorriso/xorriso.conf
$HOME/.xorrisorc
The files are read in the sequence given here, but none of
them is required to exist. The lines are not interpreted as
xorrisofs options but as generic xorriso commands.
See man xorriso.
After the
xorriso startup files, the program tries one by one to open
for reading:
./.mkisofsrc
$MKISOFSRC
$HOME/.mkisofsrc
$(dirname $0)/.mkisofsrc
On success it interprets the file content and does not try
further files. The last address is used only if start
argument 0 has a non-trivial dirname.
The reader currently interprets the following NAME=VALUE
pairs:
APPI default for -A
PUBL default for -publisher
SYSI default for -sysid
VOLI default for -V
VOLS default for -volset
Any other lines will be silently ignored.
The following
environment variables influence the program behavior:
HOME is used to find xorriso and mkisofs startup files.
MKISOFSRC may be used to point the program to a mkisofs
startup file.
SOURCE_DATE_EPOCH belongs to the specs of
reproducible-builds.org. It is supposed to be either
undefined or to contain a decimal number which tells the
seconds since january 1st 1970. If it contains a number,
then it is used as time value to set the default of
--modification-date=.
--gpt_disk_guid defaults to
"modification-date". The default of
--set_all_file_dates is then
"set_to_mtime". Further the "now" time
for ISO nodes without disk source is then set to the
SOURCE_DATE_EPOCH value.
Startup files and program options can override the effect of
SOURCE_DATE_EPOCH.
For generic xorriso command mode
xorriso(1)
For the cdrecord emulation of xorriso
xorrecord(1)
For mounting xorriso generated ISO 9660 images (-t iso9660)
mount(8)
Other programs which produce ISO 9660 images
mkisofs(8), genisoimage(8)
Programs which burn sessions to optical media
growisofs(1), cdrecord(1), wodim(1), cdrskin(1), xorriso(1)
ACL and xattr
getfacl(1), setfacl(1), getfattr(1), setfattr(1)
MD5 checksums
md5sum(1)
On FreeBSD the commands for xattr and MD5 differ
getextattr(8), setextattr(8), md5(1)
To report bugs,
request help, or suggest enhancements for xorriso,
please send electronic mail to the public list
<bug-xorriso@gnu.org>. If more privacy is
desired, mail to <scdbackup@gmx.net>.
Please describe what you expect xorriso to do, the
program arguments or dialog commands by which you tried to
achieve it, the messages of xorriso, and the
undesirable outcome of your program run.
Expect to get asked more questions before solutions can be
proposed.
Thomas Schmitt
<scdbackup@gmx.net>
for libburnia-project.org
Copyright (c)
2011 - 2023 Thomas Schmitt
Permission is granted to distribute this text freely. It
shall only be modified in sync with the technical properties
of xorriso. If you make use of the license to derive
modified versions of xorriso then you are entitled to modify
this text under that same license.
xorrisofs
is in part based on work by Vreixo Formoso who provides
libisofs together with Mario Danic who also leads the
libburnia team. Vladimir Serbinenko contributed the HFS+
filesystem code and related knowledge.
Compliments towards Joerg Schilling whose cdrtools served me
for ten years.