一、故障问题
MBR损坏是一种非常常见的错误,两种情况:1.MBR文件损坏 2.grub目录被误删除
1.首先,MBR是安装在硬盘的第一个扇区上占用了512个字节,其中前446字节是bootloader用于引导操作系统(中间的64个自己用来指定分区,每个分区为16个字节,所以一个操作系统最多有四个主分区,最后两个字节是标志位,用于表示OK或者not ok),它不在分区上,而是位于分区之外,因为分区是对于操作系统而言的,而MBR是用于引导操作系统的,因此现在模拟MBR损坏只要把磁盘上第一个扇区的钱446个字节破坏掉即可。
###########模拟故障命令#######
# dd if=/dev/zero of=/dev/sda bs=400 count=1
# sync
命令含义:从dev目录下取得任意个字符串,去替换/dev/sda中一定数量的字符,这个数量是根据bs和count来计算的,本条命令为取大小为400字节的块,一共取1个,注意bs单位还可以是M和G。这样就破坏掉了MBR分区,现在重新启动系统,如下(破坏的字节数不同所报的错误也是不同的)。
装有Red Hat Enterprise Linux 操作系统的服务器,系统无法启动,只显示光标,如下图所示:
二、问题修复
1、准备引导挂盘镜像,调整服务器BIOS启动项,使用系统从光驱启动,插入系统光盘,进入救援模式。(挂盘镜像建议和损坏系统版本一致)
2.如图操作:
进入shell后,执行chroot /mnt/sysp_w_picpath命令,挂载到系统目录,查看/boot目录的文件,/boot下面主要是grub和kernel,如果没有需要先安装这两个。
3. 进入系统挂载的目录
# chroot /mnt/sysimage
一般把处于resuce模式的系统称为伪系统,把#chroot/mnt/sysimage后看到的称为真正的系统。
修复内核文件:
# exit ---退回到resecu模式下
# mount /dev/hdc /mnt/source ---挂载光驱cdrom到/mnt/source目录
# rpm -ivh /mnt/source/Server/kernel-2.6.18-164.e15.i686.rpm--root=/mnt/sysimage/ --force
安装完成后可以到/mnt/sysimage/boot目录下查看。
注:需要修复的三个内核文件在系统盘server目录下kernel-2.6.18.rpm软件包里,所以要挂载光盘之后并安装kernel软件包。
此时,内核已修复完成!再继续修复grub程序
# chroot /mnt/sysimage 进入到已损坏的linux系统中
# grub-install /dev/sda 安装grub程序到/dev/sda
# ls /boot/grub 查看grub目录下是否存在grub.conf文件。如果没有就手动编辑一个。
# vim /boot/grub/grub.conf
手动编辑grub.conf文件内容
title CentOS (2.6.18-164.e15.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-164.e15.x86_64 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /boot/initrd-2.6.18-164.e15.x86_64.img
注:一些高版本里为:/boot/initramfs-2.6.32-431.29.2.el6.x86_64.img,以实际系统版本为准。
如果缺少inittab文件先修复inittab
修复/etc/inittab等文件
# rpm -qf /etc/inittab 查询包含inittab文件的软件包
# rpm -qf /etc/rc.d/rc.sysinit 查询包含rc.sysinit文件的软件包
# rpm -qf /etc/rc.d/rc.local 查询包含rc.local文件的软件包
经过rpm –qf查询命令可得知,要修复的文件都包含在initscripts-8.45.rpm这个软件包里面。下一步,要把文件从这个RPM里面分离出来,并还原到/etc目录下.
# exit
# cp /mnt/source/Server/initscripts-8.45.30-2.el5.i386.rpm /mnt/sysimage/tmp
# chroot /mnt/sysimage
# cd tmp/
# ls
# rpm2cpio initscripts-8.45.30-2.el5.i386.rpm |cpio -imd 解压软件包到当前目录
# cd etc/
# ls
# cp inittab /etc/
# cp rc.sysinit /etc/rc.d/
# cp rc.local /etc/rc.d/
重启系统即可。
手动编辑配置文件和交互模式二选一,
grub交互模式,修复MBR文件。
# grub
grub> root (hd0,0)<span style="white-space:pre"> </span>//设定内核的根分区(只能是hd开头的,无论你是scsi或者ide等其他格式硬盘),注意这个不是我们启动操作系统后的根分区(启动后是位于/boot下,但这只是一个单独分区的挂载点而已,它其实比操作系统更早读入内存之中,因为是它来引导硬盘上的驱动和操作系统) hd(0,0) 即表示hd|(device#,partion#)
grub>setup (hd0)<span style="white-space:pre"> </span>//设定MBR安装分区,只要知道硬盘就可以了,不需要指定分区
grub>quit<span style="white-space:pre"> </span>//退出grub分区
# reboot<span style="white-space:pre"> </span>//重启操作系统
参考:
redhat修复模式安装丢失的包及grub引导修复 – 云原生之路
MBR损坏修复(一)_虚拟机mbr损坏_Brad_Chen的博客-CSDN博客
RedHat Linux系统修复—— grub引导、MBR损坏修复过程_51CTO博客_修复硬盘引导mbr