GNU GRUB(是GNUGRand Unified Bootloader的缩写,通常称为GRUB)是来自GNU项目的引导加载程序包。GRUB是自由软件基金会多引导规范的参考实例,它为用户提供了引导安装在计算机上的多个操作系统之一或选择特定操作系统分区上可用的特定内核配置。
GNU GRUB是由一个名为Grand Unified Bootloader(Grand Unified Theory的一个版本)的包中开发出来的。它主要用于Unix类的系统。GUN操作系统正如大多数Linux发行版和从Solaris 10 1/06开始发行的x86系统上的Solaris操作系统一样,均是采用GNU GRUB作为其引导加载程序的。
计算机开机时,BIOS系统会找到已配置的主引导设备(通常是计算机的硬盘),并从主引导记录(MBR)加载和执行初始引导程序。MBR是硬盘偏移量为零的第一个扇区(扇区计数从零开始)。在很长的一段时间内,一个扇区的大小一直是512字节,但自2009年以来,就出现了被称作高级格式磁盘的扇区大小为4096字节的硬盘。截至2013年10月,通过使用512e仿真,仍可在512字节扇区中访问此类硬盘。[1]
传统MBR分区表最多支持四个分区并占用64个字节。加上可选的磁盘名 (4个字节)和磁盘时间戳(6个字节),引导加载程序的机器代码可以使用434到446个字节。尽管对于非常简单的引导加载程序来说这幺小的空间就已足够[2],但它的大小还不足以支持复杂和多文件系统的引导加载程序、菜单驱动的引导选择等。因此,占用较大空间的引导加载程序被分割成多个部分,其中最小的部分适合此环境并驻留在MBR中,而较大的部分将被存储在其他位置(例如,存储在MBR和第一分区之间的空扇区中),并由引导加载程序的MBR代码调用。
大多数情况下,操作系统的内核映像驻留在恰当的文件系统上,但是文件系统的概念对于BIOS来说是未知的。因此,在BIOS系统中,引导加载程序的职责是访问这些文件的内容,因此可以将其加载到RAM中并执行。
一种可能的方法来引导加载程序加载内核映像是直接访问硬盘扇区,而不涉及底层文件系统。通常,需要一个额外的以映射或映射文件的形式的间接级别,该文件是包含内核映像占用的物理扇区列表的辅助文件。由于安装新的内核映像、文件系统碎片整理等原因,每次内核映像更改其在磁盘上的物理位置时,都需要更新这些映射。此外,如果映射需要改变其物理位置,它们的位置需要在引导加载程序的MBR代码中更新,以便扇区间接机制将继续工作。这种模式不仅繁琐,而且为防止系统更新过程中出现问题,还需要对系统进行手动修复。[3]
另一种方法是让引导加载程序知道底层文件系统,以便使用它们的实际文件路径来配置和访问内核映像。这需要引导加载程序包含每个受支持文件系统的驱动程序,以便引导加载程序自身能够理解和访问内核映像。这种方法消除了硬盘扇区的硬编码位置需求和map文件,并且在内核映像被添加或移动后不需要对MBR进行更新。引导加载程序的配置存储在常规文件中,也可以通过文件系统感知的方式访问,以便在实际引导任何内核映像之前获得引导配置。因此,大大降低了各种系统更新期间出错的可能性。然而,这种引导加载程序增加了内部复杂性,甚至占用了更大的空间。[3]
GNU GRUB使用通过理解底层文件系统的方法。引导加载程序本身被分成多个阶段,允许其本身适应的MBR引导方案。
GRUB的两个主要版本是通用的: GRUB版本1,称为GRUB legacy,仅在较旧版的Linux发行版中流行,现在依然支持和使用其中一些其他版本,例如CentOS 5。GRUB 2是从头开始编写的,旨在取代它的前身,现在被大多数Linux发行版所使用。
主引导记录(MBR)通常包含GRUB阶段1,或者可以包含标准的MBR实现,该实现从活动分区的引导扇区链接中加载GRUB阶段1。给定的引导扇区尺寸很小 (512字节),第1阶段只能通过从磁盘开始附近的固定位置(在其第一个1024个柱面内)加载几个磁盘扇区来加载GRUB的下一阶段。
阶段1可以直接加载阶段2,但通常设置为加载阶段1.5,阶段1.5位于紧接MBR之后、第一个分区之前的硬盘前30 KiB。如果该空间不可用(异常分区表、特殊磁盘驱动程序、GPT或LVM磁盘),1.5级的安装将失败。阶段1.5映像包含文件系统驱动程序,使其能够从文件系统中的任何已知位置直接加载阶段2(例如从/boot/grub)。第2阶段将加载缺省配置文件和任何其他需要的模块。
使用BIOS固件启动系统
使用UEFI固件启动系统
启动后
Grub提供了一个菜单,用户可以从grub安装的操作系统中进行选择。Grub可以配置为在用户定义的超时后自动加载指定的操作系统。如果超时设置为零秒,在计算机启动时按住⇧Shift键可以访问启动菜单。[4]
在操作系统选择菜单中,GRUB接受几个命令:
一旦选择了引导选项,GRUB就会将所选内核加载到内存中,并将控制权交给内核。或者,GRUB可以使用链加载将引导过程的控制权传递给另一个引导加载程序。这是用于加载不支持多引导规范或GRUB不直接支持的操作系统的方法。
GRUB最初是由埃里希·博林作为引导自由软件基金会开发的操作系统GNU/Hurd工作的一部分开发的。[6]1999年,戈登·马齐吉特(Gordon Matzigkeit)和吉诺里·奥吉(Yoshinori K. Okuji)将GRUB制作成GNU项目的官方软件包,并向公众开放开发过程。[6]截至2014年,大多数Linux发行版都采用了GNU GRUB 2,以及索尼的PlayStation 4等其他系统。[7]
GRUB版本1(也称为“GRUB Legacy”)不再处于开发阶段,正在被逐步淘汰。[8]GNU GRUB开发人员已经将他们的焦点转移到GRUB 2上[9],这是一个完整的重写,目标包括使GNU GRUB更干净、更健壮、更轻便和更强大。GRUB 2以PUPA的名字开始。PUPA得到日本信息技术促进机构的支持。PUPA在2002年左右被集成到GRUB 2开发中,当时GRUB版本0.9x被重命名为GRUB Legacy。
GRUB 2项目的一些目标包括支持非x86平台、国际化和本地化、非ASCII字符、动态模块、内存管理、脚本迷你语言、将特定于平台(x86)的代码迁移到特定于平台的模块以及面向对象的框架。GNU GRUB版于2012年6月26日正式发布。[10][11]
三个最广泛使用的Linux发行版使用GRUB 2作为它们的主流引导加载程序。[12][13][14] Ubuntu在2009年10月的9.10版本中采用它作为默认的引导加载程序。Fedora紧随其后,于2011年11月发布了Fedora 16。[15]OpenSUSE在2012年9月发布的12.2版本中采用GRUB 2作为默认的引导加载程序。在Solaris 11.1发行版中,Solaris还在x86平台上采用了GRUB 2。[16]
2015年末,发现并迅速修复了按下退格键28次可以绕过登录密码的漏洞。[17][18]
GNU GRUB是免费的开源软件,因此已经创建了几个变体。一些值得注意的变体,还没有合并到GRUB主线中:
各种发行版使用的设置工具通常包括设置GRUB的模块。例如,SUSE Linux和OpenSUSE发行版上的YaST2和Fedora/RHEL发行版上的Anaconda。启动管理器和GRUB定制器是基于Debian的发行版的图形配置编辑器。
GRLDR ICE是一个用于修改GRUB4DOS的grldr文件的默认配置的微小工具。[29]
Super Grub2磁盘/帮助您引导到大多数操作系统,即使您无法通过正常方式引导到它。它是在
Grub2的bash式脚本中构建的。一个20MB的ISO图像,可以从USB或CD启动。引导修复是一个简单的图形工具,用于从GRUB和 Microsoft Windows 引导加载程序的频繁引导相关问题中恢复。该应用程序在GNU GPL许可下可用。引导修复可以修复多个Linux发行版上的GRUB,包括但不限于Debian、Ubuntu、Mint、Fedora、openSUSE和Arch Linux。
Grub2Win是一个Windows开源软件包。它允许GNU Grub从一个窗口目录启动。安装程序将GNU Grub版安装到NTFS分区。然后使用一个Windows GUI应用程序定制Grub引导菜单、主题、UEFI引导顺序、脚本等。UEFI和legacy系统都支持所有GNU Grub脚本和命令。Grub2Win可以为Windows的multiboot、Ubuntu、openSuse、Fedora和许多其他Linux发行版配置Grub。它可以在SourceForge的GNUGPL许可证下免费获得。
替代启动管理器Grub的优势在于广泛的支持平台、文件系统、操作系统,这使得它成为发行版和嵌入式系统的默认选择。
但是,也有针对终端用户的引导管理器提供更友好的用户体验、图形操作系统选择器和更简单的配置:
非图形替代,配置更简单:
发布维基有许多常见问题和自定义设置的解决方案,可能对您有所帮助:
^Smith, Ryan (December 18, 2009). "Western Digital's Advanced Format: The 4K Sector Transition Begins". AnandTech. Retrieved October 10, 2013..
^"mbldr (Master Boot LoaDeR)". mbldr.SourceForge.net. 2009. Retrieved October 10, 2013..
^"Booting and Boot Managers". SuSE. Retrieved 2013-10-10..
^Hoffman, Chris (September 22, 2014). "How to Configure the GRUB2 Boot Loader's Settings". HowToGeek.com..
^"GNU GRUB documentation"..
^GRUB Manual – 1.2 Grub History. Gnu.org (2012-06-23). Retrieved on 2012-12-01..
^"PS4 runs Orbis OS, a modified version of FreeBSD that's similar to Linux". extremetech.com. 2013-06-24. Retrieved 2013-10-23..
^GNU GRUB – GRUB Legacy. Gnu.org. Retrieved on 2012-12-01..
^"GNU GRUB – GRUB 2". Archived from the original on June 7, 2008. Retrieved April 18, 2014.CS1 maint: BOT: original-url status unknown (link)..
^Serbinenko, Vladimir (June 28, 2012). "GRUB 2.00 released". grub-devel (Mailing list). Retrieved December 1, 2012..
^Larabel, Michael. "GRUB 2.00 Boot-Loader Officially Released". Phoronix.com. Retrieved 28 June 2012..
^Haddon, Tom (January 26, 2012). "An Introduction to Ubuntu". WebJunction. Archived from the original on October 28, 2012. Retrieved September 21, 2012..
^Janssen, Cory. "What is Red Hat Enterprise Linux (RHEL)?". Technopedia. Retrieved 21 September 2012..
^Varghese, Sam (2012-09-20). "SUSE chief lists progress since privatisation". Retrieved 21 September 2012..
^GRUB 2. FedoraProject. Retrieved on 2012-12-01..
^Solaris 11.1. Oracle Retrieved 2015-03-19..
^Khandelwal, Swati (December 16, 2015). "You can Hack into a Linux Computer just by pressing 'Backspace' 28 times". thehackernews.com..
^Marco and, Hector; Ripoll, Ismael (December 2015). "Back to 28: Grub2 Authentication 0-Day"..
^x86: Modifying Boot Behavior by Editing the GRUB Menu at Boot Time Archived 7月 19, 2011 at the Wayback Machine, Modifying Solaris Boot Behavior on x86 Based Systems (Task Map) – System Administration Guide: Basic Administration.
^x86: Supported GRUB Implementations Archived 10月 21, 2009 at the Wayback Machine, (System Administration Guide: Basic Administration) – Sun Microsystems.
^>Peng, Tao. "Grub4ext4". Retrieved June 13, 2017..
^2.3 Why does Syllable have its own version of GRUB? Archived 1月 7, 2011 at the Wayback Machine, Syllable Documentation.
^"TrustedGRUB project". Sourceforge.net. Retrieved November 18, 2014..
^BIOS Implementation Test Suite, Official BITS website.
^"grub4dos". Google Site. Retrieved 7 April 2019..
^"GRUB for DOS Introduction". grub4dos.sourceforge.net. 2007. Archived from the original on 2 June 2008. Retrieved 7 April 2019..
^GRUB2 Bootloader Editor. Kde-apps.org (2012-06-18). Retrieved on 2012-12-01..
^"Grub2 KCM". KDE-Apps.org. Retrieved 2011-01-27..
^"Grub4dos tutorial". Narod.ru..
暂无