个人工具

“UbuntuHelp:GrubHowto”的版本间的差异

来自Ubuntu中文

跳转至: 导航, 搜索
 
(未显示同一用户的10个中间版本)
第1行: 第1行:
 
{{From|https://help.ubuntu.com/community/GrubHowto}}
 
{{From|https://help.ubuntu.com/community/GrubHowto}}
 
{{Languages|UbuntuHelp:GrubHowto}}
 
{{Languages|UbuntuHelp:GrubHowto}}
'''Other Languages: [[UbuntuHelp:ComoGrub|ComoGrub]] (Spanish)'''
+
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png '''Note: These directions do not apply to clean installs of Karmic or later. Karmic onward uses [[UbuntuHelp:Grub2|Grub2]] ''unless you upgraded from a previous version of Ubuntu and have not manually upgraded to Grub2.'''''
=== What Is GRUB ===
+
== GRUB ==
GRUB is a bootloader, it is the first thing that loads when the computer starts.  It allows you to have different operating systems, and versions of them, on the same or different hard drives.  For example, if you have both Windows and Linux installed on a computer, GRUB would load before either of these and let you choose which one to boot. You can also create a boot floppy with GRUB to use in case of emergency.
+
GRUB is more than just a boot loader. It is also the world's best boot manager, meaning it is best installed to the Master Boot Record of the first hard disk. That way GRUB will be the first thing that loads when the computer starts.  It allows you to boot Linux directly or boot another boot loader which can then load its own operating system(s). You can have different operating systems, and versions of them, on the same or different hard drives.  For example, if you have both Windows and Linux installed on a computer, GRUB would load before either of these and let you choose which one to boot.
 +
You can also create a boot floppy with GRUB to use in case of emergency, GrubHowto/BootFloppy<<BR>>
 +
GRUB is Open Source software, the source code is open for anyone to inspect. From a security standpoint, you should only trust Open Source software.
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png Make sure that you use grub with sudo or in a root shell.  It is possible to start a grub shell as a regular user without the requisite privileges, the problem being that instead of receiving a "permission denied" error when executing a command grub will print bogus error messages, for example ones that suggest grub cannot find your hard disks. It's pretty frustrating to try to troubleshoot problems that don't really exist.
 
=== Modifying boot options in GRUB ===
 
=== Modifying boot options in GRUB ===
If you need to get into the grub menu, to modify boot options or choose a different kernel, you need to press 'ESC' just after it starts.   By default you have to press 'ESC' very quickly. To increase this time edit /boot/grub/menu.lst, increasing the seconds in the TIMEOUT part. Alternatively you could have the menu always come up at boot time.  To do this, comment out 'hiddenmenu' by inserting a # at the beginning of the line.
+
If you need to get into the grub menu to modify boot options or choose a different kernel, you need to press 'ESC' just after it starts.<<BR>>
After pressing 'ESC' you will be presented with a list of kernels and operating systems that you can boot.  To modify the boot options highlight
+
By default you have to press 'ESC' within three seconds. If you want to increase this time limit, you can edit the grub configuration file /boot/grub/'''menu.lst''', increasing the seconds in the TIMEOUT part.<<BR>>Alternatively you could have the menu always come up at boot time.  To do this, comment out 'hiddenmenu' by inserting a # at the beginning of the line.<<BR>>
the operating system you want to edit and press 'e'.  There you will be presented with lines starting with 'root', 'kernel', 'initrd', 'quiet' and 'savedefault'.  To receive a more verbose boot process you can remove the 'quiet' line by highlighting it and pressing 'd' to remove that line.  You will also need to highlight the 'kernel' line press 'e' to edit and remove the word 'splash' from the end of the line .  After making any necessary modifications you can press 'b' to boot that operating system.  These modifications will not persist across reboots.
+
 
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=IconNote.png If the Ubuntu installer detected other operating systems on the disk during the installation, then the grub menu will be displayed by default and the timeout will be increased, so the step above will be unnecessary.
 
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=IconNote.png If the Ubuntu installer detected other operating systems on the disk during the installation, then the grub menu will be displayed by default and the timeout will be increased, so the step above will be unnecessary.
 +
After pressing 'ESC' you will be presented with a list of kernels and operating systems that you can boot.<<BR>>
 +
You can press an up or down arrow key to highlight a different kernel or operating system to boot.<<BR>>
 +
For example, you might need to boot into 'recovery mode' to fix some problem with your operating system.<<BR>>
 +
To modify the boot options ''within'' the grub menu, highlight the operating system you want to edit and press 'e'.<<BR>>
 +
There you will be presented with lines starting with 'root', 'kernel', 'initrd', 'quiet' and 'savedefault'.<<BR>>
 +
You may wish to make changes to any of these lines before booting.<<BR>>
 +
Boot options can be appended to the end of the 'kernel' line, [https://help.ubuntu.com/7.04/installation-guide/i386/boot-parms.html Boot Parameters].<<BR>>
 +
To receive a more verbose boot process you can remove the 'quiet' line by highlighting it and pressing 'd' to remove that line.<<BR>>
 +
You may also want to highlight the 'kernel' line press 'e' to edit and remove the word 'splash' from the end of the line.<<BR>>
 +
After making any necessary modifications you can press 'b' to boot that operating system.<<BR>>
 +
These modifications will not persist across reboots.
 
=== Automagic Kernels List ===
 
=== Automagic Kernels List ===
Ubuntu uses a tool called <code><nowiki>update-grub</nowiki></code> to modify <code><nowiki>menu.lst</nowiki></code>. It automatically detects all of the kernels you have in the <code><nowiki>/boot</nowiki></code> directory, and applies various global settings to each one. Whenever you install kernel updates from the repositories, <code><nowiki>update-grub</nowiki></code> is run to update the grub settings.
+
Ubuntu uses a script called <code><nowiki>update-grub</nowiki></code> to modify <code><nowiki>menu.lst</nowiki></code>. Whenever you install kernel updates from the repositories, <code><nowiki>update-grub</nowiki></code> is run to update the grub settings. It automatically detects all of the kernels you have in the <code><nowiki>/boot</nowiki></code> directory, and applies various global settings to each one. <<BR>>
The relevant parts of <code><nowiki>menu.lst</nowiki></code> that <code><nowiki>update-grub</nowiki></code> looks at are the ones in between the "### BEGIN AUTOMAGIC KERNELS LIST" and "### END DEBIAN AUTOMAGIC KERNELS LIST" lines. Comments are preceded by at least two '#', e.g. '## this is a comment'. Global options are after single '#', e.g. '# groot=(hd0,4)'. The most common one to change is probably the groot option.  Change this if <code><nowiki>/boot</nowiki></code> resides on a different partition that <code><nowiki>/</nowiki></code>.  See the appropriate section on this page for more information about different <code><nowiki>/boot</nowiki></code> partitions. Another common option is 'kopt=', which are kernel options applied to all kernels in the <code><nowiki>menu.lst</nowiki></code>.
+
The relevant parts of <code><nowiki>menu.lst</nowiki></code> that <code><nowiki>update-grub</nowiki></code> looks at are the ones in between the "### BEGIN AUTOMAGIC KERNELS LIST" and "### END DEBIAN AUTOMAGIC KERNELS LIST" lines. <<BR>>
 +
In this section of the menu.lst file, comments are preceded by at least two '#', e.g. '## this is a comment'.<<BR>>
 +
Global options are after single '#', e.g. '# groot=(hd0,4)'.<<BR>>
 +
The most common one to change is probably the groot option.  Change this if <code><nowiki>/boot</nowiki></code> resides on a different partition than <code><nowiki>/</nowiki></code> (root).  See the appropriate section on this page for more information about different <code><nowiki>/boot</nowiki></code> partitions.<<BR>>
 +
Another common option is 'kopt=', which are kernel options applied to all kernels in the <code><nowiki>menu.lst</nowiki></code>, read the next section below.
 
=== Setting kernel parameters ===
 
=== Setting kernel parameters ===
In `/boot/grub/menu.lst`, you will find a line like this:  
+
In `/boot/grub/menu.lst`, you will find a line like this:
<code><nowiki># kopt=root=/dev/sda1 ro</nowiki></code>
+
<pre><nowiki>
 +
# kopt=root=/dev/sda1 ro
 +
</nowiki></pre>
 
This looks like a comment, but do not remove the '# ' at the beginning. /!\  THIS IS IMPORTANT: <code><nowiki>grub</nowiki></code> sees this line as a comment and ignores it, but it is used as a configuration parameter by <code><nowiki>update-grub</nowiki></code> to generate the contents of the file that <code><nowiki>grub</nowiki></code> will read at boot.
 
This looks like a comment, but do not remove the '# ' at the beginning. /!\  THIS IS IMPORTANT: <code><nowiki>grub</nowiki></code> sees this line as a comment and ignores it, but it is used as a configuration parameter by <code><nowiki>update-grub</nowiki></code> to generate the contents of the file that <code><nowiki>grub</nowiki></code> will read at boot.
If you require additional kernel parameters (for example, if someone has asked you to test booting with certain parameters in order to troubleshoot a problem), add them to the end of the line, for example to add `noapic`:  
+
If you require additional kernel parameters (for example, if someone has asked you to test booting with certain parameters in order to troubleshoot a problem), add them to the end of the line, for example to add `noapic`:
 
<code><nowiki># kopt=root=/dev/sda1 ro noapic</nowiki></code>
 
<code><nowiki># kopt=root=/dev/sda1 ro noapic</nowiki></code>
After editing the file, run:  
+
After editing the file, run:
<code><nowiki>sudo update-grub</nowiki></code>
+
<pre><nowiki>
 +
sudo update-grub
 +
</nowiki></pre>
 
Note that you can temporarily add kernel parameters at the grub boot menu also, by pressing 'e ' and editing the kernel line.
 
Note that you can temporarily add kernel parameters at the grub boot menu also, by pressing 'e ' and editing the kernel line.
 
=== If /boot is on another partition ===
 
=== If /boot is on another partition ===
If <code><nowiki>/boot</nowiki></code> is mounted on another partition and you use <code><nowiki>update-grub</nowiki></code>, then you may run into problems.  One fix is to use <code><nowiki>grub-install</nowiki></code>, which is a distribution-agnostic way to install the <code><nowiki>grub</nowiki></code> boot loader to a boot sector.
+
If <code><nowiki>/boot</nowiki></code> is mounted on another partition, it will mean that your Linux kernel will be restricted to the area of your hard disk where the /boot partition is located. That is a good way to overcome GRUB Error 18 in older computers.<<BR>> A Separate /boot partition is also needed when the root file system will be encrypted.<<BR>>
<code><nowiki>sudo grub-install --root-directory=/boot /dev/sda</nowiki></code>
+
If your operating system was installed that way by the Ubuntu installer then it should work perfectly without the user needing to do anything.<<BR>>
This is probably less desirable because <code><nowiki>update-grub</nowiki></code> is very good at setting things up properly, therefore it should be used instead.
+
If for some reason you need to create your own separate /boot partition at some later time after the installation of your Ubuntu operating system, you must create an entry in your /etc/fstab file for it. You will also need to edit your /boot/grub/menu.lst file with the correct partition number in the groot line, see 'Automagic Kernels List' further up in this page.<<BR>>
Another fix is to create a symlink in <code><nowiki>/boot</nowiki></code> to itself:
+
If you do those two things correctly then when you use <code><nowiki>update-grub</nowiki></code>, you should never run into any problems. <<BR>>
<pre><nowiki>cd /boot
+
A Separate /boot partition is not very good for people who want to boot more than one Linux operating system because iit is tricky to get more than one Linux to share the same Separate /boot partition peacefully. For that, you need a 'Dedicated GRUB Partition', which contains only GRUB files and not necessarily any Linux kernels, and is operating system independant.  
sudo ln -s . boot</nowiki></pre>
+
The reasoning behind this is when grub boots, it looks at whatever partition it is installed on. <code><nowiki>update-grub</nowiki></code> (and <code><nowiki>grub-install</nowiki></code>) assumes that everything is in <code><nowiki>/boot</nowiki></code>. When <code><nowiki>/boot</nowiki></code> is on the same partition as <code><nowiki>/</nowiki></code>, then all is OK, as <code><nowiki>menu.lst</nowiki></code> will be in <code><nowiki>/boot/grub</nowiki></code>. If <code><nowiki>/boot</nowiki></code> is on a separate partition, then grub sees <code><nowiki>/boot</nowiki></code> as <code><nowiki>/</nowiki></code> (hence the '--root-directory' above).  By adding a symlink, when it looks for <code><nowiki>/boot/grub</nowiki></code>, it will be there. By creating the symlink, you have put a loop in the file system, which may cause problems when using certain options of <code><nowiki>cp</nowiki></code>, <code><nowiki>mv</nowiki></code>, etc.
+
 
=== Changing the Disk that Grub is installed to ===
 
=== Changing the Disk that Grub is installed to ===
 
Consider the following problem: You have two hard drives, one SATA (/dev/sda), the other PATA (/dev/hda).  Your BIOS seems to think that PATA drives should always be booted in preference of SATA drives, but you want to boot from the SATA drive.  Grub can work around this problem.
 
Consider the following problem: You have two hard drives, one SATA (/dev/sda), the other PATA (/dev/hda).  Your BIOS seems to think that PATA drives should always be booted in preference of SATA drives, but you want to boot from the SATA drive.  Grub can work around this problem.
 
Finding groot
 
Finding groot
 
First, figure out what Grub names the drives.  This is listed in <code><nowiki>/boot/grub/device.map</nowiki></code>.  There you will find a table of Grub-style names (e.g. ''(hd0)'') and Linux-style names (e.g. ''/dev/hda/'').  You need to know what drive and partition <code><nowiki>/boot</nowiki></code> is on.  To find where <code><nowiki>/boot</nowiki></code> is, use <code><nowiki>df</nowiki></code>:
 
First, figure out what Grub names the drives.  This is listed in <code><nowiki>/boot/grub/device.map</nowiki></code>.  There you will find a table of Grub-style names (e.g. ''(hd0)'') and Linux-style names (e.g. ''/dev/hda/'').  You need to know what drive and partition <code><nowiki>/boot</nowiki></code> is on.  To find where <code><nowiki>/boot</nowiki></code> is, use <code><nowiki>df</nowiki></code>:
<code><nowiki>df /boot</nowiki></code>
+
<pre><nowiki>
This should tell you the Linux-style partition name where <code><nowiki>/boot</nowiki></code> is.  Then simply match it with the Grub-style name in <code><nowiki>device.map</nowiki></code>.  This is what ''groot'' should be.
+
df /boot
Example:
+
</nowiki></pre>
<pre><nowiki>$ df /boot
+
This should tell you the Linux-style partition name where <code><nowiki>/boot</nowiki></code> is.  Then simply match it with the Grub-style name in <code><nowiki>device.map</nowiki></code>.  This is what ''groot'' should be.
 +
Example:
 +
<pre><nowiki>
 +
$ df /boot
 
Filesystem            Size  Used Avail Use% Mounted on
 
Filesystem            Size  Used Avail Use% Mounted on
 
/dev/sda5              46M  15M  30M  33% /boot
 
/dev/sda5              46M  15M  30M  33% /boot
$ cat /boot/grub/device.map  
+
 
 +
$ cat /boot/grub/device.map
 
(hd0) /dev/hda
 
(hd0) /dev/hda
(hd1) /dev/sda</nowiki></pre>
+
(hd1) /dev/sda
So ''groot'' should be (hd1,4) (note that Grub partition numbers are always one less than Linux numbers).  Thus in <code><nowiki>/boot/grub/menu.lst</nowiki></code>,  
+
</nowiki></pre>
<pre><nowiki>## default grub root device
+
So ''groot'' should be (hd1,4) (note that Grub partition numbers are always one less than Linux numbers).  Thus in <code><nowiki>/boot/grub/menu.lst</nowiki></code>,
# groot=(hd1,4)</nowiki></pre>
+
<pre><nowiki>
 +
# groot=(hd1,4)
 +
</nowiki></pre>
 
Finding kernel root
 
Finding kernel root
 
The other piece of the puzzle is telling the kernel where <code><nowiki>/</nowiki></code> is.  Simply find out where <code><nowiki>/</nowiki></code> is mounted.
 
The other piece of the puzzle is telling the kernel where <code><nowiki>/</nowiki></code> is.  Simply find out where <code><nowiki>/</nowiki></code> is mounted.
<code><nowiki>df /</nowiki></code>
+
<pre><nowiki>
This is what ''root'' should be in ''kopt''.
+
df /
 +
</nowiki></pre>
 +
This is what ''root'' should be in ''kopt''.
 
Example:
 
Example:
<pre><nowiki>$ df /
+
<pre><nowiki>
 +
$ df /
 
Filesystem            Size  Used Avail Use% Mounted on
 
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              14G  8.3G  5.0G  63% /</nowiki></pre>
+
/dev/sda3              14G  8.3G  5.0G  63% /
<code><nowiki>/</nowiki></code> is on <code><nowiki>/dev/hda3</nowiki></code>.  Because this is going to be passed to the kernel, there's no need to translate to Grub notation.  The 'ro' causes the kernel to mount the drive read-only initially; later the drive will be remounted read/write.  This is generally done so <code><nowiki>fsck</nowiki></code> can run on <code><nowiki>/</nowiki></code> at bootup.
+
</nowiki></pre>
<pre><nowiki>## default kernel options
+
<code><nowiki>/</nowiki></code> is on <code><nowiki>/dev/sda3</nowiki></code>.  Because this is going to be passed to the kernel, there's no need to translate to Grub notation.  The 'ro' causes the kernel to mount the drive read-only initially; later the drive will be remounted read/write.  This is generally done so <code><nowiki>fsck</nowiki></code> can run on <code><nowiki>/</nowiki></code> at bootup.
# kopt=root=/dev/sda3 ro</nowiki></pre>
+
<pre><nowiki>
 +
# kopt=root=/dev/sda3 ro
 +
</nowiki></pre>
 
In summary, ''groot'' is where <code><nowiki>/boot</nowiki></code> is, and is what Grub sees that drive as.  ''kopt=root'' is where <code><nowiki>/</nowiki></code> is, and is what the kernel sees that drive as.
 
In summary, ''groot'' is where <code><nowiki>/boot</nowiki></code> is, and is what Grub sees that drive as.  ''kopt=root'' is where <code><nowiki>/</nowiki></code> is, and is what the kernel sees that drive as.
 
=== Boot splash images ===
 
=== Boot splash images ===
Grub allows an image to be displayed behind the menu.  You can obtain a set of images with the package "grub-splashimages", or you can make your own.  The images must be 640x480 pixels, contain no more than 16 colors (but a smaller number like 12 works better to allow some different colors for the menu text), and be in gzipped xpm format.  The GIMP can be used to resize (Image -> Scale Image...), reduce colors (Image -> Mode -> Indexed...), and can save to .xpm.gz files.
+
Grub allows an image to be displayed behind the menu.  You can obtain a set of images with the package "grub-splashimages", or you can make your own.  The images must be 640x480 pixels, contain no more than 16 colors (but a smaller number like 12 works better to allow some different colors for the menu text), and be in gzipped xpm format.  The GIMP can be used to resize (Image -> Scale Image...), reduce colors (Image -> Mode -> Indexed...), and can save to .xpm.gz files.
 
==== Manual configuration ====
 
==== Manual configuration ====
 
After creating a splash image, add a line like
 
After creating a splash image, add a line like
<code><nowiki>splashimage=(hd0,4)/boot/grub/splash.xpm.gz</nowiki></code>
+
<pre><nowiki>
to your menu.lst file.  A useful trick is to make a symlink to the actual image named splash.xpm.gz.  
+
splashimage=(hd0,4)/boot/grub/splash.xpm.gz
<pre><nowiki>cd /boot/grub
+
</nowiki></pre>
sudo ln -s my_image.xpm.gz splash.xpm.gz</nowiki></pre>
+
to your menu.lst file.  A useful trick is to make a symlink to the actual image named splash.xpm.gz.
Grub loads the image from the disk upon boot; it is not stored in the MBR.  If you use a symlink, you will not have to edit menu.lst and reinstall grub to change the image, you just have to change the symlink. Make sure any symlink does not point to a file on another partition, for instance if you have /boot on a separate partition.  
+
<pre><nowiki>
Here is an image of the GNU by Peter Gerwinski: https://help.ubuntu.com/community/GrubHowto?action=AttachFile&do=get&target=gnu-head.xpm.gz
+
cd /boot/grub
 +
sudo ln -s my_image.xpm.gz splash.xpm.gz
 +
</nowiki></pre>
 +
Grub loads the image from the disk upon boot; it is not stored in the MBR.  If you use a symlink, you will not have to edit menu.lst and reinstall grub to change the image, you just have to change the symlink. Make sure any symlink does not point to a file on another partition, for instance if you have /boot on a separate partition.
 +
Here is an image of the GNU by Peter Gerwinski: [[UbuntuHelp:attachment:gnu-head.xpm.gz|attachment:gnu-head.xpm.gz]]
 
==== Splash Image with update-grub ====
 
==== Splash Image with update-grub ====
The command '''update-grub''' will automatically pick up /boot/grub/splash.xpm.gz and configure the ''menu.lst'' file for you. It will take care of the correct hdX and partition number [no need to type in (hd0,4)].  
+
The command '''update-grub''' will automatically pick up /boot/grub/splash.xpm.gz and configure the ''menu.lst'' file for you. It will take care of the correct hdX and partition number [no need to type in (hd0,4)].
<pre><nowiki>sudo apt-get install grub-splashimages
+
<pre><nowiki>
 +
sudo apt-get install grub-splashimages
 
sudo ln -s /boot/grub/splashimages/my_image.xpm.gz /boot/grub/splash.xpm.gz
 
sudo ln -s /boot/grub/splashimages/my_image.xpm.gz /boot/grub/splash.xpm.gz
sudo update-grub</nowiki></pre>
+
sudo update-grub
 +
</nowiki></pre>
 
'''Note:''' replace the my_image.xpm.gz with the one that you want.
 
'''Note:''' replace the my_image.xpm.gz with the one that you want.
 +
=== Backup, Repairing and Reinstalling GRUB ===
 +
To make a backup a copy of the existing menu.lst file  use:
 +
<pre><nowiki>
 +
cp /boot/grub/menu.lst /boot/grub/menu.lst.old
 +
</nowiki></pre>
 +
You can try re-installing the grub using the Ubuntu Live CD, in two different ways.
 +
==== GUI ====
 +
<ol><li>Boot your computer up with Ubuntu CD
 +
</li><li>Go through all the process until you reach "[!!!] Disk Partition"
 +
</li><li>Select Manual Partition
 +
</li><li>Mount your appropriate linux partions <code><nowiki> / /boot swap ..... </nowiki></code>
 +
</li><li>'''DO NOT FORMAT THEM.'''
 +
</li><li>Finish the manual partition
 +
</li><li>Say "Yes" when it asks you to save the changes
 +
</li><li>It will give you errors saying that "the system couldn't install ....." after that
 +
</li><li>Ignore them, keep select "continue" until you get back to the Ubuntu installation menu</li></ol>
 +
 +
10. Jump to "Install Grub ...."
 +
11. Once it is finished, just restart your computer
 +
==== Command line ====
 +
<ol><li>Boot your computer up with Ubuntu CD
 +
</li><li>Open a terminal window or switch to a tty.
 +
</li><li>Go SuperUser (that is, type "sudo -s"). Enter root passwords as necessary.
 +
</li><li>Type "grub"
 +
</li><li>Type "find /boot/grub/stage1". You'll get a response like "(hd0,1)". Use whatever your computer spits out for the following lines.
 +
</li><li>Type "root (hd0,1)", or whatever your hard disk + boot partition numbers are for Ubuntu.
 +
</li><li>Type "setup (hd0)", to install GRUB to MBR, or "setup (hd0,1)" or whatever your hard disk + partition nr is, to install GRUB to a partition.
 +
</li><li>Quit grub by typing "quit".
 +
</li><li>Reboot and remove the bootable CD.</li></ol>
 +
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=IconNote.png If you can't boot into any of your Linux OSs:
 +
<<BR>>First, you need to get a grub prompt (grub>) somehow. So what you can do is:
 +
* Use a rescue disk, like Super Grub Disk, from which you can boot into your OS, or press the “c” key to get a GRUB prompt.
 +
* Use your Live *ubuntu CD. Boot into the [[UbuntuHelp:LiveCD|LiveCD]].  Now get a terminal and proceed exactly as in Case 1, starting with '''sudo grub''' to get a GRUB prompt.  Note: grub is not included with 9.10 Ubuntu [[UbuntuHelp:LiveCD|LiveCD]]
 +
=== Manually boot into a Linux OS ===
 +
These are the same 3 methods you see in a menu.lst, except in menu.lst you have “title” lines and you don’t need the boot command (since it’s implied).
 +
'''Method #1''': Chainload
 +
To chainload Linux which is on (hdx,y):
 +
<pre><nowiki>
 +
grub>  root  (hdx,y)
 +
grub>  chainloader +1
 +
grub>  boot
 +
</nowiki></pre>
 +
Note:  Windows is always booted by chainloading
 +
Note:  To chainload, GRUB must first be installed in the OS’s root partition.  See Installing GRUB. So, run the commands: 
 +
<pre><nowiki>
 +
grub> root (hdx,y), grub> setup (hdx,y)
 +
</nowiki></pre>
 +
'''Method #2''': Use the specific kernel-initrd commands (as in a full menu.lst), ending with the boot command.<<BR>><<BR>>
 +
'''Method #3''':  Configfile
 +
This almost always works!  Example:  To boot into Kubuntu on sdb3 (= (hd1,2)), type
 +
<pre><nowiki>
 +
grub>  configfile  (hd1,2)/boot/grub/menu.lst    # you’ll get the boot menu on sdb3
 +
</nowiki></pre>
 
=== Creating a boot floppy ===
 
=== Creating a boot floppy ===
 
You can use grub to create a boot floppy. See [[UbuntuHelp:GrubHowto/BootFloppy|BootFloppy]]
 
You can use grub to create a boot floppy. See [[UbuntuHelp:GrubHowto/BootFloppy|BootFloppy]]
第78行: 第168行:
 
By default, Grub in Ubuntu boots Ubuntu by default. If you wish to change this to another operating system, see [[UbuntuHelp:GrubHowto/ChangeDefaultOS|ChangeDefaultOS]]
 
By default, Grub in Ubuntu boots Ubuntu by default. If you wish to change this to another operating system, see [[UbuntuHelp:GrubHowto/ChangeDefaultOS|ChangeDefaultOS]]
 
=== Network booting ===
 
=== Network booting ===
If you use LTSP or Edubuntu, you may want to boot from your network card.  
+
If you use LTSP or Edubuntu, you may want to boot from your network card.
 
Specific network cards need a specifc rom to boot from. To find which one you need, run <code><nowiki>lsmod</nowiki></code> and then search for your floppy. Then go to www.rom-o-matic.com and get the appropriate rom.
 
Specific network cards need a specifc rom to boot from. To find which one you need, run <code><nowiki>lsmod</nowiki></code> and then search for your floppy. Then go to www.rom-o-matic.com and get the appropriate rom.
 
Edit `/boot/grub/menu.lst` and add the following before <code><nowiki>### BEGIN AUTOMAGIC KERNELS LIST</nowiki></code> or after <code><nowiki>### END DEBIAN AUTOMAGIC KERNELS LIST</nowiki></code>, otherwise your changes will be wiped out by security updates, etc.
 
Edit `/boot/grub/menu.lst` and add the following before <code><nowiki>### BEGIN AUTOMAGIC KERNELS LIST</nowiki></code> or after <code><nowiki>### END DEBIAN AUTOMAGIC KERNELS LIST</nowiki></code>, otherwise your changes will be wiped out by security updates, etc.
<pre><nowiki>title LTSP
+
<pre><nowiki>
 +
title LTSP
 
root (hd0,2)
 
root (hd0,2)
kernel /boot/(rom you get from rom-o-matic)</nowiki></pre>
+
kernel /boot/(rom you get from rom-o-matic)
 +
</nowiki></pre>
 
=== Security ===
 
=== Security ===
 
By editing the boot command in grub, root access can be gained without the need of a password. To avoid this, edit the part "## password ['--md5'] passwd" of `/boot/grub/menu.lst`:
 
By editing the boot command in grub, root access can be gained without the need of a password. To avoid this, edit the part "## password ['--md5'] passwd" of `/boot/grub/menu.lst`:
<pre><nowiki>password yourfancyplaintextpassword
+
<pre><nowiki>
 +
password yourfancyplaintextpassword
 
</nowiki></pre>
 
</nowiki></pre>
 
Insert the password of your choice. To prevent normal users to read this password, you should also remove read permission for these:
 
Insert the password of your choice. To prevent normal users to read this password, you should also remove read permission for these:
<pre><nowiki>sudo chmod o-r /boot/grub/menu.lst
+
<pre><nowiki>
 +
sudo chmod o-r /boot/grub/menu.lst
 
</nowiki></pre>
 
</nowiki></pre>
You can also use a md5 password, more info in the [http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&chap=2 Gentoo Security Handbook].
+
You can also use an md5 password, more info in the [http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&chap=2 Gentoo Security Handbook].
 +
=== Windows ===
 +
See :
 +
* [[UbuntuHelp:WindowsDualBoot|WindowsDualBoot]]
 +
* [[UbuntuHelp:RecoveringUbuntuAfterInstallingWindows|RecoveringUbuntuAfterInstallingWindows]]
 
=== More information ===
 
=== More information ===
The official [http://www.gnu.org/software/grub/manual/html_node/index.html GNU GRUB manual] has a "DOS/Windows" chapter with hints on setting up dual-boot systems.
+
* The official [http://www.gnu.org/software/grub/manual/html_node/index.html GNU GRUB manual] has a "DOS/Windows" chapter with hints on setting up dual-boot systems.
[http://users.bigpond.net.au/hermanzone/p15.htm This] page has a lot of Grub information (and other general information).
+
* Illustrated Dual Boot Site has a [http://users.bigpond.net.au/hermanzone/p15.htm GRUB Page] which has a lot of information about GRUB in Ubuntu.
 +
* [http://www.howtogeek.com/howto/ubuntu/reinstall-ubuntu-grub-bootloader-after-windows-wipes-it-out/ Reinstall Ubuntu Grub Bootloader After Windows Wipes it Out]
 +
* [http://www.gnu.org/software/grub/manual/grub.html#Installing-GRUB-using-grub_002dinstall Installing GRUB using grub-install]
 +
* [http://linuxmint.com/wiki/index.php/How_to_repair_your_grub How To Repair your GRUB]
 +
* [[UbuntuHelp:HowtoPartition|HowtoPartition]]
 +
* http://www.supergrubdisk.org/wiki/Howto_Boot_Windows_without_problems#Grub_solution
 +
* [http://www.supergrubdisk.org/wiki/AutoSuperGrubDisk Auto SuperGrub Disk]
 +
== Other Languages ==
 +
[[UbuntuHelp:ComoGrub|ComoGrub]] (Spanish)
 
----
 
----
[[category:CategoryDocumentation]]
+
[[category:CategoryBootAndPartition]]
  
 
[[category:UbuntuHelp]]
 
[[category:UbuntuHelp]]

2010年5月19日 (三) 22:32的最新版本


IconsPage?action=AttachFile&do=get&target=important.png Note: These directions do not apply to clean installs of Karmic or later. Karmic onward uses Grub2 unless you upgraded from a previous version of Ubuntu and have not manually upgraded to Grub2.

GRUB

GRUB is more than just a boot loader. It is also the world's best boot manager, meaning it is best installed to the Master Boot Record of the first hard disk. That way GRUB will be the first thing that loads when the computer starts. It allows you to boot Linux directly or boot another boot loader which can then load its own operating system(s). You can have different operating systems, and versions of them, on the same or different hard drives. For example, if you have both Windows and Linux installed on a computer, GRUB would load before either of these and let you choose which one to boot. You can also create a boot floppy with GRUB to use in case of emergency, GrubHowto/BootFloppy<
> GRUB is Open Source software, the source code is open for anyone to inspect. From a security standpoint, you should only trust Open Source software. IconsPage?action=AttachFile&do=get&target=important.png Make sure that you use grub with sudo or in a root shell. It is possible to start a grub shell as a regular user without the requisite privileges, the problem being that instead of receiving a "permission denied" error when executing a command grub will print bogus error messages, for example ones that suggest grub cannot find your hard disks. It's pretty frustrating to try to troubleshoot problems that don't really exist.

Modifying boot options in GRUB

If you need to get into the grub menu to modify boot options or choose a different kernel, you need to press 'ESC' just after it starts.<
> By default you have to press 'ESC' within three seconds. If you want to increase this time limit, you can edit the grub configuration file /boot/grub/menu.lst, increasing the seconds in the TIMEOUT part.<
>Alternatively you could have the menu always come up at boot time. To do this, comment out 'hiddenmenu' by inserting a # at the beginning of the line.<
> IconsPage?action=AttachFile&do=get&target=IconNote.png If the Ubuntu installer detected other operating systems on the disk during the installation, then the grub menu will be displayed by default and the timeout will be increased, so the step above will be unnecessary. After pressing 'ESC' you will be presented with a list of kernels and operating systems that you can boot.<
> You can press an up or down arrow key to highlight a different kernel or operating system to boot.<
> For example, you might need to boot into 'recovery mode' to fix some problem with your operating system.<
> To modify the boot options within the grub menu, highlight the operating system you want to edit and press 'e'.<
> There you will be presented with lines starting with 'root', 'kernel', 'initrd', 'quiet' and 'savedefault'.<
> You may wish to make changes to any of these lines before booting.<
> Boot options can be appended to the end of the 'kernel' line, Boot Parameters.<
> To receive a more verbose boot process you can remove the 'quiet' line by highlighting it and pressing 'd' to remove that line.<
> You may also want to highlight the 'kernel' line press 'e' to edit and remove the word 'splash' from the end of the line.<
> After making any necessary modifications you can press 'b' to boot that operating system.<
> These modifications will not persist across reboots.

Automagic Kernels List

Ubuntu uses a script called update-grub to modify menu.lst. Whenever you install kernel updates from the repositories, update-grub is run to update the grub settings. It automatically detects all of the kernels you have in the /boot directory, and applies various global settings to each one. <
> The relevant parts of menu.lst that update-grub looks at are the ones in between the "### BEGIN AUTOMAGIC KERNELS LIST" and "### END DEBIAN AUTOMAGIC KERNELS LIST" lines. <
> In this section of the menu.lst file, comments are preceded by at least two '#', e.g. '## this is a comment'.<
> Global options are after single '#', e.g. '# groot=(hd0,4)'.<
> The most common one to change is probably the groot option. Change this if /boot resides on a different partition than / (root). See the appropriate section on this page for more information about different /boot partitions.<
> Another common option is 'kopt=', which are kernel options applied to all kernels in the menu.lst, read the next section below.

Setting kernel parameters

In `/boot/grub/menu.lst`, you will find a line like this:

# kopt=root=/dev/sda1 ro

This looks like a comment, but do not remove the '# ' at the beginning. /!\ THIS IS IMPORTANT: grub sees this line as a comment and ignores it, but it is used as a configuration parameter by update-grub to generate the contents of the file that grub will read at boot. If you require additional kernel parameters (for example, if someone has asked you to test booting with certain parameters in order to troubleshoot a problem), add them to the end of the line, for example to add `noapic`: # kopt=root=/dev/sda1 ro noapic After editing the file, run:

sudo update-grub

Note that you can temporarily add kernel parameters at the grub boot menu also, by pressing 'e ' and editing the kernel line.

If /boot is on another partition

If /boot is mounted on another partition, it will mean that your Linux kernel will be restricted to the area of your hard disk where the /boot partition is located. That is a good way to overcome GRUB Error 18 in older computers.<
> A Separate /boot partition is also needed when the root file system will be encrypted.<
> If your operating system was installed that way by the Ubuntu installer then it should work perfectly without the user needing to do anything.<
> If for some reason you need to create your own separate /boot partition at some later time after the installation of your Ubuntu operating system, you must create an entry in your /etc/fstab file for it. You will also need to edit your /boot/grub/menu.lst file with the correct partition number in the groot line, see 'Automagic Kernels List' further up in this page.<
> If you do those two things correctly then when you use update-grub, you should never run into any problems. <
> A Separate /boot partition is not very good for people who want to boot more than one Linux operating system because iit is tricky to get more than one Linux to share the same Separate /boot partition peacefully. For that, you need a 'Dedicated GRUB Partition', which contains only GRUB files and not necessarily any Linux kernels, and is operating system independant.

Changing the Disk that Grub is installed to

Consider the following problem: You have two hard drives, one SATA (/dev/sda), the other PATA (/dev/hda). Your BIOS seems to think that PATA drives should always be booted in preference of SATA drives, but you want to boot from the SATA drive. Grub can work around this problem. Finding groot First, figure out what Grub names the drives. This is listed in /boot/grub/device.map. There you will find a table of Grub-style names (e.g. (hd0)) and Linux-style names (e.g. /dev/hda/). You need to know what drive and partition /boot is on. To find where /boot is, use df:

df /boot

This should tell you the Linux-style partition name where /boot is. Then simply match it with the Grub-style name in device.map. This is what groot should be. Example:

$ df /boot
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5              46M   15M   30M  33% /boot

$ cat /boot/grub/device.map
(hd0)	/dev/hda
(hd1)	/dev/sda

So groot should be (hd1,4) (note that Grub partition numbers are always one less than Linux numbers). Thus in /boot/grub/menu.lst,

# groot=(hd1,4)

Finding kernel root The other piece of the puzzle is telling the kernel where / is. Simply find out where / is mounted.

df /

This is what root should be in kopt. Example:

$ df /
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              14G  8.3G  5.0G  63% /

/ is on /dev/sda3. Because this is going to be passed to the kernel, there's no need to translate to Grub notation. The 'ro' causes the kernel to mount the drive read-only initially; later the drive will be remounted read/write. This is generally done so fsck can run on / at bootup.

# kopt=root=/dev/sda3 ro

In summary, groot is where /boot is, and is what Grub sees that drive as. kopt=root is where / is, and is what the kernel sees that drive as.

Boot splash images

Grub allows an image to be displayed behind the menu. You can obtain a set of images with the package "grub-splashimages", or you can make your own. The images must be 640x480 pixels, contain no more than 16 colors (but a smaller number like 12 works better to allow some different colors for the menu text), and be in gzipped xpm format. The GIMP can be used to resize (Image -> Scale Image...), reduce colors (Image -> Mode -> Indexed...), and can save to .xpm.gz files.

Manual configuration

After creating a splash image, add a line like

splashimage=(hd0,4)/boot/grub/splash.xpm.gz

to your menu.lst file. A useful trick is to make a symlink to the actual image named splash.xpm.gz.

cd /boot/grub
sudo ln -s my_image.xpm.gz splash.xpm.gz

Grub loads the image from the disk upon boot; it is not stored in the MBR. If you use a symlink, you will not have to edit menu.lst and reinstall grub to change the image, you just have to change the symlink. Make sure any symlink does not point to a file on another partition, for instance if you have /boot on a separate partition. Here is an image of the GNU by Peter Gerwinski: attachment:gnu-head.xpm.gz

Splash Image with update-grub

The command update-grub will automatically pick up /boot/grub/splash.xpm.gz and configure the menu.lst file for you. It will take care of the correct hdX and partition number [no need to type in (hd0,4)].

sudo apt-get install grub-splashimages
sudo ln -s /boot/grub/splashimages/my_image.xpm.gz /boot/grub/splash.xpm.gz
sudo update-grub

Note: replace the my_image.xpm.gz with the one that you want.

Backup, Repairing and Reinstalling GRUB

To make a backup a copy of the existing menu.lst file use:

cp /boot/grub/menu.lst /boot/grub/menu.lst.old

You can try re-installing the grub using the Ubuntu Live CD, in two different ways.

GUI

  1. Boot your computer up with Ubuntu CD
  2. Go through all the process until you reach "[!!!] Disk Partition"
  3. Select Manual Partition
  4. Mount your appropriate linux partions / /boot swap .....
  5. DO NOT FORMAT THEM.
  6. Finish the manual partition
  7. Say "Yes" when it asks you to save the changes
  8. It will give you errors saying that "the system couldn't install ....." after that
  9. Ignore them, keep select "continue" until you get back to the Ubuntu installation menu

10. Jump to "Install Grub ...." 11. Once it is finished, just restart your computer

Command line

  1. Boot your computer up with Ubuntu CD
  2. Open a terminal window or switch to a tty.
  3. Go SuperUser (that is, type "sudo -s"). Enter root passwords as necessary.
  4. Type "grub"
  5. Type "find /boot/grub/stage1". You'll get a response like "(hd0,1)". Use whatever your computer spits out for the following lines.
  6. Type "root (hd0,1)", or whatever your hard disk + boot partition numbers are for Ubuntu.
  7. Type "setup (hd0)", to install GRUB to MBR, or "setup (hd0,1)" or whatever your hard disk + partition nr is, to install GRUB to a partition.
  8. Quit grub by typing "quit".
  9. Reboot and remove the bootable CD.

IconsPage?action=AttachFile&do=get&target=IconNote.png If you can't boot into any of your Linux OSs: <
>First, you need to get a grub prompt (grub>) somehow. So what you can do is:

  • Use a rescue disk, like Super Grub Disk, from which you can boot into your OS, or press the “c” key to get a GRUB prompt.
  • Use your Live *ubuntu CD. Boot into the LiveCD. Now get a terminal and proceed exactly as in Case 1, starting with sudo grub to get a GRUB prompt. Note: grub is not included with 9.10 Ubuntu LiveCD

Manually boot into a Linux OS

These are the same 3 methods you see in a menu.lst, except in menu.lst you have “title” lines and you don’t need the boot command (since it’s implied). Method #1: Chainload To chainload Linux which is on (hdx,y):

grub>  root  (hdx,y)
grub>  chainloader +1
grub>  boot

Note: Windows is always booted by chainloading Note: To chainload, GRUB must first be installed in the OS’s root partition. See Installing GRUB. So, run the commands:

grub> root (hdx,y), grub> setup (hdx,y)

Method #2: Use the specific kernel-initrd commands (as in a full menu.lst), ending with the boot command.<
><
> Method #3: Configfile This almost always works! Example: To boot into Kubuntu on sdb3 (= (hd1,2)), type

grub>  configfile  (hd1,2)/boot/grub/menu.lst    # you’ll get the boot menu on sdb3

Creating a boot floppy

You can use grub to create a boot floppy. See BootFloppy

Change the default operating system

By default, Grub in Ubuntu boots Ubuntu by default. If you wish to change this to another operating system, see ChangeDefaultOS

Network booting

If you use LTSP or Edubuntu, you may want to boot from your network card. Specific network cards need a specifc rom to boot from. To find which one you need, run lsmod and then search for your floppy. Then go to www.rom-o-matic.com and get the appropriate rom. Edit `/boot/grub/menu.lst` and add the following before ### BEGIN AUTOMAGIC KERNELS LIST or after ### END DEBIAN AUTOMAGIC KERNELS LIST, otherwise your changes will be wiped out by security updates, etc.

title LTSP
root (hd0,2)
kernel /boot/(rom you get from rom-o-matic)

Security

By editing the boot command in grub, root access can be gained without the need of a password. To avoid this, edit the part "## password ['--md5'] passwd" of `/boot/grub/menu.lst`:

password yourfancyplaintextpassword

Insert the password of your choice. To prevent normal users to read this password, you should also remove read permission for these:

sudo chmod o-r /boot/grub/menu.lst

You can also use an md5 password, more info in the Gentoo Security Handbook.

Windows

See :

More information

Other Languages

ComoGrub (Spanish)