* 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.
This commit is contained in:
parent
bb8ea0f5c3
commit
1c41aa7883
2 changed files with 193 additions and 5 deletions
11
ChangeLog
11
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>
|
2010-06-02 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
* docs/grub.texi (GNU GRUB manual): Remove reference to `Invoking
|
* docs/grub.texi (GNU GRUB manual): Remove reference to `Invoking
|
||||||
|
|
187
docs/grub.texi
187
docs/grub.texi
|
@ -647,6 +647,35 @@ use more complicated instructions. @xref{DOS/Windows}, for more
|
||||||
information.
|
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
|
@node OS-specific notes
|
||||||
@section Some caveats on OS-specific issues
|
@section Some caveats on OS-specific issues
|
||||||
|
|
||||||
|
@ -655,6 +684,9 @@ Here, we describe some caveats on several operating systems.
|
||||||
@menu
|
@menu
|
||||||
* GNU/Hurd::
|
* GNU/Hurd::
|
||||||
* GNU/Linux::
|
* GNU/Linux::
|
||||||
|
* DOS/Windows::
|
||||||
|
* SCO UnixWare::
|
||||||
|
* QNX::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
|
@ -696,6 +728,87 @@ the size, run the command @command{uppermem} @emph{before} loading the
|
||||||
kernel. @xref{uppermem}, for more information.
|
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
|
@node Configuration
|
||||||
@chapter Writing your own configuration file
|
@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
|
* configfile:: Load a configuration file
|
||||||
* crc:: Calculate CRC32 checksums
|
* crc:: Calculate CRC32 checksums
|
||||||
* date:: Display or set current date and time
|
* date:: Display or set current date and time
|
||||||
|
* drivemap:: Map a drive to another
|
||||||
* echo:: Display a line of text
|
* echo:: Display a line of text
|
||||||
* export:: Export an environment variable
|
* export:: Export an environment variable
|
||||||
* gettext:: Translate a string
|
* gettext:: Translate a string
|
||||||
|
@ -1334,6 +1448,7 @@ you forget a command, you can run the command @command{help}
|
||||||
* insmod:: Insert a module
|
* insmod:: Insert a module
|
||||||
* keystatus:: Check key modifier status
|
* keystatus:: Check key modifier status
|
||||||
* ls:: List devices or files
|
* ls:: List devices or files
|
||||||
|
* parttool:: Modify partition table entries
|
||||||
* play:: Play a tune
|
* play:: Play a tune
|
||||||
* reboot:: Reboot your computer
|
* reboot:: Reboot your computer
|
||||||
* set:: Set an environment variable
|
* set:: Set an environment variable
|
||||||
|
@ -1399,11 +1514,12 @@ grub> @kbd{cat /etc/fstab}
|
||||||
|
|
||||||
@deffn Command chainloader [@option{--force}] file
|
@deffn Command chainloader [@option{--force}] file
|
||||||
Load @var{file} as a chain-loader. Like any other file loaded by the
|
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
|
filesystem code, it can use the blocklist notation (@pxref{Block list
|
||||||
sector of the current partition with @samp{+1}. If you specify the
|
syntax}) to grab the first sector of the current partition with @samp{+1}.
|
||||||
option @option{--force}, then load @var{file} forcibly, whether it has a
|
If you specify the option @option{--force}, then load @var{file} forcibly,
|
||||||
correct signature or not. This is required when you want to load a
|
whether it has a correct signature or not. This is required when you want to
|
||||||
defective boot loader, such as SCO UnixWare 7.1 (@pxref{SCO UnixWare}).
|
load a defective boot loader, such as SCO UnixWare 7.1 (@pxref{SCO
|
||||||
|
UnixWare}).
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
|
@ -1458,6 +1574,32 @@ hour, minute, and second unchanged.
|
||||||
@end deffn
|
@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
|
@node echo
|
||||||
@subsection echo
|
@subsection echo
|
||||||
|
|
||||||
|
@ -1605,6 +1747,41 @@ name syntax}), then list the contents of that directory.
|
||||||
@end deffn
|
@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
|
@node play
|
||||||
@subsection play
|
@subsection play
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue