Linux

 

 

 

 

GRUB

 

GRUP stands for GRand Unified Bootloader. As its name implies it is a special program (code) performing the bootloading of the operating system. Bootloading is quite complicated sequence. The program for this whole process tend to be too large to be stored in MBR(Master Boot Recorder). So,they split the GRUP into two parts Stage 1 and Stage 2. Stage 1 is very short code that can be packed into MBR and the most important function of Stage 1 is to make jump to the location of Stage 2 code.

 

Now we have two different type of GRUBs. One is the original (old, legacy) version.. which is usually called as GRUB. The other one which is newer / more flexible version and it is called GRUB 2.

 

 

 

Where can you find GRUB ?

 

Followings are some common locations for GRUB files, but in realy, you may see a lot of variations of location of these files or in some case you may not find some of these file names. So you may dig into these on your own for your own Linux)

 

If your system is using the legacy type GRUB, the GRUB file would be located at

    /boot/grub/menu.lst

    /boot/grub/device.map

    /etc/grub.conf

 

If your system is using GRUB2, the GRUP file would be scattered in a few different locations (the exact directory name may vary depending on the Linux distribution you are using). The grup.cfg is a kind of main file and it call multiple additional files which are located at various different locations.

    /etc/grub2/grub.cfg

    /etc/default/grub

    /etc/grub.d/

 

Example > =======================================================

 

In my Ubuntu, there is no '/etc/grub2/' directory. Followings are the grub files/directories in my Ubuntu

    /boot/grub.cfg

    /etc/default/grub

    /etc/grub.d/

 

< /boot/grub.cfg >

 

#

# DO NOT EDIT THIS FILE

#

# It is automatically generated by grub-mkconfig using templates

# from /etc/grub.d and settings from /etc/default/grub

#

 

### BEGIN /etc/grub.d/00_header ###

if [ -s $prefix/grubenv ]; then

  set have_grubenv=true

  load_env

fi

set default="0"

if [ "${prev_saved_entry}" ]; then

  set saved_entry="${prev_saved_entry}"

  save_env saved_entry

  set prev_saved_entry=

  save_env prev_saved_entry

  set boot_once=true

fi

 

function savedefault {

  if [ -z "${boot_once}" ]; then

    saved_entry="${chosen}"

    save_env saved_entry

  fi

}

 

function recordfail {

  set recordfail=1

  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi

}

 

function load_video {

  insmod vbe

  insmod vga

  insmod video_bochs

  insmod video_cirrus

}

 

insmod part_msdos

insmod ext2

set root='(hd0,msdos5)'

search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

if loadfont /usr/share/grub/unicode.pf2 ; then

  set gfxmode=auto

  load_video

  insmod gfxterm

  insmod part_msdos

  insmod ext2

  set root='(hd0,msdos5)'

  search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

  set locale_dir=($root)/boot/grub/locale

  set lang=en_US

  insmod gettext

fi

terminal_output gfxterm

if [ "${recordfail}" = 1 ]; then

  set timeout=-1

else

  set timeout=10

fi

### END /etc/grub.d/00_header ###

 

### BEGIN /etc/grub.d/05_debian_theme ###

set menu_color_normal=white/black

set menu_color_highlight=black/light-gray

if background_color 44,0,30; then

  clear

fi

### END /etc/grub.d/05_debian_theme ###

 

### BEGIN /etc/grub.d/10_linux ###

function gfxmode {

        set gfxpayload="${1}"

        if [ "${1}" = "keep" ]; then

                set vt_handoff=vt.handoff=7

        else

                set vt_handoff=

        fi

}

if [ "${recordfail}" != 1 ]; then

  if [ -e ${prefix}/gfxblacklist.txt ]; then

    if hwmatch ${prefix}/gfxblacklist.txt 3; then

      if [ ${match} = 0 ]; then

        set linux_gfx_mode=keep

      else

        set linux_gfx_mode=text

      fi

    else

      set linux_gfx_mode=text

    fi

  else

    set linux_gfx_mode=keep

  fi

else

  set linux_gfx_mode=text

fi

export linux_gfx_mode

if [ "${linux_gfx_mode}" != "text" ]; then load_video; fi

menuentry 'Ubuntu, with Linux 3.5.0-31-generic' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        gfxmode $linux_gfx_mode

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos5)'

        search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

        linux   /boot/vmlinuz-3.5.0-31-generic root=UUID=3f34391d-26a7-4182-b70b-755dc9ef9704 ro   quiet splash $vt_handoff

        initrd  /boot/initrd.img-3.5.0-31-generic

}

menuentry 'Ubuntu, with Linux 3.5.0-31-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos5)'

        search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

        echo    'Loading Linux 3.5.0-31-generic ...'

        linux   /boot/vmlinuz-3.5.0-31-generic root=UUID=3f34391d-26a7-4182-b70b-755dc9ef9704 ro recovery nomodeset

        echo    'Loading initial ramdisk ...'

        initrd  /boot/initrd.img-3.5.0-31-generic

}

submenu "Previous Linux versions" {

menuentry 'Ubuntu, with Linux 3.5.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        gfxmode $linux_gfx_mode

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos5)'

        search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

        linux   /boot/vmlinuz-3.5.0-23-generic root=UUID=3f34391d-26a7-4182-b70b-755dc9ef9704 ro   quiet splash $vt_handoff

        initrd  /boot/initrd.img-3.5.0-23-generic

}

menuentry 'Ubuntu, with Linux 3.5.0-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos5)'

        search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

        echo    'Loading Linux 3.5.0-23-generic ...'

        linux   /boot/vmlinuz-3.5.0-23-generic root=UUID=3f34391d-26a7-4182-b70b-755dc9ef9704 ro recovery nomodeset

        echo    'Loading initial ramdisk ...'

        initrd  /boot/initrd.img-3.5.0-23-generic

}

}

### END /etc/grub.d/10_linux ###

 

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

 

### BEGIN /etc/grub.d/20_memtest86+ ###

menuentry "Memory test (memtest86+)" {

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos5)'

        search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

        linux16 /boot/memtest86+.bin

}

menuentry "Memory test (memtest86+, serial console 115200)" {

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos5)'

        search --no-floppy --fs-uuid --set=root 3f34391d-26a7-4182-b70b-755dc9ef9704

        linux16 /boot/memtest86+.bin console=ttyS0,115200n8

}

### END /etc/grub.d/20_memtest86+ ###

 

### BEGIN /etc/grub.d/30_os-prober ###

menuentry "Linpus (3.1.5) (on /dev/sda1)" --class gnu-linux --class gnu --class os {

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root 7d86331e-7767-473f-a0a6-b849feae7344

        linux /boot/vmlinuz ro root=/dev/sda1 nolapic_timer loglevel=1 acpi_osi=Linux pcie_aspm=off acpi=copy_dsdt pci=nocrs irqpoll

        initrd /boot/initrd.img.gz

}

### END /etc/grub.d/30_os-prober ###

 

### BEGIN /etc/grub.d/30_uefi-firmware ###

### END /etc/grub.d/30_uefi-firmware ###

 

### 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 ###

 

### BEGIN /etc/grub.d/41_custom ###

if [ -f  $prefix/custom.cfg ]; then

  source $prefix/custom.cfg;

fi

### END /etc/grub.d/41_custom ###

 

 

< /etc/default/grub >

 

# If you change this file, run 'update-grub' afterwards to update

# /boot/grub/grub.cfg.

# For full documentation of the options in this file, see:

#   info -f grub -n 'Simple configuration'

 

GRUB_DEFAULT=0

#GRUB_HIDDEN_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT_QUIET=true

GRUB_TIMEOUT=10

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX=""

 

# Uncomment to enable BadRAM filtering, modify to suit your needs

# This works with Linux (no patch required) and with any kernel that obtains

# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)

#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

 

# Uncomment to disable graphical terminal (grub-pc only)

#GRUB_TERMINAL=console

 

# The resolution used on graphical terminal

# note that you can use only modes which your graphic card supports via VBE

# you can see them in real GRUB with the command `vbeinfo'

#GRUB_GFXMODE=640x480

 

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux

#GRUB_DISABLE_LINUX_UUID=true

 

# Uncomment to disable generation of recovery mode menu entries

#GRUB_DISABLE_RECOVERY="true"

 

# Uncomment to get a beep at grub start

#GRUB_INIT_TUNE="480 440 1"

 

 

< files in /etc/grub.d/ >

 

-rwxr-xr-x   1 root root  6743 Jan 22  2013 00_header

-rwxr-xr-x   1 root root  5522 Jan 22  2013 05_debian_theme

-rwxr-xr-x   1 root root  7780 Jan 22  2013 10_linux

-rwxr-xr-x   1 root root  6335 Jan 22  2013 20_linux_xen

-rwxr-xr-x   1 root root  1588 Nov 27  2011 20_memtest86+

-rwxr-xr-x   1 root root  7603 Jan 22  2013 30_os-prober

-rwxr-xr-x   1 root root  1388 Jan 22  2013 30_uefi-firmware

-rwxr-xr-x   1 root root   214 Jan 22  2013 40_custom

-rwxr-xr-x   1 root root    95 Jan 22  2013 41_custom

-rw-r--r--   1 root root   483 Jan 22  2013 README

 

NOTE : all of these files contains script in it

 

 

Reference :

 

[1] GRUB bootloader - Full tutorial

[2] How to Configure the GRUB2 Boot Loader’s Settings

[3] The  GRUB  MBR(being the GRand Unified BootLoader's "stage1" Sector )