Linux学习笔记之 Grub简单介绍

spacer.gif

Grub: GRand Unified Bootloader,一个GNU项目下的多操作系统启动引导程序,主要用于选择磁盘上不同的的操作系统或内核

grub 0.x: grub legacy    #传统grub(Centos5,CentOS6均使用grub legacy)

grub 1.x: grub2 (CentOS7)


传统grub可分文3个阶段:

grub 1: 存储在MBR中

grub 1_5:存储在MBR之后的扇区,让stage1中的bootloader 能够识别stage2所在分区的文件系统

grub 2:存储在磁盘分区(/boog/grub)

grub 配置文件:/boot/grub/grub.conf
[root@S2 ~]# ll /etc/grub.conf
lrwxrwxrwx. 1 root root 22 Sep 12 18:25 /etc/grub.conf -> ../boot/grub/grub.conf


stage2及内核等通常放置于一个基本磁盘分区;否则启动时候,无法被内核加载,因为缺少文件系统的驱动,即/boot应该

是一个基本磁盘分区

功用:

(1) 提供菜单、并提供交互式接口

        e: 编辑模式,用于编辑菜单;

        c: 命令模式,交互式接口;

(2) 加载用户选择的内核或操作系统

允许传递参数给内核

可隐藏此菜单

(3) 为菜单提供了保护机制

为编辑菜单进行认证

为启用内核或操作系统进行认证


如何识别设备:

(hd#,#)

hd#: 磁盘编号,用数字表示;从0开始编号

#: 分区编号,用数字表示; 从0开始编号

root (hd#,#):可以指定根


grub的命令行接口 

help: 获取帮助列表

help KEYWORD: 详细帮助信息

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#) 指定根分区路径

kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数

例如:init=/path/to/init, selinux=0

initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk(版本号必须与内核版本号完全匹配)

boot: 引导启动选定的内核;


手动在grub命令行接口启动系统:

grub> root (hd#,#) (hd0,0) 表示第一个磁盘的,第一个分区

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE 

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot


配置文件:/boot/grub/grub.conf (开机启动的菜单都是通过此配置文件设置的)

配置项:

default=#: 设定默认启动的菜单项;菜单项(title)编号从0开始;

timeout=#:指定菜单项等待选择的时长;

splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

hiddenmenu:隐藏菜单;

password [--md5] STRING: 菜单编辑认证(启用此项,编辑菜单将需要输入密码);

title TITLE:定义菜单项“标题”, 可出现多次,用来引导多个不同的内核和操作系统

root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”; 

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核

initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;

password [--md5] STRING: 启动选定的内核或操作系统时进行认证;

系统启动时,在如下页面,按任意可进入菜单页面

  wKiom1YG20eBpQmPAAFgRs_zgBg649.jpg

按c即可进入命令模式,命令模式下也可以使用find 等命令

  wKioL1YG26OiJkI9AADucVsLMnA760.jpg

启用认证:

grub菜单编辑认证和启动选定的内核或操作系统时进行认证

编辑 grub.conf 配置文件

如下配置:启动了菜单认证,并对Test System 单独启用了操作系统认证

[root@S2 ~]# grub-md5-crypt        #对密码使用md5加密算法加密

Password: 

Retype password: 

$1$w2jUR$DjJTCxZKcg9kb76nLKgvY1  #将加密过的密码写入到如下grub.conf配置文件中去

wKiom1YG2-bCrA90AARgob1Kecs170.jpg


重启后,需要按'p' 输入密码才可以编辑grub 菜单,如果输入错误的密码,将无法进入菜单编辑页

wKioL1YG3LuDF00RAAFyMDASuMo058.jpg

如果验证用过,则会正常进入编辑界面

wKiom1YG3QjihgljAAGEXpkN5vM343.jpg

验证启动Test System是否需要输入密码(如果此时选择启动Centos 6 将不需要输入密码,因为配置文件中未对其做启动操作系统认证)     wKiom1YG3YuQiu8dAAFgymGzc1A006.jpg 

如果密码错误,会提示如下

   wKioL1YG3gPy-NjxAABnF5cDEMM585.jpg

如果密码正确,就会正常启动系统

   wKioL1YG3sGxZF5vAABy7pYBP08510.jpg

如何进入单用户模式:

(1) 编辑grub菜单(选定要编辑的title,而后使用e命令); 

(2) 在选定的kernel后附加1, s, S或single都可以;

(3) 在kernel所在行,键入“b”命令;


练习: 在空白磁盘安装grub,并成功引导系统


[root@localhost ~]# fdisk -l /dev/sdb    #创建了如下三个分区,分别是sdb1(将作为/boot),sdb2 (swap),sdb3(将作为/root)

Disk /dev/sdb: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x501be724

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1          14      112423+  83  Linux

/dev/sdb2              15         276     2104515   82  Linux swap / Solaris

/dev/sdb3             277         930     5253255   83  Linux


# mkdir /mnt/root     #为sdb1创建挂载点

# mkidr /mnt/sysroo   #为sdb3创建挂载点


# mount /dev/sdb1 /mnt/boot    #挂载sdb1

# mount /dev/sdb3 /mnt/sysroot    #挂载sdb2


# grub-install --root-directory=/mnt /dev/sdb    #向磁盘sdb安装grub程序

Installation finished. No error reported.

This is the contents of the device map /mnt/boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.


# vim /mnt/boot/grub/grub.conf     #创建grub.conf 配置文件

default=0

timeout=5

title Test Centos

        root (hd0,0)

        kernel /vmlinuz ro root=/dev/sda3 selinux=0 init=/bin/bash  #将使用/bin/bash 作为系统启动后运行的第一个程序

        initrd /initramfs.img    #指定ramdisk文件


复制/bin/bash 和其所依赖的库文件到/mnt/sysroot (sdb3)

#cp /bin/bash /mnt/sysroot/bin

# ldd /bin/bash  #查看/bin/bash依赖的库文件

linux-vdso.so.1 =>  (0x00007fffd7143000)

libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fc7e3f01000)

libdl.so.2 => /lib64/libdl.so.2 (0x00007fc7e3cfd000)

libc.so.6 => /lib64/libc.so.6 (0x00007fc7e3968000)

/lib64/ld-linux-x86-64.so.2 (0x00007fc7e4130000)


复制/bin/bash以来的所有的库文件到对应的目录

#cp  /lib64/libtinfo.so.5 /mnt/sysroot/lib64/

#cp /lib64/libdl.so.2  /mnt/sysroot/lib64/

#cp  /lib64/libc.so.6  /mnt/sysroot/lib64/

#cp /lib64/ld-linux-x86-64.so.2  /mnt/sysroot/lib64


[root@S2 ~]# ls /mnt/boot/grub/    #查看/boot目录有有没grub相关文件,证明grub已经安装成功

device.map  e2fs_stage1_5  fat_stage1_5  ffs_stage1_5  iso9660_stage1_5  jfs_stage1_5  minix_stage1_5  reiserfs_stage1_5  stage1  stage2  ufs2_stage1_5  vstafs_stage1_5  xfs_stage1_5


第二步:准备内核文件和ramdisk文件

# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz    #直接复制当前系统的vmliuz文件到新硬盘sdb上的boot目录

# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img    #直接复制当前系统的ramdisk到新硬盘sdb上的boot目录


# chroot /mnt/sysroot/    #切换到新根目录下,验证复制过去的bash能否正常工作

bash-4.1# 


第三步:创建虚拟机,然后使用刚刚安装有grub的空白磁盘来启动系统

选择稍后安装操作系统

wKiom1YG3vGT_royAAHtQTptzak473.jpg


选择使用现有虚拟磁盘

wKiom1YG3xqTKUNqAAIjU-tvxlI477.jpg


浏览到虚拟磁盘的具体位置,并加载

wKioL1YG3zHj-iawAAJsynj1sic870.jpg


接下来启动虚拟机,验证能否成功grub引导系统,看到#提示符,就已经OK了

wKioL1YG32Tzkcz4AAMW92wc2cc114.jpg


你可能感兴趣的:(grub)