码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统--Linux的Grub应用

时间:2015-09-28 19:08:16      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:grub应用   grub配置文件的介绍   grub损坏修复   内核启动参数   

grub应用

1.Grub(bootloader):全称为:GRand Unified Bootloader

现在存在两个版本:

grub 0.x: grub legacy

grub 1.x:grub2

2.grub的功能:

功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核;

3.grub legacy 有三个阶段,分别是:

stage1,stage1_5stage2

stage1:存放在MBR

stage1_5:存放在MBR之后的扇区中,让stage1中的Bootloader 能识别stage2所在的分区上的文件系统

stage2:存在磁盘分区上(/boot/grub),提供菜单让用户选择不同的内核或操作系统。

grub的配置文件存放目录为:/boot/grub/grub.conf  其中/etc/grub.conf文件是/boot/grub/grub.conf 的一个连接文件

    当系统启动的时,如果要加载grub所在的磁盘时,会读取这个磁盘的MBR,同时会加载stage1stage1会尝试读取随后扇区的stage1_5阶段,stage1_5阶段会帮助stage1中的bootloader识别statge2所在的分区上的文件系统,然后加载stage2所在磁盘分区,这个分区不但有stage2阶段,还有内核和ramdisk.

stage2及内核等通常放置于一个基本磁盘分区,而不会放在一个复杂的磁盘分区上,因为stage无法识别复杂的磁盘分区,如逻辑卷,软raid等。这也是为什么要单独创建一个简单的boot分区,而系统跟/做一个逻辑卷。但并不意味着boot要单独分区。

常用功能:

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

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

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

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

允许传递参数给内核

可隐藏此菜单

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

为编辑菜单进行认证

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

4.grub的交互式接口:

在系统启动时会有timeout用户选择的时长,按Enter键会进入一下界面(菜单选项):

技术分享

grub如何识别设备:

(hd#,#)

hd#:表示第几块磁盘

#:表示第几块分区

(1)grub的命令行接口:

按下c键,会给出一个grub>命令行接口:

help令:获取帮助列表

help KEYWORD:详细获取某个命令的帮助信息

        find (hd#,#)/Path/To/Somefile:查找某个磁盘分区上的某个文件

        技术分享

root (hd#,#):设置grub的跟设备。

        kernel /Path/To/Kernel_FILE

设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用cmdline参数;如:init=/path/to/init  selinux=0

常用的内核启动参数:

磁盘相关启动参数:

root #指出启动的根文件系统 如:root=/dev/sda1

ro #指定根设备在启动过程中为read-only,默认情况下一般都是这样配的

rw #ro类似,它是规定为read-write,可写

rootfstype #根文件系统类型,如:rootfstype=ext4

Consolekernel log相关启动参数:

console #console的设备和选项,如:console=tty0 console=ttyS0

debug #enable kernel debugging 启动中的所有debug信息都会打印到console

quiet 静默模式 将kernel log level设置为KERN_WARNING,在启动中只非常严重的信息

loglevel #设置默认的console日志级别,如:loglevel=7 0~7的数字分别为:KERN_EMERG,..,KERN_DEBUG

time #设置在每条kernel log信息前加一个时间戳

内存相关的启动参数:

mem #指定kernel使用的内存量,mem=n[KMG]

hugepages #设置大页表页(4MB大小)的最多个数,hugepages=n

CPU相关的启动参数:

mce # Enable the machine check exception feature.

nosmp #Run as a single-processor machine. 不使用SMP(多处理器)

max_cpus #max_cpus=n, SMP系统最多能使用的CPU个数(即使系统中有大于n个的CPU

Ramdisk相关的启动参数:

initrd #指定初始化ramdisk的位置,initrd=filename

noinitrd #不使用initrd的配置,即使配置了initrd参数

初始化相关启动参数:

init #在启动时去执行的程序,init=filename,默认值为/sbin/init

PCI相关的启动参数:

pci #pci相关的选项,我常使用pci=assign_buses,也使用过pci=nomsi

SELinux相关启动参数:

enforcing #SELinux enforcing状态的开关,enforcing=0表示仅仅是记录危险而不是阻止访问,enforcing=1完全enable,默认值是0

selinux #在启动时关闭或开启SELinuxselinux=0表示关闭,selinux=1表示开启selinux

initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;其中ramdisk 必须要和内核版本号一致。

boot:引导启动选定的内核 

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

grub> root (hd#,#)

grub> kernel /vmlinuz-Version_Release ro root=/dev/DEVICE ...

grub> initrd /initramfs-Version_Release.img

grub> boot

(2)进入编辑模式:

每次手动引导启动系统,还是有点麻烦的,可以在按e键进入编辑模式:

在编辑模式下可以修改内核参数,也可以进入单用户模式下等等。

其实编辑模式下显示的内容就是grub的配置文件的内容:/boot/grub/grub.conf

技术分享

5.grub的配置文件内容介绍:

配置文件/boot/gurb/grub.conf

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

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

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

hiddenmenu:隐藏菜单;

password [--md5] STRING: 菜单编辑认证;

title TITLE:定义菜单项“标题”可出现多次;

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

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

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

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

(1)使用命令grub-md5-crypt生成密钥字符串为菜单或启动选定的内核进行认证

如:

生成加密字符串:

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

Password: 

Retype password: 

$1$bQjoR$xpjXuIPvDgccSKfEP3hE2.

编辑grub配置文件:

        技术分享

重启系统进行测试:

(2)进入单用户模式

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

(2) 在选定的kernel后附加

    1, s, Ssingle都可以;

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

6.安装grub

(1)grub-install

grub-install --root-directory=root /dev/DISK

其中--root-directory 的值为boot所在的目录。

如:boot目录在/mnt/boot --root-directory=/mnt

(2)grub

grub> root (hd#,#)

grub> setup(hd#)

7.grub损坏的修复:

(1)grub的配置文件损坏的情况下:

模拟grub配置文件损坏,丢失的情况下的修复过程:

先备份一下:# cp grub.conf{,.bak}

删除配置文件:# rm -rf grub.conf

重启系统:# init 6

重新启动系统之后,会出现grub命令行接口,在此处手动启动系统:

技术分享

启动系统之后,在/boot/grub目录下在手动添加grub.conf配置文件。

(2)磁盘上的grub损坏的情况下:

模拟grub损坏,进行修复的过程:

模拟grub损坏:# dd if=/dev/zero of=/dev/sda bs=200 count=1

修复方法:

1.在grub已损坏,系统还没有重启的情况下:# grub-install --root-directory=/  /dev/sda 执行这个命令即可。

2.grub已损坏,系统还没有重启的情况下:在grub的命令行模式下执行如下命令:

grub> root (hd0,0)

grub>setup (hd0)

eg:
技术分享

            技术分享

3.grub已经损坏,系统已经关闭,无法启动的情况下:

有以下修复情况:

a.把损坏的磁盘拆卸下来,装载到一个好的系统上,在好的系统上利用grub-install命令进行对损坏的磁盘进行安装grub.

b.利用镜像文件进行修复:在系统启动时,以cdrom方式启动,启动之后会有一个选择界面的菜单,我们选择Rescue installed system 一项,即紧急救援模式。或者按Esc键,进入命令行模式,输入linux rescue 。bootlinux rescue

如:

技术分享

技术分享

然后执行以下命令即可:

# chroot /mnt/sysinit

# grub-install --root-directory=/ /dev/sda

# exit

# reboot

本文出自 “片刻” 博客,请务必保留此出处http://zkchang.blog.51cto.com/10574636/1698907

Linux系统--Linux的Grub应用

标签:grub应用   grub配置文件的介绍   grub损坏修复   内核启动参数   

原文地址:http://zkchang.blog.51cto.com/10574636/1698907

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!