GRUB的应用

GRUB

GRUB(GRand Unified Bootloader)是bootloader的一种,它的主要功能是选择要启动的内核。

当我们开机时,这个GRUB菜单是隐藏的,

在这个画面时,我们敲任意键,就可以显示出GRUB菜单,然后可以编辑

摁‘e’键可以进入二级目录

这里显示了,kernel这一行显示了要加载的内核版本,initrd显示给内核提供的辅助驱动,来加载逻辑卷等。

把光标调到kernel这一行,再次摁‘e’键,可以在里面添加参数,输入完后,摁回车表示确认,然后在kernel这一行摁‘b’键就可以启动了

例如:我们以1级别启动,来重新设置root的登录密码

在kernel里添加一个参数1,s或S,single,就可以直接登录了

在这里面添加1

这没需要输入用户名和密码,就直接进入root用户了,然后就可以修改密码了,然后输入init3就可以切入正常模式了,在这个过程中,会启动3级别需要的服务

下面我们介绍下grub的组成:

grub有两个版本

grub 0.x:gryb legacy(传统grub)

grub 1.x:grub2

grub legacy:(CentOS5,6)

1、GRUB程序的组成

主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。

device.map:存放的是内核文件的根分区

stage1: 放在mbr中

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

stage2:放在磁盘分区(/boot/grub/)中,作用是提供菜单并提供交互式接口(e编辑菜单,c命令模式),加载用户选择的内核或操作系统,为菜单提供保护机制等

grub.conf:配置文件 还有一个链接文件是/etc/grub.conf

在grub菜单中,摁‘c’键,可以进入交互式接口,指定一些参数,可直接启动

然后回车就可以启动了

grub如何识别设备:

(hd#,#)

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

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

(hd0,0)表示第一个磁盘的第一个分区

grub的命令行接口

help: 获取帮助列表

help KEYWORD(命令): 某个命令的详细帮助信息

find (hd#,#)/PATH/TO/SOMEFILE:确定某文件是否存在

root (hd#,#)  用来设定grub的根只能指向一个设备;这个根不是文件系统的根

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

例如:init=/path/to/init, selinux=0(表示禁用内核中的selinux功能)

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

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

直接在命令行输入比较麻烦,就可以下写到配置文件中,

配置文件:/boot/grub/grub.conf  还有一个链接文件是/etc/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: 启动选定的内核或操作系统时进行认证;

生成密码串,使用grub-md5-crypt命令

为grub菜单或者内核进行认证

修改配置文件为下图,

然后保存退出,然后重启

为了演示效果,我们在全局加了一个password选项,有添加一个title在里面添加一个password选项

然后我们进入grub菜单,这个时候就有两个选项了,这个时候摁‘e’键没用,使用‘p’键,输入密码,才能使用‘e’键,要么选定一项直接使用回车启动,但是如果在title里加入了password是对内核加密,需要先输入密码才能启动

使用‘p’键,输入密码之后才能使用grub菜单项

这个时候可以对这两个选项进行修改了,第一个title没有添加password选项,回车选定之后可以直接启动,如果选择第二个,回车之后会提示让输入密码,才能启动

修复安装grub

(1) grub-install 这个命令安装grup

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

(2) grub 进入命令行模式,这种方式根文件系统要提前存在,而且要有grub目录,里面的文件是齐全的

grub> root (hd#,#)

grub> setup (hd#)

在虚拟机中添加一块新硬盘,然后把grup装进入,然后使用者新硬盘建一个新的虚拟机,然后启动

首先添加一块新硬盘,然后分区,格式化文件系统等(如有不会的,可以查看以前的博客)

然后在/mnt下创建一个boot目录,然后把新硬盘的第一个分区,挂载到刚创建的目录

然后安装grup,

这就安装好了,然后验证下

但是没有配置文件,所以要自己写一个,也没有内核和initrd,所以需要复制本机的内核和initrd到新硬盘下

然后编辑配置文件内容如下

但是,我们把根文件系统指向了/dev/sdb3,但是里面没有文件包,所以我们要把根文件系统里的文件在/dev/sdb3中创建

这里面并没有文件,我们复制一个bash到新硬盘下,并且要把依赖到的文件也复制过去,等下开机时,可以直接启动bash

然后还要系统系统的init程序,如果不指定,就会自动启动/sbin/init因为我们这个硬盘里没有,会出错的

你需要确定你刚在配置的那个硬盘的路径

然后使用vm创建一个新虚拟机,其他都一样,然后在选择磁盘的时候,选择使用现有的

然后创建完成,启动就可以查看了

然后直接启动,出现grub菜单,然后使用‘e’键,然后在kernel这一行,加入参数selinux=0,这个参数要加在init前面,然后回车回到kernel这一行,然后摁‘b’启动就可以了

这就成功了

把自己系统的mbr弄坏,然后使用光盘的grup进行引导修复

这就把grub的第一阶段给弄坏了,

如果这个时候你的系统是开机状态,直接使用命令grub-install --root-directory=/ /dev/sda就可以直接修复了,

然后sync同步以后,在重启就没有问题了,

也可以使用grup然后回车进入命令行模式进行修复

如果你的系统是关机,再启动就不行了,只能使用紧急救援模式进行修复

再把mbr弄坏,然后使用救援模式进行修复

弄坏之后进行重启,然后把光盘镜像挂载上,然后重启

然后选择第三项,即Rescue installed system 然后回车

或者摁‘ESC’输入linux rescus回车就可以了

然后根据提示做就行了

然后切换到根下,使用chroot /mnt/sysimage/ 切到实际的根上,然后执行grub-install就行了

然后exit回到救援模式的bash下重启就行了(光盘卸掉)

时间: 2024-08-09 02:20:10

GRUB的应用的相关文章

#24 centos6(RHEL)系列操作系统的启动流程、与命令chkconfig、grub的使用

所有由rc脚本关闭或启动的链接文件的原文件都存在于/etc/rc.d/init.d,系统为了方便使用,为此目录创建了链接/etc/init.d 所有/etc/inid.d(/etc/rc.d/init.d)目录中的脚本执行方式: # /etc/init.d/srv_script {start|stop|restart|status} # service srv_script {start|stop|restart|status} chkconfig命令: chkconfig - updates

详解 linux中的grub

grub是什么: grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后, 内核会根据grub配置文件中的配置,找到根分区所使用的文件系统对应的驱动,通过根分区文件系统 对应的驱动,挂载根分区,从而达到启动操作系统的目的. 在了解grub以前,请先大体上了解一下centos5/6的启动过程,然后再理解grub就更容易了, 还记的我们以前总结过的centos5系统启动流程吗,如下图,此处我们重点讨论下图红框中的步骤. centos5/6中使用grub作为bootl

grub resource>unknown filesystem异常处理

前段时间新装的Ubuntu server 14.04 AMD64位操作系统出问题,没办法只能重装 安装完成后重启然后初始化服务器阵列控制器和防火墙后,弹出 UNKNOWN FILESYSTEM GRUB RESOURCE> 进入不到系统引导界面 当时以为是磁盘分区的问题,重装了Ubuntu7次,问题依旧没解决 最后按照如下指引操作发现问题线索 GRUB RESOURCE>ls hd0,(hd0,gpt1),(hd0,gpt2),(hd0,gpt3) GRUB RESOURCE>ls (h

CentOS6上新增硬盘并安装配置grub文件

实例: 为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区: (1) 为硬盘新建两个主分区:并为其安装grub: (2) 为硬盘的第一个主分区提供内核和ramdisk文件: 为第二个分区提供rootfs: (3) 为rootfs提供bash.ls.cat程序及所依赖的库文件: (4) 为grub提供配置文件: (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机: 新增硬盘并分区 [[email protected]~]# fdisk -l /dev/sdb Disk /dev

win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub

前几天整理了下电脑的分区,合并并删除一些分区,结果导致 grub 被破坏了,Ubuntu进不去了,启动后直接进入了 rescure 模式.后来又折腾了下,终于修复好了,现总结一下. 先说一下我的系统环境,我是 Win7 + Ubuntu 16.04 双系统,先安装的 Win7,后安装的 Ubuntu.采用的是 Windows 引导 Ubuntu 的方式,使用的工具是"EasyBCD 2.3 个人版本".Ubuntu 分区时,"/boot" 是单独分区的.详细分区情况

Grub实践

为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区: (1) 为硬盘新建两个主分区:并为其安装grub: (2) 为硬盘的第一个主分区提供内核和ramdisk文件: 为第二个分区提供rootfs: (3) 为rootfs提供bash.ls.cat程序及所依赖的库文件: (4) 为grub提供配置文件: (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机: 操作步骤: 1.自行为虚拟机额外添加一块硬盘,并设置分区:以/dev/sdb为例,具体操作不再赘述 /dev/sdb1:作

linux命令:系统裁剪之一grub引导

Linux系统裁剪笔记 1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统,从而达到系统缩减,订制特殊系统. 2.原理 大家都知道,操作系统的启动流程是(主要是Linux):POST->BIOS->MBR(grub)-kernel-->initrd-->sbin/init, POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是用的g

关于Linux系统上grub的介绍和使用实例

grub(GrandUnified Boot Loader)是有名的引导内核程序(另外一款比较有名的是LILO,嵌入式环境使用U-boot.bootloader),它支持多种硬盘分区类型加载(FAT,ext2,ext3,ext4,minix,FFS等),支持多系统引导等. 1.配置文件:/boot/grub/grub.conf 配置项:         default=#: 设定默认启动的菜单项:落单项(title)编号从0开始:         timeout=#:指定菜单项等待选项选择的时长

Centos 6 –grub legacy及grub修复

一.CentOS 6 grub legacy: 1.启动流程: POST –> Boot Sequence(BIOS) –> Boot Loader –>Kernel(ramdisk) –> rootfs –> switchroot –>             /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 设定默认运行级别 –> 系统初始化脚本rc.sysinit –> 关闭或启动对应级别的服

CentOS 系统启动流程之GRUB

系统启动之GRUB GRUB(Boot Loader) 从系统启动流程可以得知,在BIOS读取相关信息之后,接下来是去第一个可以启动的设备当中的MBR中读取Boot Loader信息,Boot Loader提供具有菜单功能.直接加载内核信息,以及相关的控制权转交功能.所以说系统启动必须要有Boot Loader,然后才能去加载内核. Boot Loader存储于MBR当中,MBR只有512bytes,其中446bytes存储Boot Loader,但是Boot Loader功能很强大,所以446