> CentOS > CentOS教程 >

CentOS 6.7配置 GRUB

CentOS 6.7配置 GRUB

linux开机简略流程:

POST-->bootloader-->kernel-->usr_space_ Application

 

##############################################################################

POST阶段:

     计算机加电后,处理器执行的第一条指令定位到BIOS芯片(ROM)把ROM中的程序加载到内存,接着会跳转到ROM中的程序所在的内存地址段,将这段程序加载到处理器执行,进行加电自检。(通常服务器主板上有两个ROM,防止升级BIOS固件版本失败,导致无法开机)

 

一般BIOS固有的功能

BIOS features

– UEFI (Unified Extensible Firmware Interface)   # 统一的可扩展固件接口(可认为是一种新型的BIOS,具体自行百度)

 

– SMBIOS 2.5 (DMI)   # 相当于数据库   通过 DMI ,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息

 

– ServerHardware Design Guide    #设置BIOS时一些帮助提示  (比如F10保存退出...)

 

– WfM 2.0               #连线管理。由 Intel开发的规范,用于提高台式计算机、便携式计算机和服务器的可管理性;WfM 标准包括 DMI、PXE 和远程唤醒

 

 

– ACPI 2.0support      #具有能耗管理功能(比如定时开关机,远程开机...)

– USB keyboard/mouse

– bootpossible from:   #可选的启动项

– CD-ROM/DVD(SATA)

– hard disk(SATA, SAS, USB)

– LAN

 

– consoleredirection support   #远程控制支持

– OEM logo                       #厂商信息

– CPU,memory disable    #启用禁用CPU 内存某插槽等等

-------

当BIOS程序起来后,把BIOS程序看成一个操作系统,这个系统运行起来后会检测硬件,如果硬件损坏它会报警(相对应的指示灯会变成橙色或者红色),如果损坏程度达到了能开机的极限,则会卡死在某一界面;否则直接将损坏的硬件屏蔽(多路处理器,坏了一颗处理器,照样可以开机,内存同理);这一整个过程为加电自检(POST)。

 

     POST的最后一步是执行INT 0x19指令,这个指令从引导设备第0柱面第0磁道第一个扇区读取512字节,装入地址0x7c00;其中512字节的主引导程序(bootloader)占446个字节,第二部分是Partitiontable区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magicnumber,占2个字节,固定为0xAA55或0x55AA,如果发现这个扇区结尾为0xAA55或0x55AA(魔数),则BIOS会认为这是一个已经有系统的设备,然后交权给这512字节的小系统。

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

Boot Loader阶段(启动程序)

BootLoder(GRUB)中的程序亦可当成一个小系统,这个小系统的作用就是找到内核,让内核加载到内存后运行,最后交权给内核。

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

Kernel阶段:

kernel有加载到内存后自解压运行的能力,它会会全面扫描所有硬件,并且加载相对应的硬件驱动,挂载根文件系统等

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

user_space_ Application阶段:

当内核启动完成后,内核会在用户空间启动第一个用户空间程序/sbin/init(7系列为:systemd),这个程序会设置对应的运行级别,时区,键盘,环境变量... 最终是打印出登入界面

##############################################################################

grub相关介绍

  bios已经固定在主板芯片上,对于设置BIOS一般我们不会有过多的干涉,因为硬件出厂时已经设置完毕,而grub是启动内核的关键点,熟悉GRUB配置也是LINUX管理员的必学的知识之一。

 

GRUB支持的文件系统:

Support multiple filesystem types

Supportmultiple filesystem types transparently, plus a useful explicit blocklistnotation. The currently supported filesystem types are BSD FFS, DOS FAT16 andFAT32, Minix fs, Linux ext2fs, ReiserFS, JFS, XFS, and VSTa fs.     

 

grub可以引导多个系统(Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, andLinux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are supportedvia a chain-loading function.

)

 

 

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

GRUB启动三个步骤:Stage1 Stage1.5 Stage2 

GRUB 包含如下几个启动模块:两个必须的场景文件(Stage1,Stage2)。非必需的Stage1.5,首先对他们有一个大致的了解。 

Stage1 

第一阶段的代码存储在MBR中。这段代码包含一块指向列表的下一个阶段GRUB,stage1_5或Stage2,启不启动Stage1.5取决于Stage2所在的文件系统。 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@www ~]# dd if=/dev/sda count=1 of=/tmp/MBR  #复制MBR的内容到tmp下
1+0 records in
1+0 records out
512 bytes (512 B)copied, 0.000298384 s, 1.7 MB/s
[root@www ~]# file /tmp/MBR                                     #查看文件类型
/tmp/MBR: x86 bootsector; GRand Unified Bootloader, stage1 version 0x3,
 boot drive 0x80, 1st sector stage2 0x849fe,GRUB version 0.94;
partition 1:ID=0x83, active, starthead 32, startsector 2048, 1024000 sectors;
partition 2:ID=0x8e, starthead 221, startsector 1026048, 40916992 sectors, code offset 0x48
[root@www ~]#
[root@www ~]# file /boot/grub/stage1   #此文件内容和mbr中的446字节内容一样
/boot/grub/stage1:x86 boot sector; GRand Unified Bootloader, stage1 version 0x3,
GRUB version 0.94,code offset 0x48

Stage1.5

Stage1的全部的工作是从本地磁盘把Stage 2或者Stage 1.5装载进来。由于对 stage1大小(446字节)的限制,代码不可能设计的过于复杂庞大,它只能识别基本的linux文件系统(fdisk -l ID 为83的文件系统),如果是其他的文件系统,折衷的方案就是加载Stage1.5,否则不用加载Stage1.5,直接加载Stage2。     相信你已经明白了什么时候需要加载Stage1.5!!

[root@www ~]# cd/tmp/

[root@www tmp]# cd/boot/grub/

[root@wwwgrub]# ls *stage1_5  

e2fs_stage1_5  ffs_stage1_5      jfs_stage1_5    reiserfs_stage1_5  vstafs_stage1_5

fat_stage1_5   iso9660_stage1_5  minix_stage1_5  ufs2_stage1_5      xfs_stage1_5

 

Stage2 

第二阶段代码读取/boot/grub/grub.conf来决定如何加载内核选择启动哪个内核(grub可以引导不同的内核),显示grub菜单。Stage2 的代码存储在文件 /boot/grub/stage2

 

 

 

##############################################################################

grub的修复

 

grub损坏有以下几种修复方法:

1.使用安装系统时原光盘,救援模式

2.使用已经装有grub引导程序的移动设备

3.将硬盘卸载,挂载到能正常开机的PC进行修复

如果以上都方法都不能满足,把硬盘丢了...

 

 

以下使用第三种方法修复:

 

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

 

手动破坏grub分区

[root@www tmp]# dd if=/dev/zero of=/dev/sda bs=400 count=1   #不要超过446字节,不然分区也会损坏

1+0 records in

1+0 records out

400 bytes (400 B)copied, 0.000285534 s, 1.4 MB/s

[root@www tmp]# sync

[root@www tmp]# sync

[root@www tmp]# sync

[root@www tmp]#reboot

重启会发现没有找到操作系统

 

插入光盘

选择救援模式

wKiom1YL2AbyydANAAM4r4Zw6eQ067.jpg

 

选择语言键盘类型等

wKioL1YL2DnCoaw0AAGQCZkf_xE956.jpg

 

是否启动网络功能  选择NO

 

 wKioL1YL2FbCcz3TAAEHpUjkoXg911.jpg

继续

wKioL1YL2I3BxVyQAALAh7Ng0DI817.jpg

 

可以看到源磁盘临时挂载到了 /mnt/sysimage 目录下

wKiom1YL2KazkY1lAAGebKwm7no052.jpg

 

wKiom1YL2MrRcJoDAADx7mof7cI380.jpg

 

选择start shell

wKioL1YL2QWjR0MXAADcNb8_4HQ046.jpg

 

wKiom1YL2T2TxwPjAAEdCti0tWU874.jpg

 

切换根目录

 

 

 

 

 

 

重新安装grub到MBR扇区中,注意是引导系统的那块硬盘设备,不能随便安装到其它硬盘同步重启

 

grub修复完成!!

 

 

############################################################################################

使用GRUB引导系统

 

GRUB已经损坏,但是源光盘丢失,也可以使用手中移动设备做一个linux,使用做好引导移动设备引导系统(相当于winPE)

 

修改启动项从移动设备启动(此步骤可以略过,bios会从第一启动项扫描,直到找到可启动的分区)

 

 

进入grub命令行界面:

 

 

 

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

设置GRUB密码

 

设置密码防止其他人使用单用户模式恶意修改修改root密码,造成不必要的损失

 

将密码放在grub.conf里不同的地方起到不同的作用, 一种是输入密码以后才可以使用grub菜单的命令行模式,进行编辑, 一种是输入密码后才可以启动系统(相当于设置硬盘密码)

 

生成密码:

[root@localhost ~]# grub-md5-crypt

Password:

Retype password:

$1$.Fn1S$Q1dbZ39KfVf7Ot5UIn4vT.                  #复制加密的密码

 

修改配置文件

[root@localhost ~]# vi /boot/grub/grub.conf

password --md5 $1$.Fn1S$Q1dbZ39KfVf7Ot5UIn4vT.                 # password --md5 生成的密码添加到配置文件中对应的位置

 

wKioL1YL7eSB1DQfAARMOqYAqng972.jpg

 

保存退出重启生效

 

 

 

wKioL1YL7hmjqLgaAAFkLAA2V1Q672.jpg

wKiom1YL7iigyBpgAAByJmweh6I459.jpg

#####

清空密码

[root@localhost ~]# vi /boot/grub/grub.conf 

wKiom1YL7lrxxJX2AAUHE8JuOkA907.jpg

保存后下次重启生效

 
(责任编辑:IT)