]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* docs/grub.texi (Chain-loading): New section.
authorColin Watson <cjwatson@ubuntu.com>
Wed, 2 Jun 2010 11:47:11 +0000 (12:47 +0100)
committerColin Watson <cjwatson@ubuntu.com>
Wed, 2 Jun 2010 11:47:11 +0000 (12:47 +0100)
(DOS/Windows): New section, borrowed from GRUB Legacy with details
adjusted for GRUB 2.
(SCO UnixWare): Likewise.
(QNX): Likewise.
(chainloader): Add reference to `Block list syntax'.
(drivemap): New section.
(parttool): New section.

ChangeLog
docs/grub.texi

index 905e36edf66cea0c899dc095a4ea0530c5b36b4a..b0fc068483da19587acf8d09069422bf6ab5809c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-06-02  Colin Watson  <cjwatson@ubuntu.com>
+
+       * docs/grub.texi (Chain-loading): New section.
+       (DOS/Windows): New section, borrowed from GRUB Legacy with details
+       adjusted for GRUB 2.
+       (SCO UnixWare): Likewise.
+       (QNX): Likewise.
+       (chainloader): Add reference to `Block list syntax'.
+       (drivemap): New section.
+       (parttool): New section.
+
 2010-06-02  Colin Watson  <cjwatson@ubuntu.com>
 
        * docs/grub.texi (GNU GRUB manual): Remove reference to `Invoking
index 4c903729b86cbcc4272e2118a8dd877710405047..5f2e5e36aa608adfb710ec75c9c9b95638a97046 100644 (file)
@@ -647,6 +647,35 @@ use more complicated instructions. @xref{DOS/Windows}, for more
 information.
 
 
+@node Chain-loading
+@subsection Chain-loading an OS
+
+Operating systems that do not support Multiboot and do not have specific
+support in GRUB (specific support is available for Linux, FreeBSD, NetBSD
+and OpenBSD) must be chain-loaded, which involves loading another boot
+loader and jumping to it in real mode.
+
+The @command{chainloader} command (@pxref{chainloader}) is used to set this
+up.  It is normally also necessary to load some GRUB modules and set the
+appropriate root device.  Putting this together, we get something like this,
+for a Windows system on the first partition of the first hard disk:
+
+@verbatim
+menuentry "Windows" {
+       insmod chain
+       insmod ntfs
+       set root=(hd0,1)
+       chainloader +1
+}
+@end verbatim
+@c FIXME: document UUIDs.
+
+On systems with multiple hard disks, an additional workaround may be
+required.  @xref{DOS/Windows}.
+
+Chain-loading is only supported on PC BIOS and EFI platforms.
+
+
 @node OS-specific notes
 @section Some caveats on OS-specific issues
 
@@ -655,6 +684,9 @@ Here, we describe some caveats on several operating systems.
 @menu
 * GNU/Hurd::
 * GNU/Linux::
+* DOS/Windows::
+* SCO UnixWare::
+* QNX::
 @end menu
 
 
@@ -696,6 +728,87 @@ the size, run the command @command{uppermem} @emph{before} loading the
 kernel. @xref{uppermem}, for more information.
 
 
+@node DOS/Windows
+@subsection DOS/Windows
+
+GRUB cannot boot DOS or Windows directly, so you must chain-load them
+(@pxref{Chain-loading}). However, their boot loaders have some critical
+deficiencies, so it may not work to just chain-load them. To overcome
+the problems, GRUB provides you with two helper functions.
+
+If you have installed DOS (or Windows) on a non-first hard disk, you
+have to use the disk swapping technique, because that OS cannot boot
+from any disks but the first one. The workaround used in GRUB is the
+command @command{drivemap} (@pxref{drivemap}), like this:
+
+@example
+drivemap -s (hd0) (hd1)
+@end example
+
+This performs a @dfn{virtual} swap between your first and second hard
+drive.
+
+@strong{Caution:} This is effective only if DOS (or Windows) uses BIOS
+to access the swapped disks. If that OS uses a special driver for the
+disks, this probably won't work.
+
+Another problem arises if you installed more than one set of DOS/Windows
+onto one disk, because they could be confused if there are more than one
+primary partitions for DOS/Windows. Certainly you should avoid doing
+this, but there is a solution if you do want to do so. Use the partition
+hiding/unhiding technique.
+
+If GRUB @dfn{hides} a DOS (or Windows) partition (@pxref{parttool}), DOS (or
+Windows) will ignore the partition. If GRUB @dfn{unhides} a DOS (or Windows)
+partition, DOS (or Windows) will detect the partition. Thus, if you have
+installed DOS (or Windows) on the first and the second partition of the
+first hard disk, and you want to boot the copy on the first partition, do
+the following:
+
+@example
+@group
+parttool (hd0,1) hidden-
+parttool (hd0,2) hidden+
+set root=(hd0,1)
+chainloader +1
+parttool @verb{'${root}'} boot+
+boot
+@end group
+@end example
+
+
+@node SCO UnixWare
+@subsection SCO UnixWare
+
+It is known that the signature in the boot loader for SCO UnixWare is
+wrong, so you will have to specify the option @option{--force} to
+@command{chainloader} (@pxref{chainloader}), like this:
+
+@example
+@group
+set root=(hd1,1)
+chainloader --force +1
+parttool @verb{'${root}'} boot+
+boot
+@end group
+@end example
+
+
+@node QNX
+@subsection QNX
+
+QNX seems to use a bigger boot loader, so you need to boot it up, like
+this:
+
+@example
+@group
+set root=(hd1,2)
+chainloader +4
+boot
+@end group
+@end example
+
+
 @node Configuration
 @chapter Writing your own configuration file
 
@@ -1325,6 +1438,7 @@ you forget a command, you can run the command @command{help}
 * configfile::                  Load a configuration file
 * crc::                         Calculate CRC32 checksums
 * date::                        Display or set current date and time
+* drivemap::                    Map a drive to another
 * echo::                        Display a line of text
 * export::                      Export an environment variable
 * gettext::                     Translate a string
@@ -1334,6 +1448,7 @@ you forget a command, you can run the command @command{help}
 * insmod::                      Insert a module
 * keystatus::                   Check key modifier status
 * ls::                          List devices or files
+* parttool::                    Modify partition table entries
 * play::                        Play a tune
 * reboot::                      Reboot your computer
 * set::                         Set an environment variable
@@ -1399,11 +1514,12 @@ grub> @kbd{cat /etc/fstab}
 
 @deffn Command chainloader [@option{--force}] file
 Load @var{file} as a chain-loader. Like any other file loaded by the
-filesystem code, it can use the blocklist notation to grab the first
-sector of the current partition with @samp{+1}. If you specify the
-option @option{--force}, then load @var{file} forcibly, whether it has a
-correct signature or not. This is required when you want to load a
-defective boot loader, such as SCO UnixWare 7.1 (@pxref{SCO UnixWare}).
+filesystem code, it can use the blocklist notation (@pxref{Block list
+syntax}) to grab the first sector of the current partition with @samp{+1}.
+If you specify the option @option{--force}, then load @var{file} forcibly,
+whether it has a correct signature or not. This is required when you want to
+load a defective boot loader, such as SCO UnixWare 7.1 (@pxref{SCO
+UnixWare}).
 @end deffn
 
 
@@ -1458,6 +1574,32 @@ hour, minute, and second unchanged.
 @end deffn
 
 
+@node drivemap
+@subsection drivemap
+
+@deffn Command drivemap @option{-l}|@option{-r}|[@option{-s}] @
+ from_drive to_drive
+Without options, map the drive @var{from_drive} to the drive @var{to_drive}.
+This is necessary when you chain-load some operating systems, such as DOS,
+if such an OS resides at a non-first drive.  For convenience, any partition
+suffix on the drive is ignored, so you can safely use @verb{'${root}'} as a
+drive specification.
+
+With the @option{-s} option, perform the reverse mapping as well, swapping
+the two drives.
+
+With the @option{-l} option, list the current mappings.
+
+With the @option{-r} option, reset all mappings to the default values.
+
+For example:
+
+@example
+drivemap -s (hd0) (hd1)
+@end example
+@end deffn
+
+
 @node echo
 @subsection echo
 
@@ -1605,6 +1747,41 @@ name syntax}), then list the contents of that directory.
 @end deffn
 
 
+@node parttool
+@subsection parttool
+
+@deffn Command parttool partition commands
+Make various modifications to partition table entries.
+
+Each @var{command} is either a boolean option, in which case it must be
+followed with @samp{+} or @samp{-} (with no intervening space) to enable or
+disable that option, or else it takes a value in the form
+@samp{@var{command}=@var{value}}.
+
+Currently, @command{parttool} is only useful on DOS partition tables (also
+known as Master Boot Record, or MBR).  On these partition tables, the
+following commands are available:
+
+@table @asis
+@item @samp{boot} (boolean)
+When enabled, this makes the selected partition be the active (bootable)
+partition on its disk, clearing the active flag on all other partitions.
+This command is limited to @emph{primary} partitions.
+
+@item @samp{type} (value)
+Change the type of an existing partition.  The value must be a number in the
+range 0-0xFF (prefix with @samp{0x} to enter it in hexadecimal).
+
+@item @samp{hidden} (boolean)
+When enabled, this hides the selected partition by setting the @dfn{hidden}
+bit in its partition type code; when disabled, unhides the selected
+partition by clearing this bit.  This is useful only when booting DOS or
+Wwindows and multiple primary FAT partitions exist in one disk.  See also
+@ref{DOS/Windows}.
+@end table
+@end deffn
+
+
 @node play
 @subsection play