ps: 红字字体为重要部分, 仔细看
此次实验目的: 在工作中, 难免会遇到grub损坏, 现在来模拟grub损坏后修复过程。
一、 第一阶段修复MBR扇区故障;
1. 我们利用一条命令来把MBR的前446字节覆盖的方法来模拟第一阶段
[root@Centos1 ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
if=文件名: 输入文件名, 缺省为标准输入. 即指定源文件。
of=文件名: 输出文件名, 缺省为标准输出. 即指定目的文件。
ibs=bytes: 一次读入bytes个字节, 即指定一个块大小为bytes个字节。
bs=bytes: 同时设置读入/输出的块大小为bytes文件。
count=blocks: 仅拷贝blocks个块,块大小等于ibs指定的字节数。
[root@Centos1 ~]# init 6 #重启完后进不了系统
2. 挂载系统光盘, 进入救援模式;
①. 进入bios, 找到boot选项, 将CD-ROM调整为第一系统项;
②. 选择Rescue installed system, 进入救援模式;
③. 选择语言.默认即可, 按tab键移动到OK选项;
④. 选择键盘, 默认即可, 按tab键移动到OK选项;
⑤. 因为我们放入了本地光盘,所以这里也保持默认即可, 按tab键移动到OK选项;
⑥. 根据自己的实际需求是否开机网络, 本人选择no, 按tab键移动到OK选项;
⑦. 选择默认即可,默认将Rescue环境挂载到/mnt/sysimage, 按tab键移动到OK选项;
⑧. 选择进入模式, 这里本人选择shell模式, 按tab键移动OK选项;
⑨. 进入root环境, 安装grub;
bash-4.1# chroot /mnt/sysimage #进入到root环境
sh-4.1# grub-install /dev/sda #安装grub到第一块硬盘
sh-4.1# exit
⑩. 将光盘弹出, 重启操作系统, 便能进入系统;
bash-4.1# reboot #重启操作系统
二、 第二阶段模拟/etc/grub.conf丢失;
1. 删除grub.conf配置文件;
[root@Centos1 ~]# rm -rf /boot/grub/grub.conf #删除grub.conf配置文件
疑问: 很多人会问什么不删除/etc/grub.conf, 经过本人推测/boot/grub/grub.conf做软连接到/ect/grub.conf, 所以说删除/etc/grub.conf后系统会到/boot/grub目录下找grub.conf文件;
[root@Centos1 ~]# init 6 #重启操作系统
2. 开机后, 无法进入系统, 会提示grub>字样;
3. 设置grub的根设备为linux内核所在分区, 因为我的/boot分区安装在第一块的第一个分区, 所以设置为(hd0,0), 注意这里不分IDC硬盘和SCSI硬盘;
假设你不知道包含内核文件等引导文件的/boot分区所在位置, 可以通过尝试进行, 先输入“root (hd0,”然后按tab键, 其中后面写的0X83都是分区都有可能是/root分区, (0X82的swap分区, 那就不用试了)
grub> root (hd0,1)
4. 补全内核文件之后, 还需要在后面设置内核加载权限为只读ro, 并通过"root="指定根分区设置文件的位置;
grub> kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2
5. 加载内核镜像文件
grub> initrd /initramfs-2.6.32-358.el6.x86_64.img #可以按tab键补全
6. 引导系统
grub> boot
解释: 上图选择的分区不对, 关闭电源继续. 重复以上操作.
grub> root (hd0,1)
grub> kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root #因为我的是LVM卷。
grub> initrd /initramfs-2.6.32-358.el6.x86_64.img #可以按tab键补全
grub> boot
7. 编写grub.conf文件, 不然下次还会进入到grub>模式;
[root@Centos1 ~]# vim /boot/grub/grub.conf #编辑grub.conf配置文件
[root@Centos1 ~]# cat /boot/grub/grub.cof
default=0 #默认启动第一个引导
timeout=5 #在菜单到启动系统停留时间,5秒。
title kernel-2.6.32 #启动项目名称
root (hd0,1) #boot所在位置
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/UUID="51e646df-c73b-4d07-a639-ba010bc02e4d" TYPE="ext4" #内核版本及目标位置
initrd /initramfs-2.6.32-358.el6.x86_64.img #加载内核文件路径
[root@Centos1 ~]# init 6 #重启系统