\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename xorriso-dd-target.info @settitle GNU xorriso-dd-target 1.5.3 @c %**end of header @c @c man-ignore-lines begin @dircategory Archiving @direntry * Xorriso-dd-target: (xorriso-dd-target). Device evaluator and disk image copier for GNU/Linux @end direntry @c man-ignore-lines end @c @c Notes about embedded man page: @c This texinfo code contains the necessary info to produce a man page @c which resembles much the version of xorriso.1 from which this code @c was originally derived in march 2010. @c One can produce the man page by applying the following rules: @c The first line gets discarded. @c Line start "@c man " will become "", the remainder is put out unaltered. @c Lines "@*" will be converted to ".br" @c "@c man-ignore-lines N" will discard N following lines. @c "@c man-ignore-lines begin" discards all following lines @c up to "@c man-ignore-lines end". @c Line blocks of "@menu" "@end menu" will be discarded. @c "@item word words" becomes "\fBword\fR words". @c @b{...}, @command{...}, @dfn{...}, @emph{...}, @strong{...} @c get mapped to \fB...\fR . @c @abbr{...}, @code{...}, @file{...}, @i{...}, @option{...}, @r{...}, @c @ref{...}, @samp{...},@var{...}, get mapped to ... . @c @ref{...}, @xref{...} get mapped to empty text. @c @email{...} gets mapped to <...> . @c Mapped {...} content is subject to the rules except {...} mapping. @c @minus{} will become "-". @c @@ , @{, @} will get stripped of their first @. @c Other lines which begin by "@" will be discarded. @c In lines not stemming from "@c man", "\" becomes "\\" @c "-" which are not preceded by an uneven number of "\" will get @c prepended one "\". @c @c @c man .\" Hey, EMACS: -*- nroff -*- @c man .\" @c man .\" IMPORTANT NOTE: @c man .\" @c man .\" The original of this file is kept in xorriso/xorriso-dd-target.texi @c man .\" This here was generated by program xorriso/make_xorriso_1 @c man .\" @c man .\" @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) @c man .TH XORRISO-DD-TARGET 1 "Version 1.5.3, Jan 6, 2020" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @c man .\" .nh disable hyphenation @c man .\" .hy enable hyphenation @c man .\" .ad l left justify @c man .\" .ad b justify to both left and right margins @c man .\" .nf disable filling @c man .\" .fi enable filling @c man .\" .br insert line break @c man .\" .sp insert n+1 empty lines @c man .\" for manpage-specific macros, see man(7) @c man .nh @c man-ignore-lines begin @copying xorriso-dd-target - Device evaluator and disk image copier for GNU/Linux Copyright @copyright{} 2019 Thomas Schmitt @quotation Permission is granted to distribute this text freely. @end quotation @end copying @c man-ignore-lines end @titlepage @title Manual of GNU xorriso companion xorriso-dd-target 1.5.3 @author Thomas Schmitt @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top xorriso-dd-target 1.5.3 @c man-ignore-lines 1 @c man .SH NAME xorriso-dd-target - Device evaluator and disk image copier for GNU/Linux @end ifnottex @menu * Overview:: Overview * Options:: Options * Examples:: Examples * Files:: Files * Seealso:: See also * Bugreport:: Reporting bugs * Legal:: Author, Copyright, Credits * CommandIdx:: Alphabetic Option List * ConceptIdx:: Alphabetic List of Concepts and Objects @end menu @node Overview, Options, Top, Top @chapter Overview @c man .SH SYNOPSIS @c man .B xorriso-dd-target @c man [ options ] [ device_names ] @c man .br @c man .SH DESCRIPTION @c man .PP @command{xorriso-dd-target} evaluates block devices of the Linux kernel whether they are suitable targets for a disk image file and optionally copies the image file to one of them. @* It is specialized on the device names of the @strong{Linux kernel} and uses the capabilities of util-linux program @strong{lsblk}. Therefore it refuses to run on non-Linux kernels. @* @sp 1 @c man .PP The main purpose of xorriso-dd-target is to inspect the device files of disk-like storage media and to judge whether they look like removable devices with disposable content. @* If a single plausible candidate is detected, then the program is willing to copy a disk image file onto it. This will overwrite or make inaccessible the previous partition table and all previous data content of the target device. @* @strong{Superuser power} is normally needed for filesystem type identification, for possible unmounting, and for possible image writing. Option @strong{-with_sudo} offers a way to gain this power only for those tasks and to run the program elsewise with a normal user's power. @* If a particular disk image file is intended as copy source, then its path should be given by option -image_file, so that its size can be used as decision criterion. @sp 1 @c man .PP Following are use case descriptions with examples: @c man .br @c man - List plain device names @c man .br @c man - List all devices with reasoning @c man .br @c man - Evaluate particular given devices @c man .br @c man - Detect intended device by plugging @c man .br @c man - Write image to an advised device @c man .br @c man - Show commands for writing to a not advised device @c man .br @menu * Simplenames:: List plain device names * Listall:: List all devices with reasoning * Givendevices:: Evaluate particular given devices * Plugtest:: Detect intended device by plugging * Dowrite:: Write image to an advised device * Unwise:: Show commands for writing to a not advised device * Reasons:: Alphabetical list of positive and negative reasons @end menu @c man .SS @node Simplenames, Listall, Overview, Overview @chapter List plain device names @c man \fBList plain device names:\fR @c man .br @cindex Use case, list advisable device names The most simple and most boring use case is a program run without device names and without options -list_all, -plug_test, -DO_WRITE, -dummy_force. It prints on standard output (stdout) only the names of advisable devices without "/dev/" prefix. One name per line and without any reasoning text. @* The possible sudo password prompt, the message line about sudo, and the empty line after it do not go to stdout. @* Example: @* $ xorriso-dd-target -with_sudo @* Testing sudo to possibly get password prompting done now: @* [sudo] password for thomas: @* sudo /bin/lsblk seems ok. sde @c man .SS @node Listall, Givendevices, Simplenames, Overview @chapter List all devices with reasoning @c man \fBList all devices with reasoning:\fR @c man .br @cindex Use case, list all devices with reasoning For the more curious user, there is option @strong{-list_all} which prints the evaluation of each disk-like device that is listed by program lsblk. Optical drives, floppy disks, RAM block devices, loop devices are excluded, though. @* Each device is shown by one line of the form @* name : advice : reasoning : info @* @strong{name} is the device name without "/dev/" prefix. @* @strong{advice} is either "YES" or "NO". "YES" indicates that the device appears to be pluggable disk-like, not used as system disk or sincere data storage, and - if tested - of sufficient or plausible size. @* @strong{reasoning} is a blank separated list of words with either suffix '+' for an inviting device property or '-' for a prohibitive property. Normally a single '-' reason disqualifies the device from being advisable. Only if option -look_for_iso is given, a reason "has_XYZ-" can be overridden by the presence of an ISO 9660 filesystem on the device. @* @strong{info} is composed from VENDOR and MODEL as told by lsblk. @* Option @strong{-list_long} causes with each line an additional listing of the information provided by lsblk which led to the shown reasons. @* Example: @* $ xorriso-dd-target -with_sudo -list_all @* ... @* sda : NO : not_usb- has_vfat+ has_ext4- : ATA Samsung SSD 850 @* sdb : NO : not_usb- has_swap- has_ext4- : ATA WDC WD20EFRX-68A @* sdc : YES : usb+ has_iso9660+ has_vfat+ : Intenso Ultra Line @* sdd : NO : usb+ has_iso9660+ has_vfat+ has_ext2- : SanDisk Cruzer @c man .SS @node Givendevices, Plugtest, Listall, Overview @chapter Evaluate particular given devices @c man \fBEvaluate particular given devices:\fR @c man .br @cindex Use case, evaluate particular given devices If @strong{device names} are given instead of option -list_all, then only these devices are inspected. Their result gets listed without the ": info" part, unless option @strong{-with_vendor_model} is given. @* Device names must not begin by '-' and must be single words composed of the characters [A-za-z0-9_/-]. They should not contain '/'. E.g. 'sdc' is valid, '/dev/sdc' is not valid. @* If one of the given device names gets not advised, the exit value is 1. @* It makes few sense to give device names which are not listed by -list_all. @* Examples: @* $ xorriso-dd-target -with_sudo sdc @* ... @* sdc : YES : usb+ has_iso9660+ has_vfat+ @* $ xorriso-dd-target -with_sudo -with_vendor_model sdc @* ... @* sdc : YES : usb+ has_iso9660+ has_vfat+ : Intenso Ultra Line @* $ xorriso-dd-target sdc @* sdc : NO : usb+ no_fs_while_not_su- @c man .SS @node Plugtest, Dowrite, Givendevices, Overview @chapter Detect intended device by plugging @c man \fBDetect intended device by plugging:\fR @c man .br @cindex Use case, detect intended device by plugging Option @strong{-plug_test} triggers an interactive method to unambiguously determine the intended target device candidate. It consists of 2 or 3 steps. @* @strong{Step 1} is to have the intended storage device unplugged and to confirm this by pressing the Enter key at the program's prompt. The program will then assess the list of not wanted devices. @* @strong{Step 2} is to plug in the intended storage device and to confirm this by pressing the Enter key a second time. The program will wait up to 10 seconds for a disk-like storage device which is not in the list of not wanted devices. The user may wait with key pressing until the device blinking looks like it is ready. @* Only if a single new device is found, the program will go on as if a single device name was given. Option -list_all and any device names given as arguments will be ignored. @* @strong{Step 3} happens only if options -DO_WRITE or -dummy_force are given. The program asks for a final input of the word 'yes' before real or simulated writing begins. @* Example: @* $ xorriso-dd-target -with_sudo -plug_test @* ... @* Caused by option -plug_test: Attempt to find the desired device by watching it appear after being plugged in. @* Step 1: @* Please make sure that the desired target device is plugged _out_ now. @* If it is currently plugged in, make sure to unmount all its fileystems @* and then unplug it. @* Press the Enter key when ready. @* @* Found and noted as _not_ desired: sda sdb sdc @* Step 2: @* Please plug in the desired target device and then press the Enter key. @* @* Waiting up to 10 seconds for a new device to be listed ... found: sdd @* Now waiting 5 seconds to let it settle ......... @* Found and noted as desired device: sdd @* @* sdd : NO : usb+ has_iso9660+ has_vfat+ has_ext2- : SanDisk Cruzer @c man .SS @node Dowrite, Unwise, Plugtest, Overview @chapter Write image to an advised device @c man \fBWrite image to an advised device:\fR @c man .br @cindex Use case, write image to an advised device Only if option @strong{-DO_WRITE} is given and -list_all is not, and if exactly one advisable device is listed, it really gets overwritten by the file content of the given -image_file. In this case the exit value is zero if writing succeeded, non-zero else. @* Option @strong{-dummy} prevents this kind of real action and rather shows the planned umount and dd commands on stdout. @* Example: @* $ xorriso-dd-target -with_sudo -plug_test -DO_WRITE \ @* -image_file debian-live-10.0.0-amd64-xfce.iso @* ... sudo messages and above plug test steps 1 and 2 ... @* @* sde : YES : usb+ has_iso9660+ has_vfat+ @* Step 3: @* Last chance to abort. Enter the word 'yes' to start REAL WRITING. @* yes @* Looking for mount points of sde: @* /dev/sde1 on /mnt/iso type iso9660 (ro,relatime) @* /dev/sde2 on /mnt/fat type vfat (rw,...,errors=remount-ro) @* Unmounted: /dev/sde1 @* Unmounted: /dev/sde2 @* Performing: @* sudo /bin/dd if='debian-live-10.0.0-amd64-xfce.iso' of=/dev/sde bs=1M status=progress oflag=dsync ; sync @* ... dd messages ... @c man .SS @node Unwise, Reasons, Dowrite, Overview @chapter Show commands for writing to a not advised device @c man \fBShow commands for writing to a not advised device:\fR @c man .br @cindex Use case, show commands for writing to a not advised device There should be no way to convince xorriso-dd-target of writing to a target device which it does not deem advisable. Please report any set of arguments that can be misused for that. @* The outmost complicity to potentially unwise actions is offered by option @strong{-dummy_force}. If given together with a single device name or with option -plug_test it will act like -dummy -DO_WRITE with this device, even if it looks not advisable. I.e. it will show the shell commands which the program does not dare to perform. @* Example: @* $ xorriso-dd-target -with_sudo -list_long -dummy_force sdd \ @* -image_file debian-live-10.0.0-amd64-xfce.iso @* ... @* sdd : NO : usb+ has_iso9660+ has_vfat+ has_ext2- @* NAME SIZE FSTYPE TRAN LABEL @* sdd 3.8G iso9660 usb d-live 9.5.0 xf i386 @* |-sdd1 1.9G iso9660 d-live 9.5.0 xf i386 @* |-sdd2 320K vfat @* `-sdd3 512M ext2 @* @* Overriding any advice because of -dummy_force @* Looking for mount points of sdd: @* /dev/sdd1 on /mnt/iso type iso9660 (ro,relatime) @* /dev/sdd2 on /mnt/fat type vfat (rw,...,errors=remount-ro) @* /dev/sdd3 on /mnt/ext type ext2 (rw,relatime) @* AGAINST THE ADVICE BY THIS PROGRAM, a daring user could do: @* sudo /bin/umount /dev/sdd1 @* sudo /bin/umount /dev/sdd2 @* sudo /bin/umount /dev/sdd3 @* sudo /bin/dd if='debian-live-10.0.0-amd64-xfce.iso' of=/dev/sdd bs=1M status=progress oflag=dsync ; sync @* BE SMART. BE CAUTIOUS. BEWARE. @c man .SS @node Reasons, Options, Unwise, Overview @chapter Alphabetical list of positive and negative reasons @c man \fBAlphabetical List of positive and negative reasons:\fR @c man .br @cindex Reasons, list of As stated with use case "List all devices", @strong{reasons} are words with either suffix '+' for an inviting device property or '-' for a prohibitive property. @* Normally a single '-' reason disqualifies the device from being advisable. @c man .br @c man .PP @section Reasons @strong{has_XYZ-} @* A filesystem of type XYZ is detected on base device or partition and is spoiling the impression of a device with disposable content. @* @strong{has_iso9660+} @* An ISO 9660 filesystem is detected. @* @strong{has_vfat+} @* A FAT (MS-DOS-like) filesystem is detected. @* @strong{look_for_iso++} @* Option -look_for_iso is given and an ISO 9660 filesystem is detected. This reason overrides any "has_XYZ-" reason. @* @strong{looks_like_cd_drive-} @* A given device name looks like the name of an optical drive: sr[0-9]*. Use program @strong{xorrecord} for this kind of devices. @* @strong{looks_like_disk_partition-} @* A given device name looks like the name of a partition. Expected are names of base devices, like "sde", not of their partitions, like "sde1". @* @strong{looks_like_floppy-} @* A given device name looks like the name of a floppy disk drive: fd[0-9]*. @* @strong{looks_like_loopdev-} @* A given device name looks like the name of a loop device: loop[0-9]*. @* @strong{looks_like_ramdev-} @* A given device name looks like the name of a RAM block device: zram[0-9]*. @* @strong{lsblk_no_size-} @* A size test is given by -max_size, -min_size, or -image_file but the size of the device cannot be inquired by lsblk. This is supposed to happen only with given inappropriate device names. @* @strong{mmcblk+} @* The device name looks like a directly connected memory card. @* @strong{name_with_slash-} @* A given device name contains '/' characters. @* @strong{no_bus_info-} @* The device is not a memory card and lsblk reports nothing about the way how it is connected to the computer. @* @strong{no_fs_while_not_su-} @* No filesystem is reported by lsblk and the program does not believe to have run it with superuser powers. There is the risk that lsblk silently failed to detect existing filesystems. @* @strong{no_iso9660-} @* Option -look_for_iso is given but no ISO 9660 filesystem is detected. @* @strong{not_usb-} @* The device is not a memory card and lsblk reports that it is connected by something other than USB. @* @strong{size_too_large-} @* Option -max_size is given with a size smaller than the size of the device. @* @strong{size_too_small-} @* Option -min_size or -image_file is given with size or file size larger than the size of the device. @* @strong{usb+} @* The device is reported by lsblk to be connected via USB. @* @c man .SS @node Options, Examples, Overview, Top @chapter Options @cindex xorriso-dd-target, options @c man .br @c man .SH OPTIONS @c man .br @c man .PP @c man .TP @table @asis @item -plug_test @kindex -plug_test detect target device plugging @cindex Target device, detect by plugging, @minus{}plug_test Find the target device by asking the user to press the Enter key when the desired target is _not_ plugged in, to then plug it in, and to press Enter again. @* This overrides device names and option -list_all. The found device is then shown with advice, vendor, and model. @* Option -DO_WRITE is obeyed if given. In this case, the word 'yes' has to be entered to let unmounting and writing begin. @c man .TP @item -list_all @kindex -list_all print list of disk devices @cindex Disk devices, print list, -list_all Print list of all found devices with advice, vendor and model. One per line. Ignore any device names. Ignore -DO_WRITE. @c man .TP @item -list_long @kindex -list_long print extra device info @cindex Device info, print extra, -list_long After each result line, which shows reasons, add an additional listing of the information provided by lsblk which led to the reasons and add an empty line. @c man .TP @item -with_vendor_model @kindex -with_vendor_model add drive info to advice @cindex Drive info, add to advice, -with_vendor_model Print vendor and model with each submitted device name. @c man .TP @item -max_size n[M|G|T] @kindex -max_size set size limit for device @cindex Device size, set limit, -max_size Set the upper byte size limit for advisable devices. Plain numbers get rounded down to full millions. As suffix are recognized: M = million, G = billion, T = trillion. @* Be generous to avoid problems with GB < GiB. @c man .TP @item -min_size n[M|G|T] @kindex -min_size set size limit for device @cindex Device size, set limit, -min_size Set the lower byte size limit for advisable devices. After processing like with -max_size, one million gets added to the size limit. @c man .TP @item -look_for_iso @kindex -look_for_iso demand presence of ISO 9660 @cindex ISO 9660, demand presence on target, @minus{}look_for_iso Demand presence of an ISO 9660 filesystem. If so, then any further filesystem type is acceptable on that device. @* If this option is missing, only ISO 9660 and VFAT filesystems are accepted. @c man .TP @item -with_sudo @kindex -with_sudo run lsblk, umount, dd by sudo @cindex lsblk, umount, dd, run by sudo, -with_sudo Run 'lsblk -o FSTYPE' by sudo. If no filesystems are detected on a device while the program has no superuser power, then the device is not advised. Option -with_sudo avoids this refusal without the need to run the whole program as superuser. @* If -DO_WRITE -with_sudo is given, then the programs umount and dd will be run by sudo, too. @c man .TP @item -image_file PATH @kindex -image_file set path of disk image file @cindex disk image file, set path, -image_file Set the path of the image file which shall be written to a device. Its size will be set as -min_size. @c man .TP @item -DO_WRITE @kindex -DO_WRITE write image file to device @cindex disk image file, write to device, -DO_WRITE Write the given -image_file to the one advisable device that is found. If more than one such device is found, then they get listed but no writing happens. @* In this case, to get a real write run, consider unplugging unneeded devices, or using option -plug_test, or a re-run with one of the advised device names as additional argument. @c man .TP @item -no_pacifier @kindex -no_pacifier do not show dd progress @cindex dd progress, do not show, -no_pacifier Do not use dd options to print progress messages and to perform synchronized output. These options are used by default if program dd offers progress messages. @c man .TP @item -dummy @kindex -dummy report but do not perform @cindex only report, do not perform, -dummy Report the -DO_WRITE actions but do not perform them. @c man .TP @item -dummy_force @kindex -dummy_force show raw copy commands @cindex raw copy commands, show, -dummy_force If a single device name is given, do a run of -dummy -DO_WRITE even against the advice of this program. This probably shows you ways to shoot your own foot. @c man .TP @item -version @kindex -version print version text to stdout @cindex version text, print to stdout, -version Print the program name, version text, and timestamp to stdout and then end the program. @c man .TP @item -help @kindex -help print help text to stdout @cindex help text, print to stdout, -help Print the help text to stdout and then end the program. @end table @node Examples, Files, Options, Top @chapter Examples @c man .SH EXAMPLES Examples are given in the above description of use cases. @node Files, Seealso, Examples, Top @chapter Files @c man .SH FILES For now, no files are defined for configuration. @c man .SH SEE ALSO @c man .BR lsblk(8), @c man .BR umount(8), @c man .BR dd(1), @c man .BR xorrecord(1) @c man-ignore-lines begin @node Seealso, Bugreport, Files, Top @chapter See also lsblk(8), sudo(8), umount(8), dd(1), xorrecord(1) @c man-ignore-lines end @c man .SH BUGS @node Bugreport, Legal, Seealso, Top @chapter Reporting bugs @cindex Bugs, reporting @cindex Problems, reporting To report bugs, request help, or suggest enhancements for @command{xorriso-dd-target}, please send electronic mail to the public list @email{bug-xorriso@@gnu.org}. If more privacy is desired, mail to @email{scdbackup@@gmx.net}. @* @sp 1 Please describe what you expect the program to do, the program arguments which you used, the messages of @command{xorriso-dd-target}, and the undesirable outcome of your program run. @* @sp 1 Expect to get asked more questions before solutions can be proposed. @c man .SH AUTHOR @node Legal, CommandIdx, Bugreport, Top @chapter Author, Copyright, Credits @section Author Thomas Schmitt @* for libburnia-project.org @c man .SH COPYRIGHT @section Copyright Copyright (c) 2019 Thomas Schmitt @* Permission is granted to distribute this text freely. It shall only be modified in sync with the technical properties of xorriso-dd-target. If you make use of the license to derive modified versions of xorriso-dd-target then you are entitled to modify this text under that same license. @c man .SH CREDITS @section Credits @command{xorriso-dd-target} is developed in cooperation with Nio Wiklund alias sudodus. @c man-ignore-lines begin @node CommandIdx, ConceptIdx, Legal, Top @chapter Alphabetic Options List @printindex ky @node ConceptIdx, Top, CommandIdx, Top @chapter Alphabetic List of Concepts and Objects @printindex cp @c man-ignore-lines end @bye