GRUB — загрузчик системы
GRUB (GRand Unified Bootloader 1) ) — программа-загрузчик операционных систем.
GRUB является эталонной реализацией загрузчика, соответствующего спецификации Multiboot и может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS -DOS, OS /2 и другие системы.
После настройки GRUB пользователь при включении компьютера видит список операционных систем, которые установлены на его компьютер и которые можно загрузить, выбрав подходящую и нажав Enter .
GRUB позволяет пользователю при загрузке задавать произвольные параметры и передавать их в ядро Multiboot-совместимой ОС для дальнейшей обработки.
GRUB — самый популярный загрузчик в мире Linux и является загрузчиком по умолчанию в большинстве известных дистрибутивов.
Здесь и далее в иных статьях под названием программы GRUB подразумевается GRUB 2, который используется в операционных системах семейства Ubuntu начиная с версии 9.10, до него использовался GRUB первой версии, сейчас известный как GRUB Legacy. GRUB 2 полностью переписан с нуля и не имеет ничего общего с GRUB Legacy, разработка которого была остановлена в пользу более совершенного и мощного GRUB.
Первые шаги
При первом сравнении GRUB со старым GRUB Legacy самым весомым различием оказывается измененная структура файлов конфигурации.
Настройка GRUB производится теперь принципиально иным способом — основным файлом конфигурации является «/boot/grub/grub.cfg«. Однако же, не торопитесь править его так, как привыкли это делать с «menu.lst» в GRUB Legacy. При внимательном прочтении мы видим в начале файла «grub.cfg» такие строки:
# # 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 #
И об этом нас предупреждают не просто так. Ведь «grub.cfg» генерируется автоматически с использованием нескольких скриптов. Поэтому после следующего обновления GRUB ваш «grub.cfg» будет создан заново, и все ваши правки будут утрачены.
Кроме файла «grub.cfg», отвечающего за загрузочное меню, имеются файл «/etc/default/grub» и папка «/etc/grub.d«. Рассмотрим их подробнее.
/etc/default/grub
Данный файл содержит в себе основные настройки для GRUB. Через него, собственно, они и изменяются. Для наглядности ниже приводится примерное содержимое этого файла:
GRUB_DEFAULT=6 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT="2" GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # 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 entrys #GRUB_DISABLE_LINUX_RECOVERY="true"
Файл представляет из себя набор опций в понятном формате ОПЦИЯ=ЗНАЧЕНИЕ.
Наиболее часто встречающаяся потребность при настройке GRUB — изменение стандартного пункта загрузки и/или времени показа меню. Рассмотрим же, как это делается.
Изменение стандартного пункта загрузки
По умолчанию стандартный пункт (выделенный при показе меню) — верхний в списке. После установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом.
Значением «GRUB_DEFAULT» является номер пункта меню, который должен быть выбран стандартным. Чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. Есть два варианта:
Нумерация пунктов меню начинается с нуля. Значение по умолчанию — 0, поэтому и выбирается первый пункт.
Пятому сверху пункту будет соответствовать значение 4, второму — 1, первому — 0. В вышеприведенном примере установлено значение 6, то есть стандартным задан седьмой пункт меню.
Команда sudo grub-reboot 1 однократно выбирает второй пункт меню по-умолчанию (только для следующей загрузки),
Или же можно указать значение идентификатора (id), оно должно быть именно таким, каким мы его видим в «/boot/grub/grub.cfg«. Данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за сбившейся нумерации.
Пример
Если в «grub.cfg» пункт меню выглядит так:
menuentry ‘Example GNU/Linux distribution’ —class gnu-linux —id example-gnu-linux
То значение параметра «GRUB_DEFAULT» должно указываться именно в виде:
GRUB_DEFAULT=example-gnu-linux
Ранее документацией предлагалось указывать название пункта меню загрузки (так, как он отображается в самом меню). Хотя этот способ по-прежнему работает, использовать его не рекомендуется, поскольку эти названия могут меняться, например, при обновлении ядра/версии ОС
Изменение времени отображения меню
По умолчанию меню загрузки отображается 10 секунд (при наличии других установленных ОС, если система одна — GRUB по умолчанию не отображается и сразу начинает загрузку), после чего загружается стандартный пункт, если раньше не нажат Enter или не выбран другой пункт, что останавливает таймер. За эту задержку отвечает параметр «GRUB_TIMEOUT», значение задается в секундах.
Если поставить значение «-1», то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт
Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение — 2, то есть меню отображается две секунды.
«Скрытое» меню
В случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а GRUB будет загружать вас напрямую в систему. Однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. Для этого предусмотрено «скрытое меню» за него отвечает параметр «GRUB_HIDDEN_TIMEOUT».
В случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). Данное значение позволит приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Esc .
Если значение установлено в 0, то задержки не будет, однако вызвать меню можно, удерживая при загрузке Shift
Параметр «GRUB_HIDDEN_TIMEOUT_QUIET» отвечает за отображение таймера во время паузы. Если его значение «true» таймер отображаться не будет, а со значением «false» будет.
Чтобы GRUB отображал меню со списком установленных операционных систем, без нажатия клавиш вызова меню (например Shift или Esc ) необходимо:
sudo gedit /etc/default/grub
What is GRUB boot Loader ?
On a Red Hat Linux system, the boot loader’s function is to locate the Linux Kernel, and any other necessary files, and load them into memory. It then starts the kernel so that the kernel can run processes.
The boot loader also lets you to control how a system is booted. If you dual boot, a boot loader enables you to choose between operating systems at startup.
When a computer boots, the basic input/output system (BIOS) in read only memory usually loads the boot loader from the Master Boot Record (MBR) on the system’s primary hard drive.
However some versions of Linux run directly from the flash memory, by passing the BIOS and the boot loader. Linux was designed to run without an interactive boot loader with the kernel located at particular sectors on the disk.
Using a boot loader offers several benefits including
- the ability to boot multiple operating systems
- the ability to pass parameters interactively to the kernel, which is useful for disabling certain features in order to solve hardware problems
- the ability to load different kernels interactively, which is useful when you deploy a new kernel because it is easy to revert to the working kernel.
What are the stages involved in loading GRUB?
Most boot loaders execute in two or more stages. GRUB loads itself into memory by
1. loading the stage 1 boot loader
- First the BIOS reads the stage 1 or primary boot loader into memory from the MBR.
- The primary boot loader takes up less than 512 bytes of disk space in the MBR — too small a space to contain the instructions necessary to load a complex operating system.
- Instead the primary boot loader performs the function of loading either the stage 1.5 or stage 2 boot loader.
2. loading the stage 1.5 boot loader
- Some hardware requires an intermediate step between the stage 1 and stage 2 boot loaders.
- This can happen when the /boot partition is situated beyond the 1024 cylinder head of the hard drive, or when you are using LBA mode.
- GRUB Stage 1.5 is located in the first 30 KB of Hard disk immediately after MBR and before the first partition.
- This space is utilised to store file system drivers and modules.
- This enabled stage 1.5 to load stage 2 to load from any known loaction on the file system i.e. /boot/grub
3. loading the stage 2 boot loader
- The secondary boot loader is located somewhere on the disk — on the boot sector of the first partition.
- For Example it displays the GRUB menu and command environment, which enables you to select which operating system or Linux kernel to boot.
- You can also use it to pass arguments to the kernel.
4. loading the operating system or kernel
- GRUB determines which operating system to start and loads the operating system or kernel and initrd into memory.
- It then transfers control of the computer to the OS.
GRUB vs LILO
The two boot loaders that Red Hat Linux provides for x86 architecture are the Grand Unified Boot Loader (GRUB) and the Linux Loader (LILO). In the past LILO has been the most popular for Linux and the default loader on most distributions.
However, the GNU project’s GRUB is new more commonly used.
GRUB is currently the default Red Hat Linux boot Loader. It is an improvement over LILO in that it enables you to
- use password protection
- try different boot parameters during the boot process without permanently hanging the GRUB configuration file.
- boot Windows NT operating system from the MBR area of the hard drive
GRUB also supports Logical Block Addressing (LBA) mode which enables the computer to find the /boot files more easily, particularly if they are located beyond the 1024th cylinder of the hard drive.
Direct vs Chain-loading Method
The boot method for Red Hat Linux is called the direct loading method, because the boot loader loads the operating system directly without using an intermediary stage between the boot loader and the kernel.
In the chain loading boot method, the MBR points to the first sector of the partition that contains the operating system. The MBR uses the files in this location to boot the operating system.
GRUB supports both direct and chain loading boot methods, so it can boot almost any operating system.
‘