Linux系统引导信息恢复与重建和双系统.docx
《Linux系统引导信息恢复与重建和双系统.docx》由会员分享,可在线阅读,更多相关《Linux系统引导信息恢复与重建和双系统.docx(22页珍藏版)》请在冰豆网上搜索。
Linux系统引导信息恢复与重建和双系统
Linux系统引导信息恢复与重建和双系统(win+linux)引导修复
Linux系统引导信息的恢复与重建
环境描述:
硬件环境:
vmworkstation9
linux系统:
RedHatEnterpriseLinuxServerrelease5.632位
Linux内核:
vmlinuz-2.6.18-238.el5
Grub版本:
grub(GNUGRUB0.97)
本文操作和测试,参考:
来自:
在自制Linux盘上安装GRUB
网址:
为了模拟linux引导信息损坏场景,在安装RHEL5时特意没有安装GRUB,如下图:
现在假定linux系统完好,而linux引导信息损坏的情况
启动linux系统,看到黑屏和左上角的光标,系统将中止在此处,如图
通过linux安装光盘重建引导信息和启动菜单
步骤如下:
一.从光盘启动到救援模式.
1.在BIOS中设置光盘启动,图略去
2.以linux安装光盘启动至如下画面,输入linuxrescue进入救援模式
3.这里选择English
注意:
不要选择简体中文,因为在救援模式下不支持中文,会提示如下错误:
4.选择相应的键盘,一般为us美式键盘
5.选择设置网络信息,选择yes,目的是可直接将所需修复的文件直接从现有正常的系统中直接COPY到当前系统.
5.1.选择要设置的网络接口
5.2设置IPv4地址信息.
5.3设置网关和DNS,这里不设置也没关系,除非正常的系统不在本网段.
5.4不填写网关和DNS会报错,不过没关系.
6.救援模式下试图搜索linux根系统,且以读写模式挂载,点continue
7.如果看到下面这个画面,说明linux根系统已经找到,选择OK
8.由于找到的linux根系统在/mnt/sysimage之下,为了之后操作方便,可以通过chroot命令改变根系统的外显目录
二.安装grub
1.首先查看当前硬盘的分区情况:
fdisk-l
注意boot下的*号,说明/dev/sda1是启动分区,
boot分区我划分200M,所以通过Blocks这列的可以看出/dev/sda1就是boot分区,
1个Block=1024Byte=1k;所以200781Blocks=200M左右
2.查看/boot分区里的内容:
boot分区里含有vmlinuz-2.6.18-238.el5内核文件和
initrd-2.6.18-238.el5.img内存磁盘,这两个文件启动时会用到
3.查看/boot/grub/目录下的内容:
ls-a
/boot/grub/里只有一张图片,阶段1和阶段2文件都不在在
4.安装grub到启动分区即/dev/sda1,通过grub-install
注意:
这里输入grub-install/dev/sda1,如下图,如果看到Installationfinished.Noerrorreported,且没有其他报错,则说明程序执行正常
注意2:
如果有boot分区,则/dev/sda1是boot分区,如果没有boot分区,则grub-install后输入根分区设备名
5.grub-install正确执行后,会看到/boot/grub/下多了些文件:
现在来简单的说明一下这些文件都是做什么用的!
!
!
摘自:
chinaunix上的文章,感谢hjlin
引自:
能正常工作的grub应该包括一下文件:
stage1、stage2、*stage1_5、menu.lst。
其中stage1要被安装(也就是写入)某个硬盘的主引导记录,或者某个活动分区(这个分区要用fdisk标记成可启动的)的启动扇区。
stage1的主要的也是唯一的作用就是找到你存放在硬盘上某个地方的stage2文件,来完成后续的工作。
stage2文件可以存在某个特定的文件系统中,比如你分了一个linux分区,在上面创建一个ext2文件系统,然后把这个文件拷贝到这个分区的某个目录下。
也可以把stage2直接存放在硬盘的某个位置,也就是未分区的某个地方。
不过,好像没有多少人会这么做吧。
因为stage1的容量有限(主引导记录MBR和启动扇区的大小只能够是512字节),所以它对文件系统是无法识别的,那如果你把stage2存放在ext2或者fat格式的文件系统上,它如何来找到这个文件呢?
这就要用到上面提到的那些stage1_5的文件了,它们负责解释文件系统。
你的stage2放在什么格式的文件系统上,就要调用对应的那个stage1_5文件。
比如,你把stage2存放在ext2格式的文件系统上,就需要e2fs_stage1_5;stage2存放在fat格式的文件系统上,就需要fat_stage1_5了,stage1.5可以安装在mbr之后的位置。
简述开机过程:
接下来是简单开机过程
①按下电源后,计算机自检(POST),如果硬件设备(CPU、内存、硬盘、光驱、各种卡)都没有问题,BIOS会检查各个硬盘的MBR,看有没有可以执行的代码,如果你把grub安装到第一个硬盘的MBR上,那BIOS就会找到它,然后把控制权交个这段代码(其实就是512字节大小的stage1)。
三.通过grubshell将stage1写入MBR或启动分区的首扇区
1.在#后输入grub回车
2.进入grubshell里,输入root(hd0,0)
注意:
root与(hd0,0)之间有一空格,不输入空格就会报错如上图
注意2:
root定位的是boot分区(如果有的话),或者是Linux根分区,而不是MBR
3.定位MBR,写入引导信息,如下图
注意:
如下看到了yes,succeeded,红线所标,说明操作正确
注意2:
setup(hd0)做了两件事,第一件是把grub的阶段1即stage1写到硬盘的第一个扇区(MBR),形如:
install/grub/stage1(hd0)(hd0)1+15
第二件是:
把grub的阶段2写入到boot分区启动扇区,形如:
(hd0,0)/grub/stage2
四.编写grub.conf文件,实现启动菜单
1.用vim编写grub.conf注意:
vim有颜色支持比vi好用
2.grub.conf编写错误及导致的失败
2.1内核文件,initrd文件没写版本号
注意:
/vmlinuz要与boot分区下的内核文件名一致
/initrd要与boot分区下的initrd文件名一致
导致启动出现如下错误:
2.2内核文件,initrd文件增加版本号,仍无法启动
启动时出现内核异常,kernelpanic
2.3修改:
指定root=LABEL=/后正常
注意:
root=LABEL=/也可以改写为root=/dev/sda2
sda2不是boot分区,而是根分区,root要对应根分区
编辑完grub.conf后保存退出到shell,两次输入exit后,linux系统重新启动,记得要取走系统光盘啊!
!
!
系统启动正常!
!
!
!
OK!
!
!
2.4grub.conf两个参数的说明rhgb和quiet
引自:
rhgb表示redhatgraphicsboot,就是会看到图片来代替启动过程中显示的文本信息,这些信息在启动后用dmesg也可以看到
quiet表示在启动过程中只有重要信息显示,类似硬件自检的消息不回显示
加rhgb参数启动的画面:
五.创建grub.conf的链接文件
六.虽然成功恢复了grub和引导信息,但仍在在的问题
重启动后,grub.conf被系统修改,多了crashkernel条目
暂不知为何而加此条目?
crashkernel=128M@16M
128M内存(从16M开始)不被正常的系统使用,为捕获内核保留
七.简要说明一下,linux系统中使用了LVM的情况
如下图:
由安装程序自动分区,则会使用LVM
删除磁盘上的所有分区,并创建默认分区
注意:
虽然系统使用了LVM,但/boot分区仍然是标准分区,所以,仍可按照上面所说的方法恢复grub和引导信息
双系统(win2008+RHEL5.6)引导信息的恢复
环境描述:
硬件环境:
vmworkstation9
linux系统:
RedHatEnterpriseLinuxServerrelease5.632位
Linux内核:
vmlinuz-2.6.18-238.el5
Grub版本:
grub(GNUGRUB0.97)
windows系统:
win200832位
一.windows系统与linux系统在安装时的顺序
1.首先安装windows2008系统,然后再安装RHEL5.6
原因:
1.windows2008的引导信息不能识别linux的引导信息,而linux的grub能识别windows的引导信息,换句话说,如果先安装linux,再安装windows,windows系统的引导信息将覆盖linux的引导信息,导致linux系统无法引导,最终无法启动
2.如果先安装linux,通常的分区方案为boot占一个主分区,根系统(/)占一个分区,swap占一个分区.那么这块硬盘就只能再分一个分区了,而在windows下这最后的主分区将被当成逻辑分区,而windows是不能安装在逻辑分区下的.
3.先安装linux,即使再加一块硬盘,把windows安装到另一块硬盘主分区上,安装程序也提示无法安装.
如下图:
上面这张图说明windows无法安装到最后一个主分区
上面这张图说明windows无法安装到逻辑分区
磁盘0已经安装了RHEL5,磁盘1主分区依然不能安装windows
二.为模拟损坏的linux系统,在安装RHEL时依然不安装GRUB
1.安装linux(RHEL5.6)时不安装grub,安装完成后重启,依然启动windows
注意:
此次安装linux时,没有划分boot分区
三.安装linux的grub
1.用RHEL5.6的光盘启动并进入救援模式,过程同上文,此处略去
2.光盘启动完成后执行chroot/mnt/sysimage
3./boot/grub下依然只有splash.xpm.gz一个文件
3.用fdisk-l查看linux系统分区
4.用grub-install安装grub
注:
grub-install/dev/sda6(sda6是第一个linux分区,根分区)
5.用grubshell写主引导记录
注:
看到yes,succeeded,无其他错误,说明执行正常
注2:
输入root(hd0,用TAB键补全,可查看各分区的类型,如上图
注3:
退出quit
6.编写grub.conf文件,其他中包括win2008的启动菜单
注:
要用vim编写,而不要用vi编写,因为在vim中关键字有颜色,如果字母打错,颜色会变为白色,容易找出错误
注意:
红线所标的/boot,由于这次安装时没有安装/boot分区,boot只是根分区下的一个目录,所以kernel和initrd后面的路径要写全.
注意2:
如果是系统安装的grub,grub.conf里会写
root=LABEL=/,指示linux根分区所在位置
root=/dev/sda6这种写法也可以,因为/dev/sda6也是根分区
到此linux系统和双系统引导信息损坏导致无法启动故障,均可恢复
即使linux系统没有boot分区,依然可以恢复
重复一下重点内容:
1.grubshell中root(hd0,X)如果有boot分区,则是指boot分区,如果没有boot分区,则指得是linux根分区
2.在grubshell中setup(hd0),做了两件事:
(1).stage1:
将linux系统的指针,写入MBR,当系统启动时,读取MBR里的stage1跳转到linux的boot分区
(2).stage2:
将后续的引导信息写入linux的boot分区或者根分区
3.grub.conf里root=LABEL=/也可改写为root=/dev/sda2
因为:
sda2是根分区,不是boot分区