| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 | <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [  <!ENTITY % general-entities SYSTEM "../general.ent">  %general-entities;]><sect1 id="ch-bootable-grub" role="wrap">  <?dbhtml filename="grub.html"?>  <sect1info condition="script">    <productname>grub</productname>    <productnumber>&grub-version;</productnumber>    <address>&grub-url;</address>  </sect1info>  <title>Using GRUB to Set Up the Boot Process</title>  <sect2>    <title>Introduction</title>    <para>Boot loading can be a complex area, so a few cautionary    words are in order. Be familiar with the current boot loader and any other    operating systems present on the hard drive(s) that need to be    bootable. Make sure that an emergency boot disk is ready to    <quote>rescue</quote> the computer if the computer becomes    unusable (un-bootable).</para>    <para>The procedure involves writing some special GRUB files to specific    locations on the hard drive. We highly recommend creating a GRUB boot    floppy diskette as a backup. Insert a blank floppy diskette and run the    following commands:</para><screen role="nodump"><userinput>cd /tmpgrub-mkrescue --output=grub-img.isodd if=grub-img.iso of=/dev/fd0 bs=1440 count=1</userinput></screen>    <para>Alternatively, a boot CD can be created by using your host system's    CD burning tools to burn the <filename>grub-img.iso</filename> on to a    blank CD.</para>    <para>GRUB uses its own naming structure for drives and partitions in    the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis>    is the hard drive number and <emphasis>m</emphasis> is the partition    number. The hard drive number starts from zero, but the partition number    starts from one for normal partitions and five for extended partitions.      Note that this is different from earlier versions where     both numbers started from zero. For example, partition <filename    class="partition">sda1</filename> is <emphasis>(hd0,1)</emphasis> to    GRUB and <filename class="partition">sdb3</filename> is    <emphasis>(hd1,3)</emphasis>. In contrast to Linux, GRUB does not    consider CD-ROM drives to be hard drives. For example, if using a CD    on <filename class="partition">hdb</filename> and a second hard drive    on <filename class="partition">hdc</filename>, that second hard drive    would still be <emphasis>(hd1)</emphasis>.</para>    <para>You can determine what GRUB thinks your disk devices are by running:</para><screen role="nodump"><userinput>grub-mkdevicemap --device-map=device.mapcat device.map</userinput></screen>    <para>The location of the boot partition is a choice of the user that    affects the configuration.  One recommendation is to have a separate small    (suggested size is 100 MB) partition just for boot information.  That way    each build, whether LFS or some commercial distro, can access the same boot    files and access can be made from any booted system.  If you choose to do    this, you will need to mount the separate partition, move all files in the    current <filename class="directory">/boot</filename> directory (e.g. the    linux kernel you just built in the previous section) to the new partition.    You will then need to unmount the partition and remount it as <filename    class="directory">/boot</filename>.  If you do this, be sure to update    <filename>/etc/fstab</filename>.</para>    <para>Using the current lfs partition will also work, but configuration    for multiple systems is more difficult.</para>  </sect2>  <sect2>    <title>Setting Up the Configuration</title>    <para>Using the above information, determine the appropriate    designator for the root partition (or boot partition, if a separate    one is used). For the following example, it is assumed that the root    (or separate boot) partition is <filename    class="partition">sda2</filename>.</para>    <para>Install the GRUB files into <filename    class="directory">/boot/grub</filename>:</para> <screen role="nodump"><userinput>grub-install --grub-setup=/bin/true /dev/sda</userinput></screen>    <para>We use --grub-setup=/bin/true for now to prevent updating the    Master Boot Record (MBR).  In this way, we can test our installation     before committing to a change that is hard to revert.</para>    <para>Generate <filename>/boot/grub/grub.cfg</filename>:</para><screen role="nodump"><userinput>grub-mkconfig -o /boot/grub/grub.cfg</userinput></screen>    <para>Here <command>grub-mkconfig</command> uses the files in <filename    class="directory">/etc/grub.d/</filename> to determine the contents    of this file. The configuration file will look something like:</para><screen><computeroutput>## DO NOT EDIT THIS FILE## It is automatically generated by /usr/sbin/grub-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#### BEGIN /etc/grub.d/00_header ###set default=0set timeout=5### END /etc/grub.d/00_header ###### BEGIN /etc/grub.d/10_linux ###menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" {        insmod ext2        set root=(hd0,2)        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2        linux   /boot/vmlinux-&linux-version;-lfs-&version; root=/dev/sda2 ro}menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" (recovery mode)" {        insmod ext2        set root=(hd0,2)        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2        linux   /boot/vmlinux-&linux-version;-lfs-&version; root=/dev/sda2 ro single}menuentry "GNU/Linux, Linux 2.6.28-11-server" {        insmod ext2        set root=(hd0,2)        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro        initrd  /boot/initrd.img-2.6.28-11-server}menuentry "GNU/Linux, Linux 2.6.28-11-server (recovery mode)" {        insmod ext2        set root=(hd0,2)        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro single        initrd  /boot/initrd.img-2.6.28-11-server}### END /etc/grub.d/10_linux ###### BEGIN /etc/grub.d/30_os-prober ###### END /etc/grub.d/30_os-prober ###### BEGIN /etc/grub.d/40_custom #### This file provides an easy way to add custom menu entries.  Simply type the# menu entries you want to add after this comment.  Be careful not to change# the 'exec tail' line above.### END /etc/grub.d/40_custom ###</computeroutput></screen>  <note>  <itemizedlist>      <listitem><para>Even though there is a warning not to edit the file, you      can do so as long as you do not re-run      <command>grub-mkconfig</command>.</para></listitem>      <listitem><para>The <emphasis>search</emphasis> lines are generally not      useful for LFS systems as that command only sets an internal GRUB      variable used to find the kernel image.  The <emphasis>set root</emphasis>       command provides the same capability without the overhead of       searching.</para></listitem>        <listitem><para>The <emphasis>set root</emphasis> and       <emphasis>insmod ext2</emphasis> commands can be moved out of the        <emphasis>menuentry</emphasis> sections to apply to all sections of the file.      This leads to a simple section like:</para></listitem>      </itemizedlist><screen><computeroutput>menuentry "Linux &linux-version;-lfs-&version;" {linux   /boot/vmlinux-&linux-version;-lfs-&version; root=/dev/sda2 ro}</computeroutput></screen>    <itemizedlist>      <listitem><para>Passing a UUID to the kernel requires an initial ram disk      (initrd) not built by LFS.</para></listitem>        <listitem><para>If the <filename>/boot</filename> partition is installed      on a separate partition, the linux and initrd lines should not have the      string <emphasis>/boot</emphasis> prefixed to the file      names.</para></listitem>         <listitem><para>In this example the kernel files for a Ubuntu      installation are also found in <filename      class="directory">/boot</filename>.</para></listitem>   </itemizedlist>   </note>  </sect2>     <sect2>     <title>Testing the Configuration</title>     <para>The core image of GRUB is also a Multiboot kernel, so if you already     have <emphasis>GRUB Legacy</emphasis> loaded you can load     GRUB-&grub-version; through your old boot loader.  To accomplish this, you     will need to exit the <command>chroot</command> environment now and     re-enter it in the next section to finish the few remaining portions of     the book.</para><screen role="nodump"><userinput>/sbin/reboot...grub> root (hd0,1)grub> kernel /boot/grub/core.imggrub> boot</userinput></screen>     <para>Note that the GRUB commands above are assumed to be GRUB Legacy.     At this point the GRUB prompt will appear (very similar to GRUB Legacy) and     you can explore the interface or boot to one of the systems in the grub.cfg      file.</para>      </sect2>  <sect2>     <title>Updating the Master Boot Record</title>     <para>If you tested the GRUB configuration as specified above, re-enter     the <command>chroot</command> environment.</para>    <warning>      <para>The following command will overwrite the current boot loader. Do not      run the command if this is not desired, for example, if using a third party      boot manager to manage the Master Boot Record (MBR).</para>     </warning>    <para>Update the MBR with:</para><screen role="nodump"><userinput>grub-setup '<DEVICE>'</userinput></screen>    <para>Change the DEVICE above to your boot disk, normally '(hd0)' or /dev/sda.      If using (hd0) be sure to escape the parentheses with backslashes or single    quotes to prevent the shell from interpreting them as a sub-shell.</para>    <para>This program uses the following defaults and are correct if you did not    deviate from the instructions above:</para>    <itemizedlist>      <listitem><para>boot image  - boot.img  </para></listitem>      <listitem><para>core image  - core.img  </para></listitem>      <listitem><para>directory   - /boot/grub</para></listitem>      <listitem><para>device map  - device.map</para></listitem>      <listitem><para>default root setting - guessed</para></listitem>    </itemizedlist>   <note><para>The root setting is the default value if a 'set root'   instruction is not found in grub.cfg.  This is the partition that is   searched for the kernel and other supporting files.  It is different from   the 'root=' parameter on the 'linux' line in the configuration line.  The   latter is the partition the kernel mounts as '/'.  In the example grub.cfg   above, both values point to /dev/sda2, but if there is a separate boot   partition, they will be different.</para></note>   </sect2></sect1>
 |