如何为Linux服务器安装GRUB?

GRUB(GRand Unified Bootloader)是Linux系统的默认引导程序。当系统引导文件损坏或需要修复启动菜单时,需要手动安装或修复GRUB以恢复系统引导功能。

背景信息

在通过阿里云服务器迁移中心SMC迁移Linux源服务器时,若Linux源服务器未安装GRUB、系统版本较低(如CentOS 5Debian 7),或自带的GRUB版本低于2.02,日志文件提示“Do Grub Failed”时,您需要安装GRUB2.02及以上版本。

本文以GRUB 2.02版本为例,介绍在Linux服务器上安装系统引导程序GRUB的操作步骤。安装其他版本的操作步骤与此相同,主要差异在于安装过程中需下载相应版本的GRUB源码包。详情请参见下载相应版本的GRUB源码包

操作步骤

步骤一:查看GRUB版本

  1. 使用root账户登录Linux源服务器。

  2. 运行以下命令,查看原GRUB及其相关工具的路径。

    which grub
    which grub-install
    which grub-mkconfig
    • 如果任一命令提示路径不存在,说明源服务器中未安装GRUB或者文件缺失,需按照后续步骤安装GRUB。

    • 如果能查看到文件路径,需运行以下命令为旧版本文件改名以备份,然后安装新版本GRUB覆盖当前版本。

      mv /sbin/grub /sbin/grub-old
      mv /sbin/grub-install /sbin/grub-install-old
      mv /sbin/grub-mkconfig /sbin/grub-mkconfig-old
      说明

      您可以在使用SMC迁移服务器后,恢复原名以使用原配置。

步骤二:安装依赖工具

运行以下命令,安装GRUB依赖的bison、gcc以及make工具。

CentOS/RHEL

yum install -y bison gcc make flex

Debian/Ubuntu

apt-get update && apt-get install -y bison gcc make flex

步骤三:安装flex

  1. 创建tools文件夹(若不存在)。

    test -d /home/testuser/tools || mkdir -p /home/testuser/tools
  2. 进入tools文件夹,并下载flex安装包。

    cd /home/testuser/tools
    wget https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz
    tar xzf flex-2.6.4.tar.gz
  3. 编译安装flex,并创建软连接。

    cd flex-2.6.4
    mkdir -p build
    cd build
    ../configure
    make && make install
    ln -s /usr/local/bin/flex /usr/bin/flex

步骤四:安装GRUB

  1. 下载并解压GRUB 2.02安装包。

    cd /home/testuser/tools
    wget https://alpha.gnu.org/gnu/grub/grub-2.02~rc1.tar.gz
    tar xzf grub-2.02~rc1.tar.gz
  2. 编译安装GRUB,并创建软连接。

    cd grub-2.02~rc1
    mkdir -p build
    cd build
    ../configure
    # 若出现-Werror报错,则修改Makefile去除-Werror选项
    sed -i -e "s/-Werror//" ./grub-core/Makefile
    sed -i -e "s/-Werror//" ./Makefile
    make && make install
    ln -s /usr/local/sbin/grub-install /sbin/grub-install
    ln -s /usr/local/sbin/grub-mkconfig /sbin/grub-mkconfig

步骤五:‌验证安装

运行以下命令,检查是否已成功安装或更新至GRUB 2.02版本。

grub-install --version

后续步骤

  • 成功安装新版本系统引导程序GRUB后,您可以使用SMC迁移服务器至阿里云。具体操作,请参见迁移指引

  • (可选)迁云成功后,如果您需要使用旧版本的GRUB,可以运行以下命令将GRUB恢复为旧版本。

    rm /sbin/grub-install
    rm /sbin/grub-mkconfig
    rm /boot/grub/grub.cfg
    mv /sbin/grub-old /sbin/grub
    mv /sbin/grub-install-old /sbin/grub-install