1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
\r
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
\r
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
\r
6 <meta name="generator" content="AsciiDoc 8.5.2" />
\r
7 <title>grml2usb(8)</title>
\r
8 <style type="text/css">
\r
10 p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
\r
12 border: 1px solid red;
\r
17 margin: 1em 5% 1em 5%;
\r
22 text-decoration: underline;
\r
42 h1, h2, h3, h4, h5, h6 {
\r
44 font-family: sans-serif;
\r
46 margin-bottom: 0.5em;
\r
51 border-bottom: 2px solid silver;
\r
69 border: 1px solid silver;
\r
74 margin-bottom: 0.5em;
\r
88 font-family: sans-serif;
\r
94 span#revnumber, span#revdate, span#revremark {
\r
95 font-family: sans-serif;
\r
99 font-family: sans-serif;
\r
101 border-top: 2px solid silver;
\r
102 padding-top: 0.5em;
\r
107 padding-bottom: 0.5em;
\r
109 div#footer-badges {
\r
111 padding-bottom: 0.5em;
\r
116 margin-bottom: 1.5em;
\r
118 div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
\r
119 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
\r
120 div.admonitionblock {
\r
122 margin-bottom: 1.5em;
\r
124 div.admonitionblock {
\r
126 margin-bottom: 2.0em;
\r
131 div.content { /* Block element content. */
\r
135 /* Block element titles. */
\r
136 div.title, caption.title {
\r
138 font-family: sans-serif;
\r
142 margin-bottom: 0.5em;
\r
148 td div.title:first-child {
\r
151 div.content div.title:first-child {
\r
154 div.content + div.title {
\r
158 div.sidebarblock > div.content {
\r
159 background: #ffffee;
\r
160 border: 1px solid silver;
\r
164 div.listingblock > div.content {
\r
165 border: 1px solid silver;
\r
166 background: #f4f4f4;
\r
170 div.quoteblock, div.verseblock {
\r
171 padding-left: 1.0em;
\r
172 margin-left: 1.0em;
\r
174 border-left: 5px solid #dddddd;
\r
178 div.quoteblock > div.attribution {
\r
179 padding-top: 0.5em;
\r
183 div.verseblock > div.content {
\r
186 div.verseblock > div.attribution {
\r
187 padding-top: 0.75em;
\r
190 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
\r
191 div.verseblock + div.attribution {
\r
195 div.admonitionblock .icon {
\r
196 vertical-align: top;
\r
199 text-decoration: underline;
\r
201 padding-right: 0.5em;
\r
203 div.admonitionblock td.content {
\r
204 padding-left: 0.5em;
\r
205 border-left: 3px solid #dddddd;
\r
208 div.exampleblock > div.content {
\r
209 border-left: 3px solid #dddddd;
\r
210 padding-left: 0.5em;
\r
213 div.imageblock div.content { padding-left: 0; }
\r
214 span.image img { border-style: none; }
\r
215 a.image:visited { color: white; }
\r
219 margin-bottom: 0.8em;
\r
224 font-style: normal;
\r
227 dd > *:first-child {
\r
232 list-style-position: outside;
\r
235 list-style-type: decimal;
\r
238 list-style-type: lower-alpha;
\r
241 list-style-type: upper-alpha;
\r
244 list-style-type: lower-roman;
\r
247 list-style-type: upper-roman;
\r
250 div.compact ul, div.compact ol,
\r
251 div.compact p, div.compact p,
\r
252 div.compact div, div.compact div {
\r
254 margin-bottom: 0.1em;
\r
257 div.tableblock > table {
\r
258 border: 3px solid #527bbd;
\r
260 thead, p.table.header {
\r
261 font-family: sans-serif;
\r
273 /* Because the table frame attribute is overriden by CSS in most browsers. */
\r
274 div.tableblock > table[frame="void"] {
\r
275 border-style: none;
\r
277 div.tableblock > table[frame="hsides"] {
\r
278 border-left-style: none;
\r
279 border-right-style: none;
\r
281 div.tableblock > table[frame="vsides"] {
\r
282 border-top-style: none;
\r
283 border-bottom-style: none;
\r
289 margin-bottom: 0.8em;
\r
292 padding-bottom: 15px;
\r
294 dt.hdlist1.strong, td.hdlist1.strong {
\r
298 vertical-align: top;
\r
299 font-style: normal;
\r
300 padding-right: 0.8em;
\r
304 vertical-align: top;
\r
306 div.hdlist.compact tr {
\r
312 background: yellow;
\r
315 .footnote, .footnoteref {
\r
319 span.footnote, span.footnoteref {
\r
320 vertical-align: super;
\r
324 margin: 20px 0 20px 0;
\r
325 padding: 7px 0 0 0;
\r
328 #footnotes div.footnote {
\r
334 border-top: 1px solid silver;
\r
344 div#footer-badges { display: none; }
\r
348 margin-bottom: 2.5em;
\r
353 font-family: sans-serif;
\r
357 margin-bottom: 0.1em;
\r
360 div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
\r
376 /* Workarounds for IE6's broken and incomplete CSS2. */
\r
378 div.sidebar-content {
\r
379 background: #ffffee;
\r
380 border: 1px solid silver;
\r
383 div.sidebar-title, div.image-title {
\r
385 font-family: sans-serif;
\r
388 margin-bottom: 0.5em;
\r
391 div.listingblock div.content {
\r
392 border: 1px solid silver;
\r
393 background: #f4f4f4;
\r
397 div.quoteblock-attribution {
\r
398 padding-top: 0.5em;
\r
402 div.verseblock-content {
\r
405 div.verseblock-attribution {
\r
406 padding-top: 0.75em;
\r
410 div.exampleblock-content {
\r
411 border-left: 3px solid #dddddd;
\r
412 padding-left: 0.5em;
\r
415 /* IE6 sets dynamically generated links as visited. */
\r
416 div#toc a:visited { color: blue; }
\r
418 <script type="text/javascript">
\r
420 window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}
\r
421 var asciidoc = { // Namespace.
\r
423 /////////////////////////////////////////////////////////////////////
\r
424 // Table Of Contents generator
\r
425 /////////////////////////////////////////////////////////////////////
\r
427 /* Author: Mihai Bazon, September 2002
\r
428 * http://students.infoiasi.ro/~mishoo
\r
430 * Table Of Content generator
\r
433 * Feel free to use this script under the terms of the GNU General Public
\r
434 * License, as long as you do not remove or alter this notice.
\r
437 /* modified by Troy D. Hanson, September 2006. License: GPL */
\r
438 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
\r
440 // toclevels = 1..4.
\r
441 toc: function (toclevels) {
\r
443 function getText(el) {
\r
445 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
446 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
\r
448 else if (i.firstChild != null)
\r
449 text += getText(i);
\r
454 function TocEntry(el, text, toclevel) {
\r
457 this.toclevel = toclevel;
\r
460 function tocEntries(el, toclevels) {
\r
461 var result = new Array;
\r
462 var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
\r
463 // Function that scans the DOM tree for header elements (the DOM2
\r
464 // nodeIterator API would be a better technique but not supported by all
\r
466 var iterate = function (el) {
\r
467 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
468 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
\r
469 var mo = re.exec(i.tagName);
\r
470 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
\r
471 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
\r
481 var toc = document.getElementById("toc");
\r
482 var entries = tocEntries(document.getElementById("content"), toclevels);
\r
483 for (var i = 0; i < entries.length; ++i) {
\r
484 var entry = entries[i];
\r
485 if (entry.element.id == "")
\r
486 entry.element.id = "_toc_" + i;
\r
487 var a = document.createElement("a");
\r
488 a.href = "#" + entry.element.id;
\r
489 a.appendChild(document.createTextNode(entry.text));
\r
490 var div = document.createElement("div");
\r
491 div.appendChild(a);
\r
492 div.className = "toclevel" + entry.toclevel;
\r
493 toc.appendChild(div);
\r
495 if (entries.length == 0)
\r
496 toc.parentNode.removeChild(toc);
\r
500 /////////////////////////////////////////////////////////////////////
\r
501 // Footnotes generator
\r
502 /////////////////////////////////////////////////////////////////////
\r
504 /* Based on footnote generation code from:
\r
505 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
\r
508 footnotes: function () {
\r
509 var cont = document.getElementById("content");
\r
510 var noteholder = document.getElementById("footnotes");
\r
511 var spans = cont.getElementsByTagName("span");
\r
514 for (i=0; i<spans.length; i++) {
\r
515 if (spans[i].className == "footnote") {
\r
517 // Use [\s\S] in place of . so multi-line matches work.
\r
518 // Because JavaScript has no s (dotall) regex flag.
\r
519 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
\r
520 noteholder.innerHTML +=
\r
521 "<div class='footnote' id='_footnote_" + n + "'>" +
\r
522 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
\r
523 n + "</a>. " + note + "</div>";
\r
524 spans[i].innerHTML =
\r
525 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
\r
526 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
527 var id =spans[i].getAttribute("id");
\r
528 if (id != null) refs["#"+id] = n;
\r
532 noteholder.parentNode.removeChild(noteholder);
\r
534 // Process footnoterefs.
\r
535 for (i=0; i<spans.length; i++) {
\r
536 if (spans[i].className == "footnoteref") {
\r
537 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
\r
538 href = href.match(/#.*/)[0]; // Because IE return full URL.
\r
540 spans[i].innerHTML =
\r
541 "[<a href='#_footnote_" + n +
\r
542 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
554 <h1>grml2usb(8)</h1>
\r
556 <div id="toctitle">Table of Contents</div>
\r
557 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
\r
561 <h2 id="_name">1. Name</h2>
\r
562 <div class="sectionbody">
\r
563 <div class="paragraph"><p>grml2usb - install grml ISO(s) on usb device for booting</p></div>
\r
565 <h2 id="_synopsis">2. Synopsis</h2>
\r
566 <div class="sectionbody">
\r
567 <div class="paragraph"><p>grml2usb [ options ] <ISO[s]> <device></p></div>
\r
568 <div class="sidebarblock">
\r
569 <div class="sidebar-content">
\r
570 <div class="paragraph"><p>Important! The grml team does not take responsibility for loss of any data!</p></div>
\r
573 <h2 id="introduction">3. Introduction</h2>
\r
574 <div class="sectionbody">
\r
575 <div class="paragraph"><p>grml2usb installs grml on a given partition of your usb device and makes it
\r
576 bootable. It provides multi-iso support, meaning you can specify several grml
\r
577 ISOs on the command line at once and select the grml flavour you would like to
\r
578 boot on the bootprompt then. Note that the <strong>first</strong> ISO specified on the grml2usb
\r
579 command line will become the default one (that’s the one that will boot when
\r
580 just pressing enter on the bootprompt or wait until the boot timeout matches).</p></div>
\r
581 <div class="admonitionblock">
\r
584 <img src="./images/icons/important.png" alt="Important" />
\r
586 <td class="content">By default a compatible master boot record (MBR) is installed on the device
\r
587 (being for example /dev/sdX when executing <em>grml2usb grml.iso /dev/sdX1</em>) and
\r
588 syslinux is being used as default bootloader. Avoid installation of the default
\r
589 MBR using the <em>--skip-mbr</em> option or if you encounter any problems with the
\r
590 default MBR consider using <em>--syslinux-mbr</em> instead.</td>
\r
593 <div class="admonitionblock">
\r
596 <img src="./images/icons/note.png" alt="Note" />
\r
598 <td class="content">Whereas grml2usb is the script to install recent grml ISOs (>=2009.10) the
\r
599 script grml2usb-compat supports older grml releases (<2009.10) as well.</td>
\r
603 <h2 id="options">4. Options</h2>
\r
604 <div class="sectionbody">
\r
605 <div class="paragraph"><p>The ISO[s] should be the path to one or multiple grml-ISOs and/or the path to
\r
606 the currently running live-system (being /live/image).</p></div>
\r
607 <div class="paragraph"><p>The device either might be a device name like /dev/sdX1 or a directory. When
\r
608 specifying a device name the device is mounted automatically. When specifying a
\r
609 directory grml2usb is assuming that you did set up a bootloader on your own (or
\r
610 don’t need one) and a bootloader won’t be installed automatically.</p></div>
\r
611 <div class="paragraph"><p>The following options are supported:</p></div>
\r
612 <div class="dlist"><dl>
\r
613 <dt class="hdlist1">
\r
614 <strong>--bootoptions=…</strong>
\r
618 Use specified bootoptions as default. To use flavour name as a argument for a
\r
619 boot parameter use %flavour which will be expanded to the flavour name.
\r
622 <dt class="hdlist1">
\r
623 <strong>--bootloader-only</strong>
\r
627 Do <strong>not</strong> copy files but instead just install a bootloader. Note that the boot
\r
628 addons are copied to /boot/addons at this stage as well. If you want to skip
\r
629 copying the boot addons consider using the --skip-addons option.
\r
632 <dt class="hdlist1">
\r
633 <strong>--copy-only</strong>
\r
637 Copy files only but do <strong>not</strong> install a bootloader.
\r
640 <dt class="hdlist1">
\r
641 <strong>--dry-run</strong>
\r
645 Avoid executing commands, instead show what would be executed.
\r
646 Warning: please notice that the ISO has to be mounted anyway, otherwise
\r
647 identifying the grml flavour would not be possible.
\r
650 <dt class="hdlist1">
\r
651 <strong>--fat16</strong>
\r
655 Format specified partition with FAT16.
\r
656 <strong>Important:</strong> this will destroy any existing data on the specified partition!
\r
659 <dt class="hdlist1">
\r
660 <strong>--force</strong>
\r
664 Force any (possible dangerous) actions requiring manual interaction (like --fat16).
\r
667 <dt class="hdlist1">
\r
668 <strong>--grub</strong>
\r
672 Install grub bootloader instead of (default) syslinux.
\r
675 <dt class="hdlist1">
\r
676 <strong>--grub-mbr</strong>
\r
680 Install grub into MBR (Master Boot Record) instead of PBR (Partition Boot
\r
681 Record). Check out <a href="#mbr-vs-pbr">the <em>mbr-vs-pbr</em> section in the FAQ of this document</a> for further details.
\r
684 <dt class="hdlist1">
\r
685 <strong>--help</strong>
\r
689 Display usage information and exit.
\r
693 <div class="dlist"><dl>
\r
694 <dt class="hdlist1">
\r
695 <strong>--lilo-binary=…</strong>
\r
699 Use specified lilo executable for installing master boot record (MBR) when using
\r
700 the <em>--syslinux-mbr</em> option. By default any system wide (from $PATH) lilo
\r
701 executable is taken. If there can not be find any lilo executable the
\r
702 statically compiled version of the grml2usb Debian package (see
\r
703 /usr/share/grml2usb/lilo/lilo.static.[amd64|i386]) is taken.
\r
706 <dt class="hdlist1">
\r
707 <strong>--mbr-menu</strong>
\r
711 Install master boot record (MBR) with integrated boot menu: interactively choose
\r
712 the partition to boot from, with a timeout to load the default partition, or
\r
713 boot from floppy. When NOT using the --mbr-menu option a MBR with LBA and large
\r
714 disc support but without an integrated boot menu is installed (so it’s not
\r
715 visible at all but instead directly jumps to the bootloader - being grub or
\r
716 syslinux). Note: This options is available only when using the default MBR and
\r
717 won’t have any effect if you’re using the <em>--syslinux-mbr</em> option.
\r
720 <dt class="hdlist1">
\r
721 <strong>--quiet</strong>
\r
725 Do not output anything but just errors on console.
\r
728 <dt class="hdlist1">
\r
729 <strong>--skip-addons</strong>
\r
733 Do not install /boot/addons/ files (like dos, grub, memdisk,…).
\r
736 <dt class="hdlist1">
\r
737 <strong>--remove-bootoption=…</strong>
\r
741 Remove specified bootoption (could be a regex) from existing boot options. Use
\r
742 multiple entries for removing different bootoptions at once. (Note: this option
\r
743 is not support in grml2usb-compat.)
\r
746 <dt class="hdlist1">
\r
747 <strong>--skip-grub-config</strong>
\r
751 Skip generation of grub configuration files. By default the configuration
\r
752 files for syslinux <strong>and</strong> grub will be written so you’ve a working configuration
\r
753 file no matter whether you’re using grub or syslinux as bootloader.
\r
756 <dt class="hdlist1">
\r
757 <strong>--skip-mbr</strong>
\r
761 Do not touch/install the master boot record (MBR).
\r
764 <dt class="hdlist1">
\r
765 <strong>--skip-syslinux-config</strong>
\r
769 Skip generation of syslinux configuration files. By default the configuration
\r
770 files for syslinux <strong>and</strong> grub will be written so you’ve a working configuration
\r
771 file no matter whether you’re using grub or syslinux as bootloader.
\r
774 <dt class="hdlist1">
\r
775 <strong>--syslinux</strong>
\r
779 This option is deprecated and is being left only for backwards compatibility
\r
780 reasons. Syslinux is the default bootloader of grml2usb and therefore the
\r
781 <em>--syslinux</em> option doesn’t have any effects. If you do not want to use syslinux
\r
782 as bootloader consider using the <em>--grub</em> option.
\r
785 <dt class="hdlist1">
\r
786 <strong>--syslinux-mbr</strong>
\r
790 Install syslinux' master boot record (MBR, which is booting from the partition
\r
791 with the "active" flag set) instead of the default one. If you encounter any
\r
792 problems with the default MBR you can try using the syslinux MBR instead. If
\r
793 that works for you please <a href="#author">let us know</a> so we can adjust our default
\r
794 MBR accordingly. Note: When using the <em>--syslinux-mbr</em> option lilo is executed
\r
795 before the MBR is installed so the according partitions are set active.
\r
799 <div class="dlist"><dl>
\r
800 <dt class="hdlist1">
\r
801 <strong>-v</strong>, <strong>--version</strong>
\r
805 Return version and exit.
\r
808 <dt class="hdlist1">
\r
809 <strong>--verbose</strong>
\r
813 Enable verbose mode.
\r
818 <h2 id="_developers_corner">5. Developers Corner</h2>
\r
819 <div class="sectionbody">
\r
820 <h3 id="directory-layout">5.1. Directory layout on usb device</h3><div style="clear:left"></div>
\r
821 <div class="literalblock">
\r
822 <div class="content">
\r
823 <pre><tt>boot/ ->
\r
825 | |-- allinone.img [grub - all in one image]
\r
826 | |-- bsd4grml/ [MirBSD]
\r
827 | |-- balder10.imz [FreeDOS]
\r
828 | |-- memdisk [chainloading helper]
\r
829 | |-- memtest [memtest86+]
\r
832 | | |-- linux26 [Kernel]
\r
833 | | |-- initrd.gz [initramfs]
\r
835 | | |-- linux26 [Kernel]
\r
836 | | |-- initrd.gz [initramfs]
\r
838 | | |-- linux26 [...]
\r
840 | |-- grml64-medium
\r
850 | |-- grml.png [graphical bootsplash background image for grub2]
\r
851 | |-- grub.cfg [configuration file for grub2]
\r
852 | |-- menu.lst [configuration file for grub1]
\r
853 | |-- splash.xpm.gz [splash screen for grub1]
\r
855 |-- grml.png [graphical bootsplash background image for syslinux]
\r
856 |-- syslinux.cfg [main configuration file for syslinux]
\r
857 `-- [....] [several further config files for syslinux]</tt></pre>
\r
859 <div class="literalblock">
\r
860 <div class="content">
\r
862 |-- grml2usb.txt [not yet implemented]
\r
863 |-- grml-cheatcodes.txt [list of bootoptions for grml]
\r
864 |-- grml-version.txt [file containing information about grml-version]
\r
865 |-- LICENSE.txt [license information]
\r
866 |-- md5sums [md5sums of original ISO]
\r
867 |-- README.txt [informational text]
\r
868 `-- web/ [browser related files]
\r
875 `-- logo.png</tt></pre>
\r
877 <div class="literalblock">
\r
878 <div class="content">
\r
881 | |-- filesystem.module [module specifying which squashfs should be used for grml]
\r
882 | `-- grml.squashfs [squashfs file for grml]
\r
884 | |-- filesystem.module [module specifying which squashfs should be used for grml-medium]
\r
885 | `-- grml-medium.squashfs [squashfs file for grml-medium]
\r
887 | |-- filesystem.module [module specifying which squashfs should be used for grml-medium]
\r
888 | `-- grml-small.squashfs [squashfs file for grml-small]
\r
891 <h3 id="source">5.2. Grabbing the source</h3><div style="clear:left"></div>
\r
892 <div class="literalblock">
\r
893 <div class="content">
\r
894 <pre><tt>% git clone git://git.grml.org/grml2usb.git</tt></pre>
\r
896 <h3 id="debugging">5.3. Developers Debugging Hints</h3><div style="clear:left"></div>
\r
897 <div class="paragraph"><p>To play with grml2usb you can avoid using a real device via a loopback file
\r
898 setup, like:</p></div>
\r
899 <div class="literalblock">
\r
900 <div class="content">
\r
901 <pre><tt># dd if=/dev/zero of=~/loopback bs=1M count=100 # adjust size to your needs
\r
902 # losetup /dev/loop1 ~/loopback</tt></pre>
\r
904 <div class="paragraph"><p>Then create according partitions either running for example:</p></div>
\r
905 <div class="literalblock">
\r
906 <div class="content">
\r
907 <pre><tt># echo -en "n\np\n1\n\n\nt\n6\na\n1\n w\n" | fdisk /dev/loop1</tt></pre>
\r
909 <div class="paragraph"><p>or:</p></div>
\r
910 <div class="literalblock">
\r
911 <div class="content">
\r
912 <pre><tt># parted /dev/loop1 -s "mkpart primary fat16 0 -1s mkfs 1 fat16"</tt></pre>
\r
914 <div class="paragraph"><p>Finally create a filesystem and execute grml2usb as needed:</p></div>
\r
915 <div class="literalblock">
\r
916 <div class="content">
\r
917 <pre><tt># mkfs.vfat /dev/loop1
\r
918 # grml2usb --bootloader-only /grml/isos/grml-small_2009.10.iso /dev/loop1</tt></pre>
\r
920 <h3 id="performance-tracing">5.4. Performance tracing</h3><div style="clear:left"></div>
\r
921 <div class="literalblock">
\r
922 <div class="content">
\r
923 <pre><tt># blktrace -d /dev/sdX -o - | blkparse -i -
\r
924 # grml2usb grml_2009.10.iso /dev/sdX1</tt></pre>
\r
927 <h2 id="troubleshooting">6. Troubleshooting and Pitfalls when booting</h2>
\r
928 <div class="sectionbody">
\r
929 <div class="paragraph"><p>Here is a list of common error messages from BIOS/bootloader when trying to boot
\r
930 from USB.</p></div>
\r
931 <div class="hdlist"><table>
\r
933 <td class="hdlist1">
\r
934 <strong>Error message</strong>
\r
937 <td class="hdlist2">
\r
938 <p style="margin-top: 0;">
\r
939 ran out of input data. System halted
\r
944 <td class="hdlist1">
\r
945 <strong>Reason</strong>
\r
948 <td class="hdlist2">
\r
949 <p style="margin-top: 0;">
\r
950 Everything OK, except for the filesystem used on your usb device. So
\r
951 instead of fat16 you are using for example fat32. Fix: use the appropriate
\r
952 filesystem (fat16 for usb pens usually). The Bootsplash might be displayed, the
\r
953 kernel loads but you very soon get the error message.
\r
958 <td class="hdlist1">
\r
959 <strong>Error message</strong>
\r
962 <td class="hdlist2">
\r
963 <p style="margin-top: 0;">
\r
964 Invalid operating system
\r
969 <td class="hdlist1">
\r
970 <strong>Reason</strong>
\r
973 <td class="hdlist2">
\r
974 <p style="margin-top: 0;">
\r
975 the partition layout is not ok. Very probably there’s no primary
\r
976 partition (/dev/sdX{1..4}) or none has the flag <em>bootable</em> set.
\r
981 <td class="hdlist1">
\r
982 <strong>Error message</strong>
\r
985 <td class="hdlist2">
\r
986 <p style="margin-top: 0;">
\r
992 <td class="hdlist1">
\r
993 <strong>Reason</strong>
\r
996 <td class="hdlist2">
\r
997 <p style="margin-top: 0;">
\r
998 Some BIOSses offer different modes for USB booting. The proper mode
\r
999 to boot a USB stick is USB-HDD. If that doesn’t work or is not supported by your
\r
1000 system, you need to format your USB-Stick as USB-ZIP. To do this, syslinux
\r
1001 contains an utility called mkdiskimage, which you can use to re-format your USB
\r
1002 stick in USB-ZIP format running <em>mkdiskimage -4 /dev/sdX 1 64 32</em>. Please be
\r
1003 aware that this procedure will erase all data on your stick. After executing
\r
1004 mkdiskimage just continue installing as usual (grml2usb … /dev/sdX4). Note
\r
1005 that this is not going to work for any device larger than 8 GB, since
\r
1006 mkdiskimage only supports 1024c 256h 63s. For a more detailed explanation, refer
\r
1007 to /usr/share/doc/syslinux-common/usbkey.txt.
\r
1012 <td class="hdlist1">
\r
1013 <strong>Error message</strong>
\r
1016 <td class="hdlist2">
\r
1017 <p style="margin-top: 0;">
\r
1018 No operating system found.
\r
1023 <td class="hdlist1">
\r
1024 <strong>Reason</strong>
\r
1027 <td class="hdlist2">
\r
1028 <p style="margin-top: 0;">
\r
1029 you forgot to set the boot-flag on the partition. Or there really isn’t
\r
1030 any operating system at all. :)
\r
1035 <td class="hdlist1">
\r
1036 <strong>Error message</strong>
\r
1039 <td class="hdlist2">
\r
1040 <p style="margin-top: 0;">
\r
1041 kernel-panic: unable to mount root-fs…
\r
1046 <td class="hdlist1">
\r
1047 <strong>Reason</strong>
\r
1050 <td class="hdlist2">
\r
1051 <p style="margin-top: 0;">
\r
1052 Kernel boots but fails to find the root filesystem. The root=
\r
1053 argument in your kernel commandline is pointing to the wrong device. Adjust
\r
1054 root=…, consider using root=UUID=….
\r
1059 <td class="hdlist1">
\r
1060 <strong>Error message</strong>
\r
1063 <td class="hdlist2">
\r
1064 <p style="margin-top: 0;">
\r
1065 Could not find kernel image: …
\r
1070 <td class="hdlist1">
\r
1071 <strong>Reason</strong>
\r
1074 <td class="hdlist2">
\r
1075 <p style="margin-top: 0;">
\r
1076 either a broken isolinux/syslinux version or a broken BIOS. Check out
\r
1077 whether the vendor provides a BIOS update or if using bootloader grub instead of
\r
1078 isolinux/syslinux fixes the problem.
\r
1084 <h2 id="faq">7. Frequently Asked Questions (FAQ)</h2>
\r
1085 <div class="sectionbody">
\r
1086 <h3 id="download">7.1. Where can I get grml2usb?</h3><div style="clear:left"></div>
\r
1087 <div class="paragraph"><p>grml2usb is available as Debian package via <a href="http://deb.grml.org/">the
\r
1088 grml-testing Debian repository</a>.</p></div>
\r
1089 <div class="paragraph"><p>If you do not want to (or can’t) use the grml2usb Debian package you can either
\r
1090 use the grml2usb git tree running:</p></div>
\r
1091 <div class="literalblock">
\r
1092 <div class="content">
\r
1093 <pre><tt>git clone git://git.grml.org/grml2usb.git
\r
1096 sudo ./grml2usb ...</tt></pre>
\r
1098 <div class="paragraph"><p>or download the provided
\r
1099 <a href="http://grml.org/grml2usb/grml2usb.tgz">http://grml.org/grml2usb/grml2usb.tgz</a>
\r
1100 (<a href="http://grml.org/grml2usb/grml2usb.tgz.md5.asc">gpg signed md5 hash</a>).
\r
1101 Download and extract the tarball and execute the provided script <em>install.sh</em>.</p></div>
\r
1102 <div class="admonitionblock">
\r
1105 <img src="./images/icons/note.png" alt="Note" />
\r
1107 <td class="content">It is <strong>NOT</strong> enough to have just the grml2usb script itself without the according
\r
1108 files provided either via the Debian package, the git tree or the file
\r
1109 grml2usb.tgz.</td>
\r
1112 <h3 id="grml2hd-vs-grml2usb">7.2. What’s the difference between grml2hd and grml2usb?</h3><div style="clear:left"></div>
\r
1113 <div class="paragraph"><p>grml2hd installs a running grml system to a harddisk. When rebooting the
\r
1114 harddisk installation can be modified and changes will find their way to the
\r
1115 harddisk immediately. grml2usb copies just the compressed chroot filesystem
\r
1116 (being the squashfs file), some further informational files and a bootloader to
\r
1117 your device. This way you don’t need as much space as with a harddisk
\r
1118 installation (just a USB device with >=ISO size) and when rebooting the system
\r
1119 your changes will be lost (unless you are using the persistency feature, see
\r
1120 <a href="http://wiki.grml.org/doku.php?id=persistency">http://wiki.grml.org/doku.php?id=persistency</a>).
\r
1121 Think of using a better CD version: booting is (usually) faster, you don’t need
\r
1122 to burn a new CD when a new ISO version arrives (just install the new ISO using
\r
1123 grml2usb) and you can carry additional files on a writable medium with yourself.</p></div>
\r
1124 <h3 id="dd">7.3. Why can’t I just dd the ISO to a USB device?</h3><div style="clear:left"></div>
\r
1125 <div class="paragraph"><p>Well, you can. :) Starting with grml 2009.10 the ISOs are dd-able straight out-of-the-box.</p></div>
\r
1126 <div class="admonitionblock">
\r
1129 <img src="./images/icons/important.png" alt="Important" />
\r
1131 <td class="content">Note that ANY existing data on your USB device will be destroyed when
\r
1132 using the dd approach.</td>
\r
1135 <div class="paragraph"><p>This allows you to dd the Grml ISO to your USB device (use for example
\r
1136 <a href="http://www.chrysocome.net/rawwrite">rawwrite</a> if you’ve just a Windows
\r
1137 system available) running:</p></div>
\r
1138 <div class="literalblock">
\r
1139 <div class="content">
\r
1140 <pre><tt>% dd if=grml_2009.10.iso of=/dev/sdX</tt></pre>
\r
1142 <div class="paragraph"><p>where /dev/sdX is your USB device. Of course this doesn’t provide such a
\r
1143 flexible system like with grml2usb (no multi-ISO setup, no additional default
\r
1144 bootoptions,…) but it’s a nice way to get a working USB boot setup if you
\r
1145 don’t have grml2usb available.</p></div>
\r
1146 <h3 id="grml2usb-vs-dd">7.4. What’s the difference between grml2usb and just using dd?</h3><div style="clear:left"></div>
\r
1147 <div class="paragraph"><p>grml2usb does not remove any data from your USB device and does not alter the
\r
1148 partition table at all. grml2usb provides multi-ISO support, support for adding
\r
1149 default bootoptions and selecting the bootloader (syslinux vs. grub) without
\r
1150 having to manually touch the ISO at all.</p></div>
\r
1151 <h3 id="grml2iso">7.5. What’s grml2iso?</h3><div style="clear:left"></div>
\r
1152 <div class="paragraph"><p>grml2iso is a script which uses grml2usb to generate a multiboot ISO out of
\r
1153 several grml ISOs. See <em>man grml2iso</em> for further details.</p></div>
\r
1154 <h3 id="grml2usb-compat">7.6. grml2usb fails with "Fatal: file default.cfg could not be found."</h3><div style="clear:left"></div>
\r
1155 <div class="paragraph"><p>If you are trying to install an older grml ISO (older than grml 2009.10) with a
\r
1156 recent version of grml2usb then you might notice:</p></div>
\r
1157 <div class="literalblock">
\r
1158 <div class="content">
\r
1159 <pre><tt>Fatal: file default.cfg could not be found.
\r
1160 Note: this grml2usb version requires an ISO generated by grml-live >=0.9.24 ...
\r
1161 ... either use grml releases >=2009.10 or switch to an older grml2usb version.
\r
1162 Please visit http://grml.org/grml2usb/#grml2usb-compat for further information
\r
1163 Fatal: a critical error happend during execution (not a grml ISO?), giving up</tt></pre>
\r
1165 <div class="paragraph"><p>Breaking the backward compatibility was necessary to avoid maintainability hell.
\r
1166 If you want to install older grml ISOs please use the grml2usb-compat script
\r
1167 which provides support for older releases.</p></div>
\r
1168 <h3 id="menu-lst">7.7. Why is there a menu.lst and a grub.cfg inside /boot/grub/?</h3><div style="clear:left"></div>
\r
1169 <div class="paragraph"><p>grml2usb supports grub version 1 (grub1) as well as grub version 2 (grub2).
\r
1170 Whereas grub1 uses menu.lst the new version grub2 needs grub.cfg.
\r
1171 Providing both files allows grml2usb to install grub on the target device
\r
1172 no matter which grub version is available on the host where grml2usb is
\r
1173 executed on.</p></div>
\r
1174 <h3 id="stage1">7.8. grub-install fails with 'The file ../boot/grub/stage1 not read correctly"?!</h3><div style="clear:left"></div>
\r
1175 <div class="paragraph"><p>Check whether the partition has the right partition type. For example do NOT use
\r
1176 FAT16 (partition type 6) when using a ext3 filesystem on the partition but
\r
1177 instead use the correct partition type (<em>83</em> - Linux) then.</p></div>
\r
1178 <h3 id="grub-install-xfs_freeze">7.9. grub-install complains about /sbin/grub-install and/or xfs_freeze?!</h3><div style="clear:left"></div>
\r
1179 <div class="paragraph"><p>The following message:</p></div>
\r
1180 <div class="literalblock">
\r
1181 <div class="content">
\r
1182 <pre><tt>You shouldn't call /sbin/grub-install. Please call /usr/sbin/grub-install instead!
\r
1183 xfs_freeze: specified file ["/tmp/tmpqaBK6z/boot/grub"] is not on an XFS filesystem</tt></pre>
\r
1185 <div class="paragraph"><p>This is "normal". grub-install sends those messages to stderr. To avoid hiding any
\r
1186 possible real error messages grml2usb doesn’t ignore those messages.</p></div>
\r
1187 <h3 id="device-map">7.10. grub-install complains about /boot/grub/device.map?!</h3><div style="clear:left"></div>
\r
1188 <div class="paragraph"><p>The following message:</p></div>
\r
1189 <div class="literalblock">
\r
1190 <div class="content">
\r
1191 <pre><tt>grub-probe: error: Cannot open `/boot/grub/device.map'</tt></pre>
\r
1193 <div class="paragraph"><p>This is "normal" (at least with grub1). This isn’t a problem, because the
\r
1194 device.map file will be generated on the target device anyway.</p></div>
\r
1195 <h3 id="unary-operator">7.11. grub-install complains about a unary operator?!</h3><div style="clear:left"></div>
\r
1196 <div class="paragraph"><p>The following message:</p></div>
\r
1197 <div class="literalblock">
\r
1198 <div class="content">
\r
1199 <pre><tt>'/usr/sbin/grub-install: line 374: [: =: unary operator expected'</tt></pre>
\r
1201 <div class="paragraph"><p>This is "normal". Just ignore it. (It usually doesn’t appear
\r
1202 on the second invocation on the same device.)</p></div>
\r
1203 <h3 id="unknown-filesystem">7.12. grub-install fails with grub-probe: error: unknown filesystem?!</h3><div style="clear:left"></div>
\r
1204 <div class="paragraph"><p>The following message:</p></div>
\r
1205 <div class="literalblock">
\r
1206 <div class="content">
\r
1207 <pre><tt>grub-probe: error: unknown filesystem
\r
1208 Auto-detection of a filesystem module failed.
\r
1209 Please specify the module with the option `--modules' explicitly.</tt></pre>
\r
1211 <div class="paragraph"><p>usually means that the device partition table says something else than the
\r
1212 filesystem on the device. For example using FAT16 as filesystem type and
\r
1213 using FAT32 as filesystem on the partition will not work. Either set filesystem
\r
1214 type to FAT32 or format the partition using FAT16. It is essential that
\r
1215 device partition table and filesystem use the same filesystem type.</p></div>
\r
1216 <h3 id="mbr-vs-pbr">7.13. grub-setup fails after Attempting to install GRUB to a partition instead of the MBR?!</h3><div style="clear:left"></div>
\r
1217 <div class="paragraph"><p>The following message:</p></div>
\r
1218 <div class="literalblock">
\r
1219 <div class="content">
\r
1220 <pre><tt>grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea.
\r
1221 grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and its use is discouraged.
\r
1222 grub-setup: error: Cannot read `/grub/core.img' correctly</tt></pre>
\r
1224 <div class="paragraph"><p>appears when using grub2 versions older than 1.98 as those version introduced a
\r
1225 regression which avoids that grub is being installed into a partition (PBR,
\r
1226 Partition Boot Record) instead of MBR (Master Boot Record).</p></div>
\r
1227 <div class="paragraph"><p>To work around this issue you can either 1) upgrade to grub versions >=1.98, 2)
\r
1228 install grub into the MBR (Master Boot Record) using the <em>--grub-mbr</em> option of
\r
1229 grml2usb or 3) switch to syslinux as bootmanager (just drop the <em>--grub</em>
\r
1230 option).</p></div>
\r
1231 <h3 id="splash-xpm">7.14. I’m getting something like "Error: /usr/share/grml2usb/grub/splash.xpm.gz can not be read"!?</h3><div style="clear:left"></div>
\r
1232 <div class="paragraph"><p>Looks like you’ve only the grml2usb script itself available. Please make sure
\r
1233 you’ve the grml2usb Debian package installed. The most resent stable version is
\r
1234 available via <a href="http://deb.grml.org/">the grml-testing Debian repository</a>. If
\r
1235 you do not have a Debian system please see section <a href="#download">Where can I get grml2usb?</a> in this FAQ.</p></div>
\r
1236 <h3 id="fat16">7.15. Why do I have to use a FAT16/FAT32 filesystem?</h3><div style="clear:left"></div>
\r
1237 <div class="paragraph"><p>Syslinux (currently) does not support any other filesystems besides FAT16/FAT32
\r
1238 (though that’s a sane default if you want to share your files with other
\r
1239 (operating) systems). If you want to use a different filesystem (like ext2/3)
\r
1240 use the bootloader grub instead using grml2usb’s <em>--grub</em> option.</p></div>
\r
1241 <div class="admonitionblock">
\r
1244 <img src="./images/icons/note.png" alt="Note" />
\r
1246 <td class="content">FAT32 is supported since syslinux version 3.0.</td>
\r
1249 <h3 id="cool-idea">7.16. I think I’ve got a really cool idea!</h3><div style="clear:left"></div>
\r
1250 <div class="paragraph"><p>Great! Please check out
\r
1251 <a href="http://git.grml.org/?p=grml2usb.git;a=blob;f=TODO;hb=HEAD">the TODO file</a>.
\r
1252 Feel free to <a href="#author">report your wishes to the author</a>. Patches highly
\r
1253 appreciated.</p></div>
\r
1254 <h3 id="booting-from-usb">7.17. I’ve problems with booting from USB.</h3><div style="clear:left"></div>
\r
1255 <div class="paragraph"><p>Check out <a href="#troubleshooting">Troubleshooting and Pitfalls when booting</a>.</p></div>
\r
1256 <h3 id="found-a-bug">7.18. I’ve found a bug!</h3><div style="clear:left"></div>
\r
1257 <div class="paragraph"><p>Please <a href="#author">report it to the author</a>. Please provide usage examples and output
\r
1258 of your grml2usb commandline (consider using the "--verbose" option).</p></div>
\r
1260 <h2 id="usage-examples">8. Usage examples</h2>
\r
1261 <div class="sectionbody">
\r
1262 <div class="literalblock">
\r
1263 <div class="content">
\r
1264 <pre><tt># grml2usb /home/grml/grml_2009.10.iso /dev/sdX1</tt></pre>
\r
1266 <div class="paragraph"><p>Install specified ISO on device /dev/sdX1.</p></div>
\r
1267 <div class="literalblock">
\r
1268 <div class="content">
\r
1269 <pre><tt># grml2usb /home/grml/grml_2009.10.iso /home/grml/grml_small_2009.10.iso /dev/sdX1</tt></pre>
\r
1271 <div class="paragraph"><p>Install specified ISOs on device /dev/sdX1 for multibooting ISOs.</p></div>
\r
1272 <div class="literalblock">
\r
1273 <div class="content">
\r
1274 <pre><tt># grml2usb /live/image /dev/sdX1</tt></pre>
\r
1276 <div class="paragraph"><p>Install currently running grml live system on device /dev/sdX1.</p></div>
\r
1277 <div class="literalblock">
\r
1278 <div class="content">
\r
1279 <pre><tt># grml2usb /live/image /home/grml/grml_2009.10.iso /dev/sdX1</tt></pre>
\r
1281 <div class="paragraph"><p>Install currently running grml live system and the specified
\r
1282 ISO on device /dev/sdX1 for multibooting.</p></div>
\r
1283 <div class="literalblock">
\r
1284 <div class="content">
\r
1285 <pre><tt># grml2usb --fat16 /home/grml/grml_2009.10.iso /dev/sdX1</tt></pre>
\r
1287 <div class="paragraph"><p>Install specified ISO on device /dev/sdX1 and format partition /dev/sdX1 with
\r
1288 FAT16 filesystem.</p></div>
\r
1289 <div class="literalblock">
\r
1290 <div class="content">
\r
1291 <pre><tt># grml2usb --grub --grub-mbr /home/grml/grml_2009.10.iso /dev/sdX1</tt></pre>
\r
1293 <div class="paragraph"><p>Install specified ISO on device /dev/sdX1 and use grub as bootloader (instead of
\r
1294 syslinux being the default) and install a master boot record (MBR) to the MBR of
\r
1295 /dev/sdX.</p></div>
\r
1296 <div class="literalblock">
\r
1297 <div class="content">
\r
1298 <pre><tt># grml2usb-compat /home/grml/grml_2009.05.iso /dev/sdX1</tt></pre>
\r
1300 <div class="paragraph"><p>Install older grml ISO on device /dev/sdX1.</p></div>
\r
1301 <div class="literalblock">
\r
1302 <div class="content">
\r
1303 <pre><tt># grml2usb --bootoptions="lang=de ssh=mysecret" grml_2009.10.iso /dev/sdX1</tt></pre>
\r
1305 <div class="paragraph"><p>Install specified ISO on device /dev/sdX1 and use "lang=de ssh=mysecret" as
\r
1306 default bootoptions.</p></div>
\r
1307 <div class="literalblock">
\r
1308 <div class="content">
\r
1309 <pre><tt># grml2usb --remove-bootoption="vga=791" --remove-bootoption="quiet" grml_2009.10.iso /dev/sdX1</tt></pre>
\r
1311 <div class="paragraph"><p>Install specified ISO on device /dev/sdX1 remove vga=791 and quiet from existing bootoptions.</p></div>
\r
1312 <div class="literalblock">
\r
1313 <div class="content">
\r
1314 <pre><tt># grml2usb --bootoptions="persistent-path=%flavour_name" grml64_2010.04.iso grml_2010.04.iso /dev/sdX1</tt></pre>
\r
1316 <div class="paragraph"><p>Install specified Isos on device /dev/sdx and add parameter persisten-path
\r
1317 to every menu entry. %flavour_name will be expanded to the flavour of the specific
\r
1318 iso, e.g. grml64 and grml.</p></div>
\r
1320 <h2 id="ressources">9. Online Ressources</h2>
\r
1321 <div class="sectionbody">
\r
1322 <div class="paragraph"><p>Check out the <a href="http://grml.org/grml2usb/">grml2usb webpage</a> and the
\r
1323 <a href="http://git.grml.org/?p=grml2usb.git">grml2usb git repository</a>.</p></div>
\r
1325 <h2 id="bugs">10. Bugs</h2>
\r
1326 <div class="sectionbody">
\r
1327 <div class="paragraph"><p>Please report feedback, bugreports and wishes <a href="#author">to the author</a>.</p></div>
\r
1329 <h2 id="author">11. Author</h2>
\r
1330 <div class="sectionbody">
\r
1331 <div class="paragraph"><p>Michael Prokop <<a href="mailto:mika@grml.org">mika@grml.org</a>></p></div>
\r
1334 <div id="footnotes"><hr /></div>
\r
1336 <div id="footer-text">
\r
1337 Last updated 2010-06-16 15:30:28 CEST
\r