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