出现grub rescue模式一般是硬盘分区出现变动、导致旧的grub找不到启动文件而出现的。
出现错误具体原因未知,但开机不能引导肯定是grub配置文件出错,/boot/grub2/grub.cfg
解决方法:
1,插入安装U盘或者光盘,进入救援模式,重装grub重新生成grub.cfg文件:grub2-install /dev/sda*boot目录所在分区grub2-mkconfig -o /boot/grub2/grub.cfg重启后应该就OK了。
2,grub>模式下:输入:ls 查看所有磁盘分区:hd。x,x......用:ls hd(x,x)/grub 找grub所在的分区,有正确执行结果的便是找到linux所在分区后执行setprefix=hdx,x/grubsetroot=hx,x、insmod normal再使用normal命令进入系统后,再修复grub 配置。or:查找boot分区:find /boot/grub/menu.lst 或者 find /boot/grub2/grub.cfg
输入以下命令:cat hd0,7/boot/grub/grub.conf 关于内核信息的,看一下就明白了。按照下面命令依次输入指定/boot分区使用命令:grub>root hd0,0grub>kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet 回车grub>initrd /boot/initrd-2.6.18-53.el5.img 回车boot 回车启动
什么是GRUB
GNU GRUB 是一个多重 *** 作 系统 启动管理器。GNU GRUB 是由GRUB(GRand Unified Bootloader) 派生而来。GRUB 最初由Erich Stefan Boleyn 设计和应用;
系统启动引导管理器,是在计算机启动后运行的第一个程序,他是用来负责加载、传输控制到 *** 作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成;
Linux 中GRUB的配置文件
grub的配置文件位于/boot/grub/grub.conf其内容如下。
default=0 //默认启动的内核或者说默认启动的 *** 作系统,0表示的是第一个内核或者 *** 作系统,依次往后排(title所指定的那一项,第一个title是0,第二个是1,依次)
timeout=5 //默认的超时时间,这里定义的是5秒,如果5秒没有选择,默认启动第一个内核或者说是第一个 *** 作系统
splashimage=(hd0,0)/grub/splash.xpm.gz //指定grub的背景图片,因为grub是系统开机后,运行系统所必须运行的第一个程序,所以,系统所自带的文件系统还没有被挂载,好在grub可以直接访问磁盘文件,grub所识别的硬盘跟linux系统的不太一样,grub认为,所有的磁盘都是hd的,而系统则不是。所以这里是(hd0,0),第一个0表示的是第一块硬盘,第二个0表示的是第一个分区。如果要引用磁盘设备,要用括号括起来,所以这里有一个括号。
hiddenmenu //隐藏grub菜单,如果有这一项,我们将看不到grub的菜单,只能看到grub的背景图片,然后上面出现了一个 please any key to enter the menu 下面是 Booting <default=0指定的,默认是第一个title的内容>in <timeout=N 超时时间设置>... 这样子。具体的看下面的图
![]( http://upload-images.jianshu.io/upload_images/4958474-d753926ca3df5492.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
然后可以通过按任意键,进入grub的菜单。如果有多个内核的话,我们可以选择启动哪一个内核。下图是grub的菜单
![]( http://upload-images.jianshu.io/upload_images/4958474-3b21dfedd7290e30.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
下面的英文内容,相信大家也看得懂。我就不多说了。通过编辑这里的grub菜单,我们可以直接进入单用户模式,然后修改密码。忘记密码的时候,可以试下这个方法。
title Red Hat Enterprise Linux Server (2.6.18-164.el5) //这就是一个标题,就是Grub菜单上所显示的内容,title关键字后面的内核,可以随便写,为了方便识别,建议还是写一些可以从字面意义看出是什么 *** 作系统或者内核的文字描述。
root (hd0,0) //把hd0,0设置为根目录,方便访问.设置文件访问的起始点,这里设置的根,是grub的根。
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet //指定内核文件,在内核后面跟的root,指的是 *** 作系统的根目录在哪儿. rhgb是redhat的一个小工具,显示各种输出的信息,包括硬件的初始化,quit表示是静默模式,不输出信息.启动系统的时候会卡一下,然后出现redhat就是因为没有显示rhgb小程序的输出信息.
initrd /initrd-2.6.18-164.el5.img //可以认为这是一个驱动程序,系统刚开机的时候,Grub第一个启动,要挂载文件系统,就要从文件系统里面读取驱动,如果驱动在内核里面还好,如果不在内核里面了,那不就……所以,这个可以认为是一个驱动。其实,他是一个微小的linux系统,这个系统里面,只包含了驱动程序,没有其它文件。可以先把它重命令为.gz的,然后解压,解压后再用cpio解压,就可以看到其内容了。目录结构跟你的linux系统是一样的,只不过没有文件,只有驱动程序而已。
刚才说过,可以直接通过这里改密码,这样是很不安全的。也就是说,如果别人能接触到我们的物理服务器,他就可以直接更改我们系统的密码,所以,我们可以给grub 加密 码,加密码的方法就是直接在grub.conf中指定,可以用关键字password 后面跟密码来实现,但是这样的密码是明文的,也不安全,所以我们可以用password --md5 通过grub的md5加密工具来加密,然后写到password --md5的后面。grub的md5加密工具是grub-md5-crypt ,直接使用这个命令,输出密码,然后会生成一段MD5加密后的值,写到关键字后面就可以实现md5加密grub了。
写的位置的不同,加密的效果也就不一样,我们可以写到一个title里面,只对指定的内核或者说 *** 作系统来加密,当启动该内核或者系统的时候,会要求用户输入grub的密码。当写在所有的title外面的时候,编译grub菜单的时候,会要求输入密码,这时候密码先按p键输入密码,然后再按e键,才能编辑。
手动安装GRUB
安装grub有两种方法可以使用。下面进入详细的介绍,如果某些地方说的不太准确,希望大家能够提出,TKS
第一
可以使用grub-install命令来进行安装,具体方法是
grub-install --root-directory=/要安装到哪个目录 /要安装的设备
例:我这里用 虚拟机 演示一下,新加了一块磁盘,然后分区格式化(该 *** 作不演示),然后挂载,然后用命令安装,如下图
x
注意:这里挂载点一定是boot目录,可以不是/mnt,但最后挂载的目录名字,一字叫boot,不然会出问题的。还有安装的时候--root-directory=一定不要指定到boot目录,要指定到boot所在的目录,因为grub安装的时候,会去找boot目录,如果找不到,会报错的。当我们把盘挂载到boot之后,可以认为,该盘的名字就叫boot,所以,它会在该盘内写入bootloader,以引导系统,如果我们安装的时候指定到了boot,那么就是把bootloader的内容写到了文件里面,而不是硬盘的MBR。切记切记。我做了好多次都没做出来,就是犯了这个错。
安装完成后,我们新建一个虚拟机,创建磁盘的时候,使用已有磁盘,找到我们安装过grub的磁盘,然后使用之即可。开机之后,会惊喜的发现,出现了grub的提示符。
![]( http://upload-images.jianshu.io/upload_images/4958474-a6b446eee903d400.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
第二种方法(有点儿麻烦):
首先把 /usr/share/grub/i386-redhat/里的所有文件,拷贝到grub目录
注意:这里同上,一定要挂载到boot目录下,无论boot目录在哪
![]( http://upload-images.jianshu.io/upload_images/4958474-5bc61b8664d71e60.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
然后开始grub的安装,直接使用命令grub
![]( http://upload-images.jianshu.io/upload_images/4958474-83d9432c7ef95f52.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
root (hd2,0) 表示grub要安装到第三块硬盘第1个分区上
setup (hd2) 指定要安装的设备,设备为第二块硬盘,安装完成后quit命令退出就可以了,至于图片,我就不上了,绝对是可以的。
要修改grub,请注意以下几个重要文件: 1. /boot/grub/grub.cfg 此档案中包含了GRUB选单资讯。 注意他的开头,说明了这是由/etc/grub.d与/etc/default/grub所生成的,不要自己编辑。这个档案还是唯读属性,就是要避免你直接去编辑。 若是你修改了这个档案,只要更新核心,或是以指令更新grub选单,之前的修改就会被覆盖掉。所以除非不得已,请不要去动这个档案。要修改,请继续往下看。 2. /etc/default/grub 此档案为使用者修改grub设定的主要档案,真的改烂了请不要急,在/usr/share/grub/default/里还有一份,复制回来即可。 要修改这个档案,请输入 sudo gedit /etc/default/grub3. /etc/grub.d目录 此目录放置档案,会在sudo update-grub时,合并到/boot/grub/grub.cfg中。 注意这些档案名称结构,前面都有数字。数字越小的,在合并时放在越前面。常有人问到,grub menu要怎麼更改选项的顺序?就是更改数字的大小。此外请你在这目录下输入ls -l,看一下各档案的属性,有没有看到都有x属性(可执行)?变动x属性,可以决定这个选项要不要出现在选单内。 以下介绍 /etc/default/grub 所使用的参数,我只介绍大家比较会去修改到的。 1. GRUB_DEFAULT - 设定预设选单选项。有以下几种作法。 GRUB_DEFAULT=0 以位置来设定预设选单选项。第一笔选单选项为 0,第二笔为 1,以此类推。 GRUB_DEFAULT="xxxx" 在此例中,选单中的位置不会有影响。例如:GRUB_DEFAULT="Ubuntu, Linux 3.11.0-13-generic"。注意要完整全称。 GRUB_DEFAULT=saved 由储存预设的作业系统开机。可以用grub-reboot和grub-set-default指令来设定预设作业系统。预设作业系统不会由来自选单中的互动式选择而被设定。 sudo grub-set-default 0 以位置来设定预设选单选项。第一笔选单选项为 0,第二笔为 1,以此类推。 sudo grub-set-default "xxxx" 以选单名称来设定 sudo grub-reboot 0 以位置来设定下次重启开机选项。第一笔选单选项为 0,第二笔为 1,以此类推。 sudo grub-reboot "xxxx" 以选单名称来重启开机 2. GRUB_HIDDEN_TIMEOUT - 此设定用来决定GRUB选单会有多长时间不被显示。 GRUB_HIDDEN_TIMEOUT=0 在单一作业系统电脑中,会立刻以预设作业系统开机。在只有一个作业系统状况下,这是预设的设定。假如还是要显示选单,请在这行前加上 # 注销掉,并确认 GRUB_TIMEOUT 设定为正整数。 GRUB_HIDDEN_TIMEOUT=X x为秒数,空白画面几秒后,系统将会依照预设开机,不会出现选单。当萤幕是空白时,使用者可以按下任何键以显示选单。 3. GRUB_HIDDEN_TIMEOUT_QUIET - 在空白画面时,是否显示倒数计时器 GRUB_HIDDEN_TIMEOUT_QUIET=true '不'显示计时器 GRUB_HIDDEN_TIMEOUT_QUIET=fault 显示计时器 4. GRUB_TIMEOUT - 选单显示多久之后自动以预设作业系统开机 GRUB_TIMEOUT=10 10秒后以预设系统开机 GRUB_TIMEOUT=-1 持续显示选单,直到使用者选择 5. GRUB_GFXMODE - 设定grub选单显示的解析度。一般是注解掉。 GRUB_GFXMODE=640x480 以640x480模式显示。 除非开机时选单显示就有问题,不然不要启用这个参数,据说会影响进入grub选单的时间。真的要启用,后面的数值请依照你显卡可以支援的模式填入,如1280x1024x16,800x600x24,640x480 6. GRUB_DISABLE_LINUX_RECOVERY - 救援模式要不要显示? 你在选单中是不是都有看到救援模式(recovery mode)?假如你的电脑一向稳定,而且你不太会去动到系统,可以考虑去除 # 注解 GRUB_DISABLE_LINUX_RECOVERY=true '不' 显示救援模式 7. GRUB_DISABLE_OS_PROBER - 对其他分割区作业系统的检查 大家应该都知道sudo update-grub可以找到在其他分割区的作业系统,制成选单。但有时我就是不想要他显示到选单内,那怎麼办?那注销掉这一行就可以不检查其他分割区有没有作业系统。 GRUB_DISABLE_OS_PROBER=true '不'检查其他作业系统 8. GRUB_BACKGROUND - 背景影像所在。这个参数,需要自行加入。 GRUB_BACKGROUND= 以/usr/share/background/xxx.jpg当作选单背景。可以.png, .jpg, 或.tga等格式欢迎分享,转载请注明来源:内存溢出
评论列表(0条)