GRUBlinux
GRUB(GRand Unified Bootloader)是bootloader的一种,它的主要功能是选择要启动的内核。bash
当咱们开机时,这个GRUB菜单是隐藏的,ide
在这个画面时,咱们敲任意键,就能够显示出GRUB菜单,而后能够编辑加密
摁‘e’键能够进入二级目录spa
这里显示了,kernel这一行显示了要加载的内核版本,initrd显示给内核提供的辅助驱动,来加载逻辑卷等。操作系统
把光标调到kernel这一行,再次摁‘e’键,能够在里面添加参数,输入完后,摁回车表示确认,而后在kernel这一行摁‘b’键就能够启动了
命令行
例如:咱们以1级别启动,来从新设置root的登陆密码3d
在kernel里添加一个参数1,s或S,single,就能够直接登陆了orm
在这里面添加1blog
这没须要输入用户名和密码,就直接进入root用户了,而后就能够修改密码了,而后输入init3就能够切入正常模式了,在这个过程当中,会启动3级别须要的服务
下面咱们介绍下grub的组成:
grub有两个版本
grub 0.x:gryb legacy(传统grub)
grub 1.x:grub2
grub legacy:(CentOS5,6)
一、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=#:指定菜单项等待选项选择的时长;
splashp_w_picpath=(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/sysp_w_picpath/ 切到实际的根上,而后执行grub-install就好了
而后exit回到救援模式的bash下重启就好了(光盘卸掉)