GRUB2是下一代的多系统引导器,grub即将退位,项目名也改成了grub-legacy。相比grub(目前的版本是0.97)而言,grub2重写了代码以实现模块化和可移植性。

有趣的Grub Logo:

将archlinux的grub升级到grub2是一件很简单的事情,你只需要通过pacman安装新的grub2软件包,转换menu.lst为grub.cfg就可以了。这篇日志的大部分资料来自Archlinux的wiki,命令操作记录来自我的笔电。

首先来搜索一下仓库里的grub2软件包:

~>; pacman -Ss grub2
extra/grub2-bios 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – Built for PC BIOS
extra/grub2-common 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – Files common for all platforms
extra/grub2-efi-i386 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – i386 UEFI version
extra/grub2-efi-x86_64 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – x86_64 UEFI version

你会发现目前仓库里有4个grub2的软件包,做个简单的介绍吧:

grub2-bios            –> 适用于PC BIOS

grub2-commin    –> 文件集合(包含了所有平台相关的文件)

grub2-efi-i386      –> 适用于32位平台的UEFI

grub2-efi-x86_64 –> 适用于64位平台的UEFI

一般情况下,我们选择安装grub2-bios。什么是UEFI呢?这货全称Unified Extensible Firmware Interface,直译叫做“统一的可扩展固件接口”,这种接口用于操作系统自动从预启动的操作环境,加载到某种操作系统上,从而使开机程序化繁为简,节省时间。UEFI将替代已存在多年的BIOS,目前市场上的主板已经开始采用UEFI 。

安装和升级步骤:

1) 安装grub2-bios

~>; sudo pacman -S grub2-bios
resolving dependencies…
looking for inter-conflicts…
:: grub2-common and grub are in conflict. Remove grub? [y/N] y

Remove (1): grub-0.97-17

Total Removed Size:   0.61 MB

Targets (2): grub2-common-1.99~rc2.r3238-1  grub2-bios-1.99~rc2.r3238-1

Total Download Size:    1.74 MB
Total Installed Size:   7.25 MB

Proceed with installation? [Y/n] y

安装时肯定会报与现有的grub冲突,想装就YY吧。如果你喜欢干净,可以在安装之前先把/boot/grub目录备份到其他地方,然后删除/boot下的grub目录。

2) 擦除MBR上grub-legacy的痕迹。这一步一定要小心,如果你的grub安装在MBR上的,需要做这一步操作。of后面跟的是主硬盘的设备名,也许你的是/dev/hda。

~>; sudo dd if=/dev/zero of=/dev/sda bs=440 count=1
1+0 records in
1+0 records out
440 bytes (440 B) copied, 3.1918e-05 s, 13.8 MB/s

3) 安装grub2到MBR

~>; sudo grub_bios-install –boot-directory=/boot –no-floppy –recheck /dev/sda
Installation finished. No error reported.

~>; sudo cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/

4) 生成grub2使用的配置文件grub.cfg (可以从 menu.lst 或者 grub.conf 转换过来)

~>; sudo grub-menulst2cfg /boot/grub/menu.lst.pacsave /boot/grub/grub.cfg

5) 重启系统,检验成果。
结束语:

这里只是介绍了Archlinux上如何将grub(又名grub-legacy)升级到grub2,至于grub2的命令操作、grub.cfg的配置方式则没有给出说明 (你可以在wiki上获得详细内容,下面有链接)

参考资料:

1. Archlinux上有详细的介绍,包括BIOS和UEFI的安装方式,GPT的延伸阅读。

https://wiki.archlinux.org/index.php/GRUB2#For_BIOS_Systems

2. GRUB项目主页

http://www.gnu.org/software/grub/index.html