RHEL7中如何通过GRUB来手动引导系统

什么是GRUB

GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统引导启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

当/etc/grub2/中的grub.cfg文件丢失或损坏后,开机后因文件丢失则无法正确引导启动操作系统。那么在这种情况下,依然可以通过GRUB来手动引导启动操作系统。以下将在虚拟机中RHEL7.0的环境中来模式实现。

GURB的引导过程

查看 /boot/grub2/grub.cfg 可以看到GRUB中,在选中菜单后是如何启动系统的,如下:

 

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

menuentry 'Red Hat Enterprise Linux Server, with Linux 3.10.0-123.el7.x86_64' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-e9bd41c7-f4e9-46e7-951b-677850232bcc' {

        load_video

        set gfxpayload=keep

        insmod gzio

        insmod part_msdos

        insmod xfs

        set root='hd0,msdos1'

        if [ x$feature_platform_search_hint = xy ]; then

          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  ee0abc65-4eeb-4e20-92b0-1c04a8e8691d

        else

          search --no-floppy --fs-uuid --set=root ee0abc65-4eeb-4e20-92b0-1c04a8e8691d

        fi

        linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=e9bd41c7-f4e9-46e7-951b-677850232bcc rord.lvm.lv=rhel/root crashkernel=auto  rd.lvm.lv=rhel/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet LANG=en_US.UTF-8

        initrd16 /initramfs-3.10.0-123.el7.x86_64.img

}

 

 

以上可以看出,当在GRUB中选中一个系统并回车确定后,可以看到GRUB做了以下4个主要步骤:

 

1.给root先赋予一个初始值;

2.挂载内核,并再次对root赋值为真实的根分区;

3.加载驱动;

4.boot引导;

 

准备工作

1.首先需要明白我们的根目录的文件系统是哪里?

 

通过 df 命令可以查询到

 

[root@localhost Desktop]# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/mapper/rhel-root   18G  3.0G   15G  17% /

devtmpfs               905M     0  905M   0% /dev

tmpfs                  914M   84K  914M   1% /dev/shm

tmpfs                  914M  8.9M  905M   1% /run

tmpfs                  914M     0  914M   0% /sys/fs/cgroup

/dev/sda1              497M  119M  379M  24% /boot

/dev/sr0               3.5G  3.5G     0 100% /media

[root@localhost Desktop]# 

 

可以看到我的/dev/mapper/rhel-root 是根目录的位置。

 

2.gurb.cfg中root的初始值

在grub.cfg中看到 set root='hd0,msdos1'

 

然后删除/boot/grub2/下面的grub.cfg文件,然后重启。

 

[root@localhost Desktop]# rm -rf /boot/grub2/grub.cfg

[root@localhost Desktop]# reboot

 

手动引导

重启之后进入到GRUB的命令提示符,按照以上GRUB的启动步骤,直接输入以下命令:

 

grub>set root=(hd0,msdos1)

grub>linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=/dev/mapper/rhel-root ro

grub>initrd16 /initramfs-3.10.0-123.el7.x86.64.img

grub>boot

 

回车确认后,BRUB就开始启动系统了。

在上面过程中,加载的内核和驱动其实都是在/boot/目录中的内核文件和驱动文件,在输入过程中可以通过TAB键补全。

 

恢复grub.cfg

在进入系统后,我们要恢复之前删除的grub.cfg文件

 

[root@localhost Desktop]# grub2-mkconfig > /boot/grub2/grub.cfg

Generating grub configuration file ...

Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64

Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img

Found linux image: /boot/vmlinuz-0-rescue-e6b7fcb586e64947b1e83544a55a7115

Found initrd image: /boot/initramfs-0-rescue-e6b7fcb586e64947b1e83544a55a7115.img

done

[root@localhost Desktop]# 

 

--------------------------------------

以上环境是VMware中的RHEL7.0操作系统。

安装双系统的朋友也可以通过grub来手动引导到你想要的系统。

本人电脑安装的是windows7 和 RHEL7.0两个系统,手动引导windows7的时候则是一下方式:

grub>set root=(hd0,msdos1)

grub>chainloader +1

grub>boot

 

对于给root赋予初始值的步骤,可以通过ls命令查看:

 grub>ls

(hd0)(hd0,msdos2)(hd0,msdos1)(fd0)

 

也有朋友提到可以不用赋予初始值,本人测试在不用赋予初始值的情况下,RHEL7也正常引导。但是Windows7则不行。

你可能感兴趣的:(Linux)