From 650c015c5b975ff954f3ec60a8ebb432e29bfd70 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Wed, 6 Sep 2017 14:42:21 +0200 Subject: [PATCH] Updated libisoburn doc/*.wiki files by current publicly shown files --- doc/faq.wiki | 831 +++++++++++++++++++------------------- doc/partition_offset.wiki | 110 +++-- doc/qemu_xorriso.wiki | 240 +++++------ 3 files changed, 596 insertions(+), 585 deletions(-) diff --git a/doc/faq.wiki b/doc/faq.wiki index e08da6d2..c72410d9 100644 --- a/doc/faq.wiki +++ b/doc/faq.wiki @@ -1,407 +1,424 @@ - -'''Libburnia Frequently Asked Questions''' - -Please post your questions to -[https://lists.gnu.org/mailman/listinfo/bug-xorriso GNU xorriso mailing list]. - ----------------------------------------------------------------------------- -'''Content:''' - -Google favorites: - - [#xorriso_not_found xorriso not found] - - [#xorriso_tutorial xorriso tutorial] - - [#xorriso_create_iso xorriso create ISO image] - -Burning: - - [#diff_cdrskin_xorriso What is the difference between cdrskin and xorriso ?] - - [#scsi_error What does that SCSI error message mean ?] - - [#concurrent_burn Why is simultaneous burning with multiple drives so slow ?] - -Imaging: - - [#edit_files Is there a way to edit files inside the ISO image ?] - - [#boot_arch For which architectures xorriso is able to create bootable images ?] - - [#isohybrid How to enable booting from USB stick ?] - - [#partition_offset What is partition offset feature all about?] - - [#partition_offset_apple Partition offset bad on Apple ?] - -Development: - - [#api_specs Where are the APIs of libburnia libraries described ?] - - [#gui_advise I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ?] - -Miscellaneous: - - [#example_links Where to see examples ?] - - [#xorriso_aliases What personalities are supported by xorriso ?] - - [#xorriso_dialog_mode What is xorriso dialog mode useful for ?] - - [#version_numbers Why is every second release missing ?] - ----------------------------------------------------------------------------- -'''Google favorites''' ----------------------------------------------------------------------------- - -===== xorriso not found ===== #xorriso_not_found - -This message is issued by programs which use [wiki:Xorriso xorriso] for -producing ISO 9660 filesystem images. E.g. by GRUB2's grub-mkrescue. - -Executable xorriso binaries are normally contained in software packages -named "libisoburn" or "xorriso". - -If your operating system does not offer such a package, then consider -to get the [http://www.gnu.org/software/xorriso#download GNU xorriso] -source tarball. For instructions read in its -[http://www.gnu.org/software/xorriso/README_xorriso README file] -the paragraph "Compilation, First Glimpse, Installation". -With grub-mkrescue it is possible to use the resulting binary without further -installation. Just submit its absolute path with option --xorriso=. E.g.: -{{{ - grub-mkrescue --xorriso=$HOME/xorriso-1.3.8/xorriso/xorriso -o output.iso -}}} - -===== xorriso tutorial ===== #xorriso_tutorial - -There is not much more than the -[http://www.gnu.org/software/xorriso/man_1_xorriso.html#EXAMPLES man xorriso examples]. - -Volunteers are wanted who make a collection of use cases, ask at bug-xorriso -for xorriso instructions to fulfill the needs, and describe both in a -user-readable manner. - -Up to then, the GUI demo [http://svn.libburnia-project.org/libisoburn/trunk/frontend/README-tcltk xorriso-tcltk] -([http://www.gnu.org/software/xorriso/xorriso-tcltk-screen.gif screenshot]) -may serve as interactive exploration tool. It needs xorriso >= 1.2.6, Tcl, -Tk >= 8.4, optionally Tcl / Tk package "BWidget". -{{{ - xorriso-tcltk --script_log_file - -}}} -starts the GUI and will log the essential xorriso commands in the start -terminal. I.e. click on "Scan for drives" and learn that this operation -is triggered by xorriso command "-devices". - -Click the rightmost mouse button while being over any of the GUI elements -in order to get the particular help text for that element. -Have [http://www.gnu.org/software/xorriso/man_1_xorriso.html man xorriso] -ready to learn what the particular commands mean. - - -===== xorriso create ISO image ===== #xorriso_create_iso - -{{{ - xorriso -outdev $HOME/result.iso \ - -map /home/me/sounds /sounds \ - -map /home/me/pictures /pictures -}}} -This points the output to file $HOME/result.iso, which should not yet exist. -Then it maps disk directory /home/me/sounds to ISO directory /sounds, -and /home/me/pictures to /pictures. -At program end, the ISO image gets produced and the contents of the -two directory trees gets copied into the ISO. - -If you have experience with program mkisofs, you may also use its -emulation by xorriso: -{{{ - xorriso -as mkisofs \ - -o $HOME/result.iso \ - -graft-points \ - /sounds=/home/me/sounds \ - /pictures=/home/me/pictures -}}} - -See [http://www.gnu.org/software/xorriso/man_1_xorriso.html man xorriso] -for xorriso native commands. - -See [http://www.gnu.org/software/xorriso/man_1_xorrisofs.html man xorriso] -for its mkisofs emulation. - - - ----------------------------------------------------------------------------- -'''Burning''' ----------------------------------------------------------------------------- - -===== What is the difference between cdrskin and xorriso ? ===== #diff_cdrskin_xorriso - -[wiki:Cdrskin cdrskin] is a dedicated emulator of program cdrecord, based on -libburn. It tries to be as similar to cdrecord as is possible under that -premise. - -[wiki:Xorriso xorriso] is an integrated tool which creates, loads, manipulates, -and writes ISO 9660 filesystem images with Rock Ridge extensions. -It is based on libburn, libisofs, and libisoburn. One of its features is -the emulation of the corresponding tasks as done by mkisofs and cdrecord. - -===== What does that SCSI error message mean ? ===== #scsi_error - -Error messages labled as "SCSI" stem from the drive. They are codes of -three hexadecimal numbers, like [3 0C 00]. The first number gives an overall -classification of the problem. The other two numbers give the particular -error description. - -libburn translates known error codes into text messages. They consist of -two statements: the overall classification and the error description. - -E.g. [3 0C 00] Medium error. Write error. - -The classification allows a guess where the problem cause might sit: - -2 "Drive not ready" : This is a well normal drive state and should be handled -by libburn. If you see this outside of DEBUG messages then it happened -at an unexpected occasion. Either libburn did its job wrong, or the hardware -suffers from blackouts. Hardware can be: drive, cable, bus controller. - -Workaround: Check cables. If possible, try the drive at a different -bus controller. - -3 "Medium error" : This indicates a problem between drive and medium. libburn -cannot directly cause such an error by any mistake. If drive and medium -are balancing on the edge of defect, it is possible that optional settings -can cause or prevent such errors. But in many cases of drive-medium conflicts -it is mere incident whether a burn run succeeds or not. - -Workaround: Try other media or another drive. - -4 "Drive error" : The drive or the bus controller accuse themselves of -doing it wrong. As with "Medium error" this might be aggravated or eased by -optional settings. - -Workaround: Check cables. If possible, try the drive at a different -bus controller. - -5 "Illegal request" : The drive did not like a command sent by libburn. -This may be normal. But if you see this outside of DEBUG messages, then -either the drive does not comply to MMC or libburn does not do its job right. - -Workaround: Submit an error report to -[https://lists.gnu.org/mailman/listinfo/bug-xorriso GNU xorriso mailing list]. - -B "Command aborted" : Seems to be generated by some bus controllers or -operating system SCSI drivers. The newest outbreak is said to be due to USB 3 -and drivers which do not prevent power saving. - -Workaround: Plug USB drives to USB 2 sockets or have a recent operating -system kernel. If this does not help, contact -[https://lists.gnu.org/mailman/listinfo/bug-xorriso GNU xorriso mailing list] -and be ready for experiments. - -===== Why is simultaneous burning with multiple drives so slow ? ===== #concurrent_burn - -It is a known regression of Linux since about 2010 that operating more than -one drive at the same time via SCSI commands shows severe throughput problems. -See [ConcurrentLinuxSr the wiki page about this problem] which offers two -alternative workarounds in userspace, explanantions of the reason, -and a link to a remedy proposal by courageous kernel modification. - ----------------------------------------------------------------------------- -'''Imaging''' ----------------------------------------------------------------------------- - -===== Is there a way to edit files inside the ISO image ? ===== #edit_files - -File content cannot be altered. But files may be replaced by new copies from -the disk filesystem. - -The main method of manipulating an existing ISO image is to append a session -with a new complete directory tree and the file content of the added or -overwritten files. Depending on the media type you get gaps between sessions -of up to 20 MB. So better try to do all foreseeable changes by one add-on -session. - -===== For which architectures xorriso is able to create bootable images ? ===== #boot_arch - -Currently it supports systems with PC-BIOS via El Torito for booting from -CD, DVD, or BD media, and via MBR for booting from memory sticks or hard -disks. Further it supports machines with MIPS processor from SGI (Big Endian) -and DEC (Little Endian), and SUN SPARC machines. -(See [http://bazaar.launchpad.net/%7Elibburnia-team/libisofs/scdbackup/annotate/head%3A/doc/boot_sectors.txt libisofs/doc/boot_sectors.txt] -for technical details.) - -Machines which support EFI may either boot via El Torito or use the files -of the ISO image directly. It is possible to append to the ISO image a -writeable FAT12 partition where files for EFI may be stored and changed. - -===== How to enable booting from USB stick ? ===== #isohybrid - -The ISOLINUX boot loader is normally started from CD, DVD or BD media -by a PC-BIOS via an El Torito boot record. But if the ISO image resides on an -USB stick or another hard-disk-like device, then PC-BIOS ignores El Torito -and rather expects a Master Boot Record (MBR). Both boot record types can -reside in the same ISO image. Therefore it is possible to create an MBR that -starts the boot image file of ISOLINUX which is already target of the El Torito -boot record. This kind of MBR is called "isohybrid". ISOLINUX provides -a program named isohybrid to patch existing images, but libisofs can create an -MBR already when producing the ISO image. See in -[http://www.gnu.org/software/xorriso/man_1_xorriso.html manual page of xorriso] -option -boot_image with arguments "isolinux" "system_area=", -and -as mkisofs option -isohybrid-mbr. - -See [http://en.wikipedia.org/wiki/Master_boot_record Wikipedia on MBR] for -general information about PC-DOS Master Boot Records, and -[http://syslinux.zytor.com/wiki/index.php/ISOLINUX ISOLINUX wiki] for special -information about ISOLINUX. The wiki example with mkisofs can be performed -as well by help of xorriso option -as mkisofs. - -A similar combination of El Torito and MBR is created by GRUB2 tool -grub-mkrescue. See [http://www.gnu.org/software/grub/ homepage of GNU GRUB 2] -for general information. - -===== What is partition offset feature all about? ===== #partition_offset - -If an MBR is present, then it contains a partition table with up to four -entries. The MBR is located at the very start of the ISO image. By -tradition the first partition should begin only after the range of MBR and -eventual supporting data blocks. On hard disk one often sees partition 1 -starting at byte 63*512. Further it is tradition that the payload filesystem -is mountable via one of the partitions. - -The isohybrid MBR has its only partition start at byte 0. Thus it is mountable -but does not obey the tradition to begin only after the MBR. The grub-mkrescue -MBR on the other hand has partition 1 start at byte 512, which makes it -unmountable. Only the unpartitioned base device can be mounted. (On GNU/Linux -e.g. /dev/sdb is the base device whereas /dev/sdb1 is partition 1.) - -The compromise offered by libisofs is to create a second superblock at -address 16*2048 and to let start partition 1 at this address. The second -superblock leads to a second directory tree which takes into account the -address difference between partition 1 and the base device. So the image -gets mountable via both devices and reserves 32 kB for boot manager software -where it may manipulate and augment the MBR. -(See [http://libburnia-project.org/wiki/PartitionOffset Partition Offset Wiki] -for examples.) - -There are reports of machines which will not boot from USB stick if -partition offset is 0. - -===== Partition offset bad on Apple ? ===== #partition_offset_apple - -Apple's "Snow Leopard" operating system refuses to mount Debian CD images -with non-zero partition offset. - -The issue is still under investigation. But for now one has to choose -between mountability on Apple "Snow Leopard" or bootability from USB stick -on Kontron CG2100 "carrier grade server". - ----------------------------------------------------------------------------- -'''Developing''' ----------------------------------------------------------------------------- - -===== Where are the APIs of libburnia libraries described ? ===== #api_specs - -The decisive references are the inclusion headers of the libraries -, , , -and . - -Current SVN versions of these files: -[http://libburnia-project.org/browser/libburn/trunk/libburn/libburn.h libburn/libburn.h] , -[http://bazaar.launchpad.net/%7Elibburnia-team/libisofs/scdbackup/annotate/head%3A/libisofs/libisofs.h libisofs/libisofs.h] , -[http://libburnia-project.org/browser/libisoburn/trunk/libisoburn/libisoburn.h libisoburn/libisoburn.h] , -[http://libburnia-project.org/browser/libisoburn/trunk/xorriso/xorriso.h libisoburn/xorriso.h] - -Doxygen generated API descriptions at -[http://api.libburnia-project.org api.libburnia-project.org] -might be slightly behind the latest developments. - -===== I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ? ===== #gui_advise - -Most appreciated would be a GUI for xorriso which allows to copy files from -a view of the hard disk filesystem to a view of the ISO filesystem, and vice -versa. The xorriso implementation is located inside libisoburn. - -Each option that is described in -[http://www.gnu.org/software/xorriso/man_1_xorriso.html man 1 xorriso] -can be performed by a corresponding C function that is defined in -[http://libburnia-project.org/browser/libisoburn/trunk/xorriso/xorriso.h xorriso.h]. -Further there are calls for library startup and shutdown, for problem -handling, and for the interpreters of xorriso's command line interface. -The xorriso API encapsulates calls to libisofs, libburn, and libisoburn. - -An alternative to the xorriso C API is xorriso dialog mode. -[#xorriso_dialog_mode See below.] -The script -[http://libburnia-project.org/browser/libisoburn/trunk/frontend/xorriso-tcltk xorriso-tcltk] -demonstrates this approach. It is part of the -libisoburn release tarball and of the GNU xorriso tarball. - -The known existing GUIs [http://www.xfce.org/projects/xfburn/ Xfburn], -[http://projects.gnome.org/brasero/ Brasero], -[http://flburn.sourceforge.net/ FlBurn] -rather use libisofs and libburn directly. -(Please submit an URI if you want your libburnia GUI application mentioned -here.) - ----------------------------------------------------------------------------- -'''Miscellaneous''' ----------------------------------------------------------------------------- - -===== Where to see examples ? ===== #example_links - -[http://www.gnu.org/software/xorriso/man_1_xorriso.html#EXAMPLES xorriso examples] , -[http://scdbackup.sourceforge.net/man_1_cdrskin_devel.html#EXAMPLES cdrskin examples] , -[http://libburnia-project.org/browser/libburn/trunk/test/libburner.c libburner.c a minimal but complete burn program] -(also illustrated at the end of [http://api.libburnia-project.org/libburn/ libburn API intro]). - - -===== What personalities are supported by xorriso ? ===== #xorriso_aliases - -The name by which xorriso is started may trigger certain features which -normally would need to be enabled by program options. - -xorrisofs starts up in mkisofs emulation mode, which otherwise would have to -be entered by command -as "mkisofs". - -xorrecord starts up in cdrecord emulation mode, which is normally entered by -command -as "cdrecord". This emulation is only able to write a single data -track as new session to blank or appendable media. No audio. No multiple -tracks in one session. - -osirrox allows to copy files from ISO image to disk and to apply option -mount -to one or more of the existing ISO sessions. This is normally enabled by -option -osirrox "on:o_excl_off". - -===== What is xorriso dialog mode useful for ? ===== #xorriso_dialog_mode - -Dialog mode is initiated if -dialog "on" is among the program arguments. -It can be used to inspect and exploit existing ISO 9660 images or -to explore xorriso's behavior in order to develop the command sequence -for a batch run. - -Frontend programmers may fork xorriso initiating a xorriso dialog session -(-dialog "on" -use_readline "off" -pkt_output "on" -mark "done"), -and interact with it from their own program via pipes connected to -xorriso's stdin and stdout. This is more efficient than forking xorriso -every now and then to perform various commands in order to complete -complex tasks like image size prediction. - -The script -[http://libburnia-project.org/browser/libisoburn/trunk/frontend/xorriso-tcltk xorriso-tcltk] -demonstrates this approach. It is part of the -libisoburn release tarball and of the GNU xorriso tarball. - -===== Why is every second release missing ? ===== #version_numbers - -Releases have an even third version number. Like 0.5.6 or 1.0.4. -During development the next higher odd number is used. E.g. 0.5.7 or 1.0.5. - -The content of release tarballs does not get changed without changing -their name. The development tarballs of xorriso and cdrskin may change -their content without notice. - ----------------------------------------------------------------------------- -Site maintainer: Do not edit this wiki directly but rather the SVN version -of libisoburn/trunk/doc/faq.wiki. When done, paste it into the wiki editor. - + +### Libburnia Frequently Asked Questions + +Please post your questions to +[GNU xorriso mailing list](https://lists.gnu.org/mailman/listinfo/bug-xorriso). + +---------------------------------------------------------------------------- +### Content: + +Google favorites: + + [xorriso not found](#xorriso_not_found) + + [xorriso tutorial](#xorriso_tutorial) + + [xorriso create ISO image](#xorriso_create_iso) + +Burning: + + [What is the difference between cdrskin and xorriso ?](#diff_cdrskin_xorriso) + + [What does that SCSI error message mean ?](#scsi_error) + + [Why is simultaneous burning with multiple drives so slow ?](#concurrent_burn) + +Imaging: + + [Is there a way to edit files inside the ISO image ?](#edit_files) + + [For which architectures xorriso is able to create bootable images ?](#boot_arch) + + [How to enable booting from USB stick ?](#isohybrid) + + [What is partition offset feature all about?](#partition_offset) + + [Partition offset bad on Apple ?](#partition_offset_apple) + +Development: + + [Where are the APIs of libburnia libraries described ?](#api_specs) + + [I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ?](#gui_advise) + +Miscellaneous: + + [Where to see examples ?](#example_links) + + [What personalities are supported by xorriso ?](#xorriso_aliases) + + [What is xorriso dialog mode useful for ?](#xorriso_dialog_mode) + + [Why is every second release missing ?](#version_numbers) + + +------------------------------------------------------------------------ +### Google favorites +------------------------------------------------------------------------ + +##### xorriso not found + +This message is issued by programs which use [xorriso](Xorriso) for +producing ISO 9660 filesystem images. E.g. by GRUB2's grub-mkrescue. + +Executable xorriso binaries are normally contained in software packages +named "libisoburn" or "xorriso". + +If your operating system does not offer such a package, then consider +to get the [GNU xorriso](http://www.gnu.org/software/xorriso#download) +source tarball. For instructions read in its +[README file](http://www.gnu.org/software/xorriso/README_xorriso) +the paragraph "Compilation, First Glimpse, Installation". +With grub-mkrescue it is possible to use the resulting binary without further +installation. Just submit its absolute path with option `--xorriso=`. E.g.: +``` + grub-mkrescue --xorriso=$HOME/xorriso-1.3.8/xorriso/xorriso -o output.iso +``` + +##### xorriso tutorial + +There is not much more than the +[man xorriso examples](http://www.gnu.org/software/xorriso/man_1_xorriso.html#EXAMPLES) + +Volunteers are wanted who make a collection of use cases, ask at bug-xorriso +for xorriso instructions to fulfill the needs, and describe both in a +user-readable manner. + +Up to then, the GUI demo [xorriso-tcltk](https://dev.lovelyhq.com/libburnia/libisoburn/raw/HEAD/frontend/README-tcltk) +[(screenshot)](http://www.gnu.org/software/xorriso/xorriso-tcltk-screen.gif) +may serve as interactive exploration tool. It needs `xorriso` >= 1.2.6, `Tcl`, +`Tk` >= 8.4, optionally Tcl / Tk package `BWidget`. +``` + xorriso-tcltk --script_log_file - +``` +starts the GUI and will log the essential xorriso commands in the start +terminal. I.e. click on "Scan for drives" and learn that this operation +is triggered by xorriso command `-devices`. + +Click the rightmost mouse button while being over any of the GUI elements +in order to get the particular help text for that element. +Have [man xorriso](http://www.gnu.org/software/xorriso/man_1_xorriso.html) +ready to learn what the particular commands mean. + + +##### xorriso create ISO image + +``` + xorriso -outdev $HOME/result.iso \ + -map /home/me/sounds /sounds \ + -map /home/me/pictures /pictures +``` +This points the output to file `$HOME/result.iso`, which should not yet exist. +Then it maps disk directory `/home/me/sounds` to ISO directory `/sounds`, +and `/home/me/pictures` to `/pictures`. +At program end, the ISO image gets produced and the contents of the +two directory trees gets copied into the ISO. + +If you have experience with program `mkisofs`, you may also use its +emulation by xorriso: +``` + xorriso -as mkisofs \ + -o $HOME/result.iso \ + -graft-points \ + /sounds=/home/me/sounds \ + /pictures=/home/me/pictures +``` + +See [man xorriso](http://www.gnu.org/software/xorriso/man_1_xorriso.html) +for xorriso native commands. + +See [man xorrisofs](http://www.gnu.org/software/xorriso/man_1_xorrisofs.html) +for its mkisofs emulation. + + + +---------------------------------------------------------------------------- +### Burning +---------------------------------------------------------------------------- + +##### What is the difference between cdrskin and xorriso ? + +[cdrskin](Cdrskin) is a dedicated emulator of program cdrecord, based on +libburn. It tries to be as similar to cdrecord as is possible under that +premise. + +[xorriso](Xorriso) is an integrated tool which creates, loads, manipulates, +and writes ISO 9660 filesystem images with Rock Ridge extensions. +It is based on libburn, libisofs, and libisoburn. One of its features is +the emulation of the corresponding tasks as done by mkisofs and cdrecord. + +##### What does that SCSI error message mean ? + +Error messages labled as "SCSI" stem from the drive. They are codes of +three hexadecimal numbers, like `[3 0C 00]`. The first number gives an overall +classification of the problem. The other two numbers give the particular +error description. + +libburn translates known error codes into text messages. They consist of +two statements: the overall classification and the error description. + +E.g. `[3 0C 00] Medium error. Write error.` + +The classification allows a guess where the problem cause might sit: + +2 `Drive not ready` : This is a well normal drive state and should be handled +by libburn. If you see this outside of DEBUG messages then it happened +at an unexpected occasion. Either libburn did its job wrong, or the hardware +suffers from blackouts. Hardware can be: drive, cable, bus controller. + +Workaround: Check cables. If possible, try the drive at a different +bus controller. + +3 `Medium error` : This indicates a problem between drive and medium. libburn +cannot directly cause such an error by any mistake. If drive and medium +are balancing on the edge of defect, it is possible that optional settings +can cause or prevent such errors. But in many cases of drive-medium conflicts +it is mere incident whether a burn run succeeds or not. + +Workaround: Try other media or another drive. + +4 `Drive error` : The drive or the bus controller accuse themselves of +doing it wrong. As with "Medium error" this might be aggravated or eased by +optional settings. + +Workaround: Check cables. If possible, try the drive at a different +bus controller. + +5 `Illegal request` : The drive did not like a command sent by libburn. +This may be normal. But if you see this outside of DEBUG messages, then +either the drive does not comply to MMC or libburn does not do its job right. + +Workaround: Submit an error report to +[GNU xorriso mailing list](https://lists.gnu.org/mailman/listinfo/bug-xorriso). + +B `Command aborted` : Seems to be generated by some bus controllers or +operating system SCSI drivers. The newest outbreak is said to be due to USB 3 +and drivers which do not prevent power saving. + +Workaround: Plug USB drives to USB 2 sockets or have a recent operating +system kernel. If this does not help, contact +[https://lists.gnu.org/mailman/listinfo/bug-xorriso GNU xorriso mailing list] +and be ready for experiments. + +##### Why is simultaneous burning with multiple drives so slow ? + +It is a known regression of Linux since about 2010 that operating more than +one drive at the same time via SCSI commands shows severe throughput problems. +See [the wiki page about this problem](ConcurrentLinuxSr) which offers two +alternative workarounds in userspace, explanantions of the reason, +and a link to a remedy proposal by courageous kernel modification. + + +---------------------------------------------------------------------------- +### Imaging +---------------------------------------------------------------------------- + +##### Is there a way to edit files inside the ISO image ? + +File content cannot be altered. But files may be replaced by new copies from +the disk filesystem. + +The main method of manipulating an existing ISO image is to append a session +with a new complete directory tree and the file content of the added or +overwritten files. Depending on the media type you get gaps between sessions +of up to 20 MB. So better try to do all foreseeable changes by one add-on +session. + +##### For which architectures xorriso is able to create bootable images ? + +Currently it supports systems with PC-BIOS for booting from CD, DVD, or BD +media, and from memory sticks or hard disks. The same feature range is +supported for systems with EFI firmware with x86 or ARM processor. + +Further it supports machines with MIPS processor from SGI (Big Endian) +and DEC (Little Endian), and SUN SPARC machines. +(See [libisofs/doc/boot_sectors.txt](https://dev.lovelyhq.com/libburnia/libisofs/raw/HEAD/doc/boot_sectors.txt) +for technical details.) + +Examples how to get an impression of the boot equipment of existing ISO 9660 +images are on the wiki page about xorriso +[commands -report_system_area and -report_el_torito](Reportsystemarea). + +##### How to enable booting from USB stick ? + +In most cases, ISOs are prepared for PC-BIOS to boot the ISOLINUX boot loader. +This boot loader is normally started from CD, DVD or BD media via an El Torito +boot record. But if the ISO image resides on an USB stick or another +hard-disk-like device, then PC-BIOS ignores El Torito and rather expects a +Master Boot Record (MBR). Both boot record types can reside in the same ISO +image. Therefore it is possible to create an MBR that starts the boot image +file of ISOLINUX which is already target of the El Torito boot record. +This kind of MBR is called `isohybrid`. ISOLINUX provides +a program named `isohybrid` to patch existing images, but libisofs can create +an MBR already when producing the ISO image. See in +[manual page of xorriso](http://www.gnu.org/software/xorriso/man_1_xorriso.html) +option `-boot_image` with arguments `isolinux system_area=`, +and `-as mkisofs` option `-isohybrid-mbr`. + +See [Wikipedia on MBR](http://en.wikipedia.org/wiki/Master_boot_record) for +general information about PC-DOS Master Boot Records, and +[ISOLINUX wiki](http://syslinux.zytor.com/wiki/index.php/ISOLINUX) for special +information about ISOLINUX. The wiki example with mkisofs can be performed +as well by help of xorriso option -as mkisofs. + +A similar combination of El Torito and MBR is created by GRUB2 tool +grub-mkrescue. See [homepage of GNU GRUB 2](http://www.gnu.org/software/grub/) +for general information. + +EFI firmware in its native mode boots by El Torito from CD, DVD or BD media, +and by partition table from USB stick or hard disk. Both, El Torito and +partition table, point to a FAT filesystem image, the EFI System Partition. +The partiton table may be either a DOS-style MBR partition table or a +[GUID Partition Table](https://en.wikipedia.org/wiki/GUID_Partition_Table). +The x86 program program in the MBR is ignored by EFI, which rather starts +a program from the FAT directory "\EFI\BOOT". The name of the program file +depends on the processor architecture: BOOTX64.EFI, BOOTIA32.EFI, BOOTARM.EFI, +BOOTAA64.EFI for x86 64 bit, x86 32 bit, ARM 32 bit, and ARM 64 bit, +respectively. + +The boot equipment for other systems may well work from USB stick too. +But libburnia project has no tangible information about this. + +##### What is partition offset feature all about? + +If an MBR is present, then it contains a partition table with up to four +entries. The MBR is located at the very start of the ISO image. By +tradition the first partition should begin only after the range of MBR and +eventual supporting data blocks. On hard disk one often sees partition 1 +starting at byte `63*512`. Further it is tradition that the payload filesystem +is mountable via one of the partitions. + +The isohybrid MBR has its only partition start at byte 0. Thus it is mountable +but does not obey the tradition to begin only after the MBR. +The `grub-mkrescue` MBR on the other hand has partition 1 start at byte 512,i +which makes it unmountable. Only the unpartitioned base device can be mounted. +(On GNU/Linux +e.g. `/dev/sdb` is the base device whereas `/dev/sdb1` is its partition 1.) + +The compromise offered by libisofs is to create a second superblock at +address `16*2048` and to let start partition 1 at this address. The second +superblock leads to a second directory tree which takes into account the +address difference between partition 1 and the base device. So the image +gets mountable via both devices and reserves 32 kB for boot manager software +where it may manipulate and augment the MBR. +(See [Partition Offset Wiki](PartitionOffset) +for examples.) + +There are reports of machines which will not boot from USB stick if +partition offset is 0. + +##### Partition offset bad on Apple ? + +Apple's "Snow Leopard" operating system refuses to mount Debian CD images +with non-zero partition offset. + +The issue is not yet fully understood. For now one has to choose +between mountability on Apple "Snow Leopard" or bootability from USB stick +on Kontron CG2100 "carrier grade server". + +---------------------------------------------------------------------------- +### Developing +---------------------------------------------------------------------------- + +##### Where are the APIs of libburnia libraries described ? + +The decisive references are the inclusion headers of the libraries +``, ``, ``, +and ``. + +Current git versions of these files: +[libburn/libburn.h](https://dev.lovelyhq.com/libburnia/libburn/raw/HEAD/libburn/libburn.h) , +[libisofs/libisofs.h](https://dev.lovelyhq.com/libburnia/libisofs/raw/HEAD/libisofs/libisofs.h) , +[libisoburn/libisoburn.h](https://dev.lovelyhq.com/libburnia/libisoburn/raw/HEAD/libisoburn/libisoburn.h) , +[libisoburn/xorriso.h](https://dev.lovelyhq.com/libburnia/libisoburn/raw/HEAD/xorriso/xorriso.h) + +##### I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ? + +Most appreciated would be a GUI for xorriso which allows to copy files from +a view of the hard disk filesystem to a view of the ISO filesystem, and vice +versa. The xorriso implementation is located inside libisoburn. + +Each option that is described in +[man 1 xorriso](http://www.gnu.org/software/xorriso/man_1_xorriso.html) +can be performed by a corresponding C function that is defined in +[xorriso.h](https://dev.lovelyhq.com/libburnia/libisoburn/raw/HEAD/xorriso/xorriso.h) + +Further there are calls for library startup and shutdown, for problem +handling, and for the interpreters of xorriso's command line interface. +The xorriso API encapsulates calls to libisofs, libburn, and libisoburn. + +An alternative to the xorriso C API is xorriso dialog mode. +[See below](#xorriso_dialog_mode). +The script +[xorriso-tcltk](https://dev.lovelyhq.com/libburnia/libisoburn/raw/HEAD/frontend/xorriso-tcltk) +demonstrates this approach. It is part of the +libisoburn release tarball and of the GNU xorriso tarball. + +The known existing GUIs +[Xfburn](http://goodies.xfce.org/projects/applications/xfburn), +[Brasero](http://projects.gnome.org/brasero/), +[FlBurn](http://flburn.sourceforge.net/) +rather use libisofs and libburn directly. +(Please submit an URI if you want your libburnia GUI application mentioned +here.) + +---------------------------------------------------------------------------- +### Miscellaneous +---------------------------------------------------------------------------- + +##### Where to see examples ? + +[xorriso examples](http://www.gnu.org/software/xorriso/man_1_xorriso.html#EXAMPLES) , +[cdrskin examples](http://scdbackup.sourceforge.net/man_1_cdrskin_devel.html#EXAMPLES) , +[libburner.c a minimal but complete burn program](https://dev.lovelyhq.com/libburnia/libburn/raw/HEAD/test/libburner.c). + + +##### What personalities are supported by xorriso ? + +The name by which xorriso is started may trigger certain features which +normally would need to be enabled by program options. + +xorrisofs starts up in mkisofs emulation mode, which otherwise would have to +be entered by command `-as mkisofs`. + +xorrecord starts up in cdrecord emulation mode, which is normally entered by +command `-as cdrecord`. This emulation is only able to write a single data +track as new session to blank or appendable media. No audio. No multiple +tracks in one session. + +osirrox can copy files from ISO image to disk and to apply option -mount +to one or more of the existing ISO sessions. This is normally enabled by +option `-osirrox on:o_excl_off`. + +##### What is xorriso dialog mode useful for ? + +Dialog mode is initiated if `-dialog on` is among the program arguments. +It can be used to inspect and exploit existing ISO 9660 images or +to explore xorriso's behavior in order to develop the command sequence +for a batch run. + +Frontend programmers may fork xorriso initiating a xorriso dialog session +(`-dialog on -use_readline off -pkt_output on -mark done`), +and interact with it from their own program via pipes connected to +xorriso's stdin and stdout. This is more efficient than forking xorriso +every now and then to perform various commands in order to complete +complex tasks like image size prediction. + +The script +[xorriso-tcltk](https://dev.lovelyhq.com/libburnia/libisoburn/raw/HEAD/frontend/xorriso-tcltk) +demonstrates this approach. It is part of the +libisoburn release tarball and of the GNU xorriso tarball. + +##### Why is every second release missing ? + +Releases have an even third version number. Like 0.5.6 or 1.0.4. +During development the next higher odd number is used. E.g. 0.5.7 or 1.0.5. + +The content of release tarballs does not get changed without changing +their name. The development tarballs of xorriso and cdrskin may change +their content without notice. + +---------------------------------------------------------------------------- +Site maintainer: Do not edit this wiki directly but rather the git version +of `libisoburn/doc/faq.wiki`. When done, paste it into the wiki editor. + diff --git a/doc/partition_offset.wiki b/doc/partition_offset.wiki index 40434b57..d3eca994 100644 --- a/doc/partition_offset.wiki +++ b/doc/partition_offset.wiki @@ -6,7 +6,7 @@ Thus it marks a small part of the device as unclaimed by partitions and available for storing boot loader code. Nevertheless the USB stick is mountable via its overall device file as well as -via the partition device file. E.g. on GNU/Linux: /dev/sdb and /dev/sdb1. +via the partition device file. E.g. on GNU/Linux: `/dev/sdb` and `/dev/sdb1`. This is achieved by two distinct sets of meta-data which refer to the same file content. @@ -19,21 +19,15 @@ extend the unclaimed area into vital blocks of the ISO image. -------------------------------------------------------------------------- -Meanwhile Debian -[http://cdimage.debian.org/cdimage/daily-builds/daily/current/ daily] -and [http://cdimage.debian.org/cdimage/weekly-builds/ weekly] builds make -use of this feature with their bootable ISO images for i386. E.g. -[http://cdimage.debian.org/cdimage/daily-builds/daily/current/i386/iso-cd/debian-testing-i386-netinst.iso debian-testing-i386-netinst.iso]. - According to a -[http://syslinux.zytor.com/archives/2011-March/016201.html thread of march 2011] +[thread of march 2011](http://www.syslinux.org/archives/2011-March/016527.html) on Syslinux mailing list this enabled booting of a Kontron CG2100 server from USB stick, which otherwise failed. Regrettably the feature seems to prevent mounting of ISO 9660 images on Apple "Snow Leopard" systems. At least this is the outcome of a -[http://lists.debian.org/debian-cd/2011/04/msg00029.html debian-cd thread of april 2011]. +[debian-cd thread of april 2011](http://lists.debian.org/debian-cd/2011/04/msg00029.html). -------------------------------------------------------------------------- @@ -46,33 +40,33 @@ Overview: The test image was derived from one year old RIPLinux-9.3-non-X.iso which has an isohybrid MBR. Syslinux version seems to be 3.82. That MBR and the file tree from the mounted RIPLinux image was used to build a new ISO image -with 16 * 2kB partition offset. Isohybrid MBR patching was done by xorriso. +with 16 \* 2kB partition offset. Isohybrid MBR patching was done by xorriso. Details: The first 32 kB of an ISO 9660 image are called System Area and may host any byte pattern. The first 512 bytes of RIPLinux-9.3-non-X.iso contain the isohybrid capable MBR, which will be re-used in this example. -{{{ +``` dd if=RIPLinux-9.3-non-X.iso bs=512 count=1 of=RIPLinux-9.3-non-X.mbr -}}} +``` Normally the isohybrid MBR is provided by the Syslinux -installation under the name isohdp[fp]x*.bin . -E.g. /usr/lib/syslinux/isohdpfx.bin +installation under the name `isohdp[fp]x*.bin` . +E.g. `/usr/lib/syslinux/isohdpfx.bin` The files of the image are made accessible for reading -{{{ +``` mount -o loop RIPLinux-9.3-non-X.iso /mnt -}}} +``` A new ISO image gets composed. The first three lines of arguments are taken from the prescriptions of ISOLINUX wiki and adapted to the names used in RIPLinux-9.3-non-X.iso. -Option -isohybrid-mbr imports the copied MBR and patches it +Option `-isohybrid-mbr` imports the copied MBR and patches it according to rules published by hpa on Syslinux mailing list. -Option -partition_offset 16 causes the first partition to start at 2 kB block +Option `-partition_offset 16` causes the first partition to start at 2 kB block number 16. It also prepares the image to be mountable by this partition, too. -{{{ +``` xorriso -as mkisofs \ -o new_image.iso \ -b boot/isolinux/isolinux.bin -c boot/boot.cat \ @@ -80,80 +74,80 @@ number 16. It also prepares the image to be mountable by this partition, too. -isohybrid-mbr RIPLinux-9.3-non-X.mbr \ -partition_offset 16 \ /mnt -}}} +``` The image was copied onto a USB stick -{{{ +``` dd if=new_image.iso of=/dev/sdc -}}} +``` and plugged into a Debian system. -{{{ +``` fdisk -lu /dev/sdb -}}} +``` yields -{{{ +``` Device Boot Start End Blocks Id System /dev/sdb1 * 64 120831 60384 17 Hidden HPFS/NTFS -}}} +``` -I can mount /dev/sdb and /dev/sdb1 alike: -{{{ +I can mount `/dev/sdb` and `/dev/sdb1` alike: +``` mount /dev/sdb1 /mnt1 mount -o loop /dev/sdb /mnt -}}} --o loop avoids failure with "mount: /dev/sdb already mounted or /mnt busy". +``` +`-o loop` avoids failure with "mount: /dev/sdb already mounted or /mnt busy". A comparison by -{{{ +``` diff -r /mnt /mnt1 -}}} +``` reports no difference. Human readable files look ok. Test-reading all content by -{{{ +``` tar cf - /mnt | wc -}}} +``` yields a reasonable byte count of 60743680 and no errors. The machine boots RIPLinux from this USB stick with no visible problems. -It can then mount /dev/sdb as well as /dev/sdb1. +It can then mount `/dev/sdb` as well as `/dev/sdb1`. The ISO image boots from CD too. Mounting the partition can be simulated with an image file on hard disk by cutting off the first partition_offset blocks of 2 KB: -{{{ +``` dd if=new_image.iso of=partition_image.iso bs=2048 skip=16 mount -o loop partition_image.iso /mnt1 -}}} +``` -------------------------------------------------------------------------- Another test was made with GRUB 2 by downloading -{{{ +``` bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub -}}} +``` Before building GRUB 2, the file -{{{ +``` util/grub-mkrescue.in -}}} +``` was edited to replace in the options of the xorriso command: -{{{ +``` --protective-msdos-label -}}} +``` by -{{{ +``` -partition_offset 16 -no-pad -}}} +``` Then GRUB 2 was built and installed. The resulting image from -{{{ +``` ./grub-mkrescue -o image.iso -}}} +``` was put onto USB stick. It passed the same tests on Debian as above RIPLinux example. It boots to a GRUB prompt. -Due to option -no-pad the image is about 250 kB smaller than -the image produced by original grub-mkrescue. Else it would have grown by +Due to option `-no-pad` the image is about 250 kB smaller than +the image produced by original `grub-mkrescue`. Else it would have grown by about 50 kB. Unpadded ISO images are safe except for burning on CD in TAO mode. @@ -163,11 +157,11 @@ require padding by 300 kB. Burning on DVD or BD needs no such caution. Neither does copying on USB stick or hard disk. -Program fdisk will complain about "different physical/logical" addresses. +Program `fdisk` will complain about "different physical/logical" addresses. This can be silenced by adding option -{{{ +``` -partition_cyl_align on -}}} +``` at the cost of image padding up to the next full MB. E.g. by 402 kB to 2 MB. @@ -187,7 +181,7 @@ preparations. Application: The partition offset feature can be controlled by libisofs API calls -{{{ +``` int iso_write_opts_set_part_offset(IsoWriteOpts *opts, uint32_t block_offset_2k, int secs_512_per_head, @@ -195,9 +189,9 @@ int iso_write_opts_set_part_offset(IsoWriteOpts *opts, int iso_write_opts_set_system_area(IsoWriteOpts *opts, char data[32768], int options, int flag); -}}} +``` or by libisoburn calls -{{{ +``` int isoburn_igopt_set_part_offset(struct isoburn_imgen_opts *opts, uint32_t block_offset_2k, int secs_512_per_head, int heads_per_cyl); @@ -211,9 +205,9 @@ int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *o, int isoburn_igopt_get_system_area(struct isoburn_imgen_opts *o, char data[32768], int *options); -}}} +``` or by xorriso options -{{{ +``` -boot_image any partition_offset=(2kb_block_adr) -boot_image any partition_sec_hd=(number) -boot_image any partition_hd_cyl=(number) @@ -223,7 +217,7 @@ or by xorriso options -partition_hd_cyl (number) \ -partition_sec_hd (number) \ -partition_cyl_align (on|auto|off) ... -}}} +``` As stated above, an offset larger than 16 would expose vital parts of the ISO image as unclaimed space. Values smaller than 16 are not accepted. diff --git a/doc/qemu_xorriso.wiki b/doc/qemu_xorriso.wiki index d457493e..98b40850 100644 --- a/doc/qemu_xorriso.wiki +++ b/doc/qemu_xorriso.wiki @@ -7,12 +7,12 @@ The options follow proposals of Paolo Bonzini on qemu-devel mailing list. My compliments for his patient guidance. Basic knowledge about Debian and qemu was learned from -[http://www.gnu.org/s/hurd/hurd/running/qemu.html GNU Hurd qemu page]. +[GNU Hurd qemu page](http://www.gnu.org/s/hurd/hurd/running/qemu.html GNU Hurd qemu page). ---------------------------------------------------------------------- -This start command works with qemu-1.0-rc3: +This start command works with `qemu-1.0-rc3`: -{{{ +``` $ qemu \ -enable-kvm \ -nographic \ @@ -23,11 +23,11 @@ This start command works with qemu-1.0-rc3: -drive file=/dev/sr0,if=none,id=scsicd,format=raw \ -device virtio-blk-pci,drive=scsicd,logical_block_size=2048,physical_block_size=2048 \ -cdrom .../some_image.iso -}}} +``` -This start command works with qemu-2.1.2: +This start command works with `qemu-2.1.2`: -{{{ +``` $ qemu \ -enable-kvm \ -nographic \ @@ -37,23 +37,23 @@ This start command works with qemu-2.1.2: -hda /dvdbuffer/i386-install.qemu \ -cdrom .../some_image.iso \ -drive file=/dev/sr0,index=2,if=virtio -}}} +``` -With these setups of -drive and -device it is necessary to have a +With these setups of `-drive` and `-device` it is necessary to have a medium in the drive, when qemu gets started. Else it will refuse. The guest system is accessible via ssh and scp at port 5557 of the host system. -'''/dev/sr0''' is the address of the DVD drive which is handed over to the +`/dev/sr0` is the address of the DVD drive which is handed over to the guest system. -'''.../some_image.iso''' may be any readable file which shall serve as +`.../some_image.iso` may be any readable file which shall serve as virtual DVD-ROM. qemu is not happy without such a thing. -'''/dvdbuffer/i386-install.qemu''' is the disk image, where the guest operating +`/dvdbuffer/i386-install.qemu` is the disk image, where the guest operating system was installed by: -{{{ +``` $ qemu-img create /dvdbuffer/i386-install.qemu 8G $ qemu \ -enable-kvm \ @@ -62,92 +62,92 @@ system was installed by: -hda /dvdbuffer/i386-install.qemu \ -cdrom debian-6.0.3-i386-netinst.iso \ -boot d -}}} +``` -Host system of my qemu-1.0-rc3 test is Debian GNU/Linux 6.0.2 amd64. -With qemu-2.1.2 it is Debian 8.1 amd64. +Host system of my `qemu-1.0-rc3` test is Debian GNU/Linux 6.0.2 amd64. +With `qemu-2.1.2` it is Debian 8.1 amd64. Both had access to the Internet when the guest was installed. ---------------------------------------------------------------------- Preparations on guest system Debian GNU/Linux 6.0.3 i386 -There appears no /dev/sr for the passthrough drive. Thus libburn will not +There appears no `/dev/sr` for the passthrough drive. Thus libburn will not list it by its drive search function. One may use it nevertheless. But xorriso will only do so if prefix "mmc:" is used with the address: -{{{ +``` -dev mmc:/dev/vda -}}} -The drive will be listed by libburn if there is a symbolic link /dev/sr* +``` +The drive will be listed by libburn if there is a symbolic link `/dev/sr*` pointing to it. On Debian 6, this link persists only if it is created by an udev rule. -In /lib/udev/rules.d/50-udev-default.rules: -{{{ +In `/lib/udev/rules.d/50-udev-default.rules`: +``` KERNEL=="vda", SYMLINK+="sr1" -}}} +``` libburn on Linux needs rw-permission for the drive's device node. -The virtual device /dev/vda is in group "disk". Usual for CD drives is +The virtual device `/dev/vda` is in group "disk". Usual for CD drives is group "cdrom", to which i (or the Debian installer ?) have added my normal user when i installed the guest system. Like with the symbolic link, such a change persists on Debian 6 only as udev rule. -In /lib/udev/rules.d/91-permissions.rules: -{{{ +In `/lib/udev/rules.d/91-permissions.rules`: +``` KERNEL=="vda", GROUP="cdrom" -}}} +``` This should yield -{{{ +``` lrwxrwxrwx 1 root root 3 Nov 8 11:19 /dev/sr1 -> vda brw-rw---- 1 root cdrom 254, 0 Nov 8 11:19 /dev/vda -}}} +``` xorriso version must be >= 1.1.8 -{{{ +``` $ xorriso -version -}}} +``` tells the versions of its components on stdout: -{{{ +``` ... xorriso version : 1.1.8 ... -}}} +``` If your distro's xorriso is too old, consider to get and build GNU xorriso. -{{{ +``` http://ftpmirror.gnu.org/xorriso/xorriso-1.1.8.tar.gz -}}} +``` Do -{{{ +``` $ tar xzf xorriso-1.1.8.tar.gz $ cd xorriso-1.1.8 $ ./configure && make -}}} +``` Either do as superuser -{{{ +``` # make install -}}} +``` or execute it where it was built as -{{{ +``` $ ./xorriso/xorriso ...arguments... -}}} +``` After compilation, this binary does not depend on files in the build directory. You may move it to any other location. For details about the following xorriso commands, read -{{{ +``` man xorriso man ./xorriso/xorriso.1 -}}} +``` or with the same content -{{{ +``` info xorriso info ./xorriso/xorriso.info -}}} -Or read the [http://scdbackup.sourceforge.net/man_1_xorriso_devel.html online man page of xorriso]. +``` +Or read the [online man page of xorriso](http://scdbackup.sourceforge.net/man_1_xorriso_devel.html). Note that the sequence of xorriso arguments matters. They are commands @@ -158,20 +158,20 @@ sequence. Writing happens automatically if ISO filetree changes are pending at the end of the program run. This is like with other burn tools. -(There is a command -commit for intermediate writing e.g. in dialog +(There is a command `-commit` for intermediate writing e.g. in dialog mode.) ---------------------------------------------------------------------- Listing accessible drives: -{{{ +``` $ xorriso -devices -}}} +``` shows on stdout: -{{{ +``` 0 -dev '/dev/sr0' rwrw-- : 'QEMU ' 'QEMU DVD-ROM' 1 -dev '/dev/sr1' rwrw-- : 'Optiarc ' 'BD RW BD-5300S' -}}} +``` ---------------------------------------------------------------------- @@ -182,11 +182,11 @@ See "Other applicable media types:" further below. ---------------------------------------------------------------------- Inspecting drive and medium: -{{{ +``` $ xorriso -outdev /dev/sr1 -toc -}}} +``` should show on stdout something like -{{{ +``` Drive current: -dev '/dev/sr1' Drive type : vendor 'Optiarc' product 'BD RW BD-5300S' revision '1.04' Media current: DVD-RW sequential recording @@ -198,7 +198,7 @@ should show on stdout something like ISO session : 2 , 135536 , 108385s , ISOIMAGE ISO session : 3 , 250240 , 56202s , ISOIMAGE Media summary: 3 sessions, 271744 data blocks, 531m data, 0 free -}}} +``` ---------------------------------------------------------------------- @@ -207,11 +207,11 @@ Blanking to single session capability: This medium has to be blanked before further writing. For the DAO test, one can save time by fast blanking, which xorriso normally dislikes because the result is not capable of multi-session: -{{{ +``` $ xorriso -outdev /dev/sr1 -blank deformat_quickest -}}} +``` should report on stderr -{{{ +``` ... xorriso : UPDATE : Blanking ( 1.0% done in 2 seconds ) ... @@ -221,7 +221,7 @@ should report on stderr Media current: DVD-RW sequential recording Media status : is blank Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free -}}} +``` Do not worry if the pacifier messages show no neat percentage progress. Some drives report "1.0%" until they are done. Some report "1.0%" after "99%". @@ -230,14 +230,14 @@ after "99%". Writing a DAO session: -Use one or more moderately sized directories as input. Here: /usr/bin. -Terminate the list of -add arguments by argument "--". -It is important to have command -close "on" among the arguments. -{{{ +Use one or more moderately sized directories as input. Here: `/usr/bin`. +Terminate the list of `-add` arguments by argument `--`. +It is important to have command `-close on` among the arguments. +``` $ xorriso -md5 on -outdev /dev/sr1 -close on -add /usr/bin -- -}}} +``` should report on stderr -{{{ +``` ... xorriso : UPDATE : 594 files added in 1 seconds ... @@ -252,7 +252,7 @@ should report on stderr ISO image produced: 52735 sectors Written to media : 52885 sectors at LBA 0 Writing to '/dev/sr1' completed successfully. -}}} +``` Do not worry if there is no progress to see for a few dozen seconds at the beginning. The run will last at least as long as writing of 1 GB would need. @@ -262,14 +262,14 @@ messages at the end of writing. ---------------------------------------------------------------------- Checkreading the result: -{{{ +``` $ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / -- -}}} +``` The word "sorry" sets the severity class of the event message, which is emitted in case of MD5 mismatch. (See man xorriso, "Exception processing".) This should report on stderr -{{{ +``` ... Drive current: -indev '/dev/sr1' Media current: DVD-RW sequential recording @@ -281,11 +281,11 @@ This should report on stderr ... xorriso : UPDATE : 103.7m content bytes read in 35 seconds File contents and their MD5 checksums match. -}}} +``` and the exit value should be 0, if no mismatch was reported. A mismatch message would look like -{{{ +``` ... MD5 MISMATCH: '/usr/bin/ncursesw5-config' ... @@ -293,22 +293,22 @@ A mismatch message would look like xorriso : SORRY : Event triggered by MD5 comparison mismatch xorriso : NOTE : Tolerated problem event of severity 'SORRY' xorriso : NOTE : -return_with SORRY 32 triggered by problem severity SORRY -}}} +``` and the exit value would be non-zero. ---------------------------------------------------------------------- Blanking to multi-session capability: -{{{ +``` $ xorriso -outdev /dev/sr1 -blank as_needed -}}} +``` This will need as long as writing the DVD-RW up to its end. -Blanking option "as_needed" lets xorriso decide what to do in order +Blanking option `as_needed` lets xorriso decide what to do in order to make the medium writable from scratch. With DVD-RW it will decide for --blank "all". +`-blank all`. The report on stderr should end by -{{{ +``` ... xorriso : UPDATE : Blanking ( 98.9% done in 902 seconds ) xorriso : UPDATE : Blanking ( 99.0% done in 903 seconds ) @@ -319,15 +319,15 @@ The report on stderr should end by Media current: DVD-RW sequential recording Media status : is blank Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free -}}} +``` ---------------------------------------------------------------------- Writing multiple sessions (DVD-RW write type Incremental): -This time do not perform command -close "on", so that the medium +This time do not perform command `-close on`, so that the medium stays writable: -{{{ +``` $ xorriso -md5 on -dev /dev/sr1 -add /usr/lib -- ... xorriso : UPDATE : Writing: 105280s 98.6% fifo 0% buf 77% 3.5xD @@ -338,40 +338,40 @@ stays writable: ISO image produced: 106646 sectors Written to media : 106800 sectors at LBA 0 Writing to '/dev/sr1' completed successfully. -}}} +``` Checkread like after the DAO test: -{{{ +``` $ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / -- ... xorriso : UPDATE : 204.0m content bytes read in 63 seconds File contents and their MD5 checksums match. -}}} +``` Writing the second session looks like the first one. Just use another set of input files to get a visible change in the ISO 9660 file tree: -{{{ +``` $ xorriso -md5 on -dev /dev/sr1 -add /usr/bin -- ... Written to media : 53408 sectors at LBA 135488 Writing to '/dev/sr1' completed successfully. -}}} +``` And checkread the whole tree of files (i.e. both sessions): -{{{ +``` $ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / -- ... xorriso : UPDATE : 307.8m content bytes read in 89 seconds File contents and their MD5 checksums match. -}}} +``` At the end of writing a final session, the medium can be closed. It will not take more writing unless it gets blanked or formatted. -So use command -close "on" to demand closing after writing. -{{{ +So use command `-close on` to demand closing after writing. +``` $ xorriso -md5 on -dev /dev/sr1 -close on -add /usr/sbin -- ... Written to media : 16160 sectors at LBA 195056 Writing to '/dev/sr1' completed successfully. -}}} +``` Checkread -{{{ +``` $ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / -- ... Media current: DVD-RW sequential recording @@ -380,25 +380,25 @@ Checkread ... xorriso : UPDATE : 337.7m content bytes read in 97 seconds File contents and their MD5 checksums match. -}}} +``` ----------------------------------------------------------------------------- If the drive tray can move by itself, you may now eject the medium: -{{{ +``` $ xorriso -outdev /dev/sr1 -eject all -}}} +``` ----------------------------------------------------------------------------- Other applicable media types: These test runs for sequential DVD-RW may be performed on CD-RW with the -same xorriso arguments. Be aware that /usr/lib will hardly fit on a CD. +same xorriso arguments. Be aware that `/usr/lib` will hardly fit on a CD. So choose smaller directories for CD. --blank "deformat_quickest" addresses a peculiarity of DVD-RW. -It will work on other media like -blank "fast". +`-blank deformat_quickest` addresses a peculiarity of DVD-RW. +It will work on other media like `-blank fast`. Except the blanking runs, the tests may also be performed on BD-R, DVD-R, DVD+R, and CD-R. But you would waste two media by this. @@ -407,7 +407,7 @@ The first session on CD will always be written with write type SAO, further sessions will be written with TAO. CD-R and DVD-R have a simulation mode. It can be enabled by xorriso -command -dummy "on", but of course it will not produce readable results. +command `-dummy on`, but of course it will not produce readable results. So this simulation is usable only for first sessions on blank media. ----------------------------------------------------------------------------- @@ -416,7 +416,7 @@ Now for formatted overwritable media: All blank, write and check runs of above tests "Writing multiple sessions" may also be performed with DVD+RW, DVD-RAM, formatted DVD-RW, and BD-RE. -There is no way to close formatted media. The command -close "on" +There is no way to close formatted media. The command `-close on` gets silently ignored. The write methods and states of formatted media differ from those of @@ -438,20 +438,20 @@ automatically. Just start a normal write run. DVD-RAM are sold formatted. xorriso treats overwritable media with a valid ISO 9660 filesystem as appendable media. To make then writable from scratch, apply --blank "as_needed", which will actually write a few bytes into the PVD +`-blank as_needed`, which will actually write a few bytes into the PVD (superblock) of the ISO filesystem to invalidate it. -De-formatting is only possible with DVD-RW. E.g. by -blank "deformat". +De-formatting is only possible with DVD-RW. E.g. by `-blank deformat`. ----------------------------------------------------------------------------- Format DVD-RW for overwriting without intermediate blanking, or format BD-R for Defect Management: -{{{ +``` $ xorriso -outdev /dev/sr1 -format as_needed -}}} +``` should report on stderr -{{{ +``` ... xorriso : UPDATE : Formatting ( 99.0% done in 912 seconds ) Formatting done @@ -460,15 +460,15 @@ should report on stderr Media current: DVD-RW restricted overwrite Media status : is blank Media summary: 0 sessions, 0 data blocks, 0 data, 4488m free -}}} +``` As with blanking, one should not worry if the progress messages show unplausible percentages. Some drives are more equal than others. -Formatting is said to be much stress to the medium. -format option -"as_needed" applies it only to yet unformatted media. +Formatting is said to be much stress to the medium. `-format` option +`as_needed` applies it only to yet unformatted media. -When performing above write tests, take care to use -blank "as_needed" -rather than -blank "deformat_quickest". Else you will get a sequential +When performing above write tests, take care to use `-blank as_needed` +rather than `-blank deformat_quickest`. Else you will get a sequential unformatted DVD-RW rather than a formatted DVD-RW which xorriso is willing to write from scratch. There is no use in a separate "DAO" test on overwritable media anyway. @@ -478,12 +478,12 @@ There is no use in a separate "DAO" test on overwritable media anyway. Change the formatted size of a BD-RE: First learn about formatted size and proposals of other sizes. -(One can issue own wishes, too. See in man xorriso, command -format.) -{{{ +(One can issue own wishes, too. See in man xorriso, command `-format`.) +``` $ xorriso -outdev /dev/sr1 -list_formats -}}} +``` should tell on stdout -{{{ +``` ... Format status: formatted, with 23610.0 MiB BD Spare Area: 0 blocks consumed, 131072 blocks available @@ -493,26 +493,26 @@ should tell on stdout Format idx 3 : 30h , 11564032s , 22586.0 MiB Format idx 4 : 30h , 12088320s , 23610.0 MiB Format idx 5 : 31h , 12219392s , 23866.0 MiB -}}} +``` So lets go back from 23610.0 MiB to the default size of 23098.0 MiB -{{{ +``` $ xorriso -outdev /dev/sr1 -format by_index_2 -blank as_needed ... Media summary: 2 sessions, 105470 data blocks, 206m data, 22.4g free -}}} +``` Although the heads of the old sessions might remain readable after --format, better do not rely on this and a append -blank "as_needed" to +`-format`, better do not rely on this and a append `-blank as_needed` to avoid any data corruption. If you want to keep the data, then make at least a checkread run. Check whether the size has changed: -{{{ +``` $ xorriso -outdev /dev/sr1 -list_formats -}}} +``` should tell on stdout -{{{ +``` ... Format status: formatted, with 23098.0 MiB BD Spare Area: 0 blocks consumed, 393216 blocks available ... -}}} +```