1.密码忘了

解决思路和方式:如果能用1模式破解直接破解,不能1破解直接光盘模式进入系统删除shadow文件中root密码即可。

2.fstab 出现挂载错误

查看挂载博客中的详细解释,这里不再赘述。

3.grub.conf中 initrd 和 kernel 项前后顺序写反了:

错误提示:

就是英文表示他俩顺序反了

解决思路:

调换顺序即可

解决步骤:

简单点:可以不用挂壁光盘模式,直接esc键进入选择菜单模式,然后按e编辑,用d删除initrd这一行并用o键删重新添加这一行,以实现调换顺序的目的,然后启动。(或者也可以在这里按c键进入命令行模式,然后直接输入kernel,root,initrd进入系统)

  • 注意启动之后进入系统仍需要修改/boot/grub/grub.conf文件为正确才行,上面的操作是在内存中的临时性修改,下次启动如若不修改文件正确还是会这样。
    因此还是直接进入光盘模式把文件修改正确一步到位更加方便!

4.启动盘MBR分区表64字节分区信息错误

错误显示:

硬盘直接无法挂载,没有分区格式,启动时启动一半便卡住

解决思路:

只能靠之前备份过的分区表来恢复此64字节的数据了
可以全部备份512字节,也可以只备份447到510字节的数据(注意地址比字节数少1,因为从0地址开始的)
建议两个都备份,如果只是分区坏了则还原的时候只修复分区信息即可。

解决步骤:

  1. 进入光盘救援,注意要跳过硬盘的检测(因为无法挂载)
  2. lsblk或者f(g)disk -l /dev/sda等查看硬盘
  3. 从网络或者其他设备scp备份过的分区64位字节数据
  4. 还原数据dd if=$backupDisk of=$Disk bs=1 count=64 seek=446
  5. 重启即可
  • 注意光盘救援模式从网络拷贝文件的时候,可临时配一个IP地址,这样才能连通内网网络,实现的话可用命令
    ifconfig ens33 IP地址/端口
    例如 ifconfig ens33 192.168.0.1/23
    或者ip a a 192.168.0.2/24 dev eth0

5.启动盘的前MBR 分区表446字节错误

  • 注意:此错误和后面的错误情况的显示情况类似,如果不知道详细错误原因,因此用了grub-install命令之后,要按照后面的解决步骤来解决问题,只有知道仅仅是446字节错误的情况下才可按照下面的步骤较少的方法操作。

错误提示:

正如分析所示,如果有光盘挂载的话则直接进入光盘模式(因为启动盘的grubstage1错误)

解决思路:

光盘救援模式重新恢复grub1即可
注意在这里只是无法启动,分区表仍然存在,则硬盘的分区能够直接挂载(光盘启动就能检测到并挂载,文件系统也没有被破坏)。

结局步骤:

  1. 进入光盘救援模式
  2. 输入grub(无需切根) 在交互式模式下进行恢复(仅支持/boot下grub文件夹中的备份文件没有丢失,否则要用grub-install)
  3. 选择依靠恢复文件的boot文件夹的目录 grub > root (hd0,0) , 选择安装446字节MBR位置 grub > setup(hd0) . 退出quit (注意小括号前面有个空格)
  4. sync命令强制写入磁盘
  5. 安装完成后reboot.

image

5.2更方便并且更可靠的方式则是利用install安装修复grub,无需依赖grub文件夹中备份文件

  1. 进入光盘救援模式
  2. 切换根
  3. 执行命令grub-install /dev/sda 等待
  4. 成功之后重启即可
  • 注意以上是在stage2中没错误的情况下的命令,因为install也不能修复grub.conf文件,仍需手写它。

5.3有一种特殊情况:

就是计算机启动状态下运行了grub-install命令,然后把boot/grub文件夹下的grub.conf留下,其他的文件删除。在这种情况下表面上没错,但是却无法启动。会显示error 15错误,在这种情况下也只能按照上面的方式重新修复一次

6.MBR 分区表512全部错误

解决思路:

先恢复分区表66位,再按上面方法恢复446字节grubstage1即可。

7./boot下grub文件夹丢失

错误显示:

error 15 (或者是进入了grub>的交互式界面,表明grub stagr2已经加载但是缺失了grub.conf文件)

解决思路:

恢复grub文件目录以及下面的grub.conf文件

操作步骤:

如果开机后是直接进入了grub>界面,(或者可开机后按任意键,然后按c键进入命令行)则可以直接补入grub.conf中kernel root initrd 的内容 (此方法为临时启动,启动后仍需要恢复文件,见下图)

image

如果error 15则:

  1. 光盘救援模式
  2. (不确定原因可以先按照上一个错误解决的第二个方法用,grub-install /dev/sda,然后再从这一步开始执行,如果知道是grub文件夹丢失原因造成的问题,则)手动创建grub目录和grub.conf文件,注意位置要在mnt原来的系统根boot目录下。
  3. 书写格式参考下面,只需要写重要的四行即可(可用nano命令):
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password=
title CentOS 6 (2.6.32-754.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=d5db5e08-dc6d-4b6e-84fc-7e490e44ba0c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-754.el6.x86_64.img
  1. sync,然后重启即可。

注意点:

  1. 那个是e(小写字母l)6,而不是e 16!
  2. 在开机界面修改的都是无法保存的,开机后一定要再次修改文件才可。
    6.10标准可这样写:
default=0
timeout=5
hiddenmenu :前三项要写在title的前面,写进去会出错
title Centos 6
        root (hd0,0)
        kernel /vmlinuz-2.6.32-754.el6.x86_64  ro  root=/dev/sda2
        initrd /initramfs-2.6.32-754.el6.x86_64.img

8.MBR 446字节(或者512字节)以及gurb文件夹全部丢失错误

错误提示:

因为开机找不到启动设备,则开机后它会按照顺序寻找启动设备。如若有光盘挂载则直接进入光盘中。

解决思路:

(如若512字节,则先恢复备份过的分区表)可以用grub-install命令直接恢复stage1(MBR446字节) stage1.5(第一个扇区之后的装有若干个文件系统驱动文件的扇区)以及stage2(除了grub.conf文件之外)的文件,然后手动写好grub.conf文件。

解决步骤(假设分区表已经恢复,硬盘可以挂载了):

  1. 进入光盘救援模式
  2. 切换根chroot /mnt/sysimage
  3. grub-install /dev/sda (如若boot不在root下,指明boot所在的上一级目录)
  4. 进入/boot/grub文件夹中,手动修改grub.conf文件(可按照上面的格式来写)
    • 小技巧:可以在vim中用r!ls /boot/vmlinuz-VERSION /boot/initramfs-VERSION.img 的方式读入内核和initrd文件名,以及root=UUID 可用r! blkid /dev/sda2命令读入,以免不知名称如何手写。
  5. reboot

9.MBR 446 (或512)字节崩坏,boot整个目录丢失

错误提示:

同上,但如果仅仅是boot丢失,则会类似grub文件夹丢失显示error 15

解决思路

(先恢复分区表),进入光盘恢复模式后要先恢复boot目录中的必要文件,然后安装grub。其中1.内核文件(从光盘中直接拷贝或者重新安装内核包)2.虚拟文件系统创建(mkinitrd --help)3.grub文件夹(主要是grub.conf要在install之后手动书写)

解决步骤:

  1. 进入光盘救援模式
  2. 切换根chroot /mnt/sysimage
  3. 进入boot文件夹(/dev/sda1),拷贝光盘中的内核文件vmlinuz,然后根据此内核文件制作initramfs.img文件,此时可以不再写版本了(不过注意grub.conf中也要相对应不写版本号了)
    • 不写版本号制作initrd:mkinitrd /boot/initramfs.img `uname -r`
      3.2 也可以直接rpm -ivh 光盘挂载点/Packages/kernel-VERSION.rpm --force --nodeps 安装内核文件包
  4. grub-install /dev/sda修复1阶段和1.5,部分2阶段
  5. 进入grub文件夹,修改grub.conf文件
    • 小技巧同上,不过这里要写上面安装或者复制后的内核和虚拟文件系统的文件名(如果上面没写版本,则这里也无需再写,)
    • root=UUID=XXX 也可这样写,注意UUID后面的不加引号,用blkid命令读入UUID
  6. reboot即可

10.内核img文件错误或者丢失

错误显示:

unable to mount root fs on unkonwn- block(0,0)

解决思路:

重新生成img文件或者从备份中(完全一样的安装机器中相同的img文件或者说之前对/boot文件夹有过备份)恢复它

解决步骤

  1. 进入光盘救援模式
  2. 切换根目录到原系统根目录下chroot /mnt/sysimage (需要提前用lsblk查看在哪)
  3. 利用mkinitrd /boot/initramfs-$(uname -r).img $(uname-r) 命令重新生成initramfs文件;如果原img文件存在但是错误需要再加上--force。,如果丢失则不需要加上它。
    • 或反向单引号也行mkinitrd /boot/initramfs-`uname -r`.img `uname-r` :注意第二个参数是内核版本号
  4. 此时修复完毕重启即可

错误提示状态Centos6:

image

错误提示状态Centos7:

image

11.内核执行文件错误或者丢失

错误显示:

file kernel-Version not found

image

解决思路:

从光盘中或者相同版本机器中拷贝一份到原目录下即可(注意光盘中拷贝时需要更改名称,因为它不含有版本信息)

解决步骤:

  1. 进入光盘救援模式
  2. 找到光盘挂载的位置(/dev/sr0)和原本根挂载的位置
  3. cp 光盘挂载位置/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
  4. 重启

12.开机启动状态故障(inittab中设置错误不断重启或者关闭)

错误显示:

要么不断重启(6) ,要么开机就关机(0)

解决思路:

将/etc/inittab文件改正确(可以不用光盘救援模式,因为这个问题很简单)

解决步骤

Centos6:

  1. 开机运行至图标画面按esc按键,进入选择栏
  2. 然后按a按键,输入此次开机临时进入的模式(就是/etc/inittab下的6种模式),这里选择1或者2,3都可以
  3. 进入之后修改文件正确即可
    Centos7:
  4. 开机进入选择栏画面
  5. 按e按键进入grub.cfg的编辑界面
  6. 在linux16后面添加systemd.unit=multi-user.target,然后按ctrl+x按键 即可让这一次启动进入
  7. 进入系统之后仍要修改默认启动模式为正确的,用systemctl set-default graphical.target。

13.开机启动服务(service,在/etc/init.d中的)加载故障卡住

错误显示:

starting 服务名 (就卡在这种状态下,这一行前面可能有许多staring 服务名 [OK])

解决思路:

跳过此服务启动,本次启动不启动此服务。等进入系统之后查找此服务错误原因,修正后再开机启动它

解决方法:

  1. 卡主之后重启电脑(可按ctrl+alt+delete,如果这个被禁用了则想其他方法),然后进入开机启动画面按esc按键
  2. 进入之后按a,然后输入1,单用户启动。(利用单用户启动基本上不会启动任何守护进程的特性来跳过卡住的服务的启动过程)
  3. 利用chkconfig --list 服务名 命令来查看卡住的服务的错误原因并修复。如果短时间内无法修复,则先利用chkconfig 服务名 off 命令先关掉此服务开机启动,然后正常启动计算机
  4. 正常启动后再慢慢寻找原因修复服务,先保证计算机能启动并且提供其他的正常业务进行。

14.终极破坏(分区和LVM逻辑卷混用环境下):fstab丢失;(MBR 512字节破坏,主要是分区表破坏);boot目录丢失

错误显示:

如若先不考虑512字节损坏问题,则开机后找不到grubstage2,有可能直接进入gurb命令行模式(grub >) ,或者显示error 15错误
如若考虑512字节错误,则直接无法引导,同上。

解决思路和步骤分析:

先不考虑512字节(主要是分区表),它就按照备份恢复的方法来恢复即可。注意分区恢复一定是在任何操作之前的操作,包括下面的操作之前要先恢复备份的分区表。

  1. 后面的解决方案在前面已经提到过,主要是fstab的问题。因为找不到挂载关系,无法挂载各个分区以及各个逻辑卷,就算进入光盘模式也无法修复。因此主要就是想办法修复fstab
  2. 在这里进入光盘模式后主要用fdisk -l ; df ;blkid;lvs;vgs;pvs等等命令查看逻辑卷以及分区信息。因此工作中的逻辑卷在最开始创建的时候就一定要写清楚卷名或者label(比如lv_boot、lv_root、lv_swap、lv_data、lv_home等等,没写好的话工作中最好用lvrename改名),这样才能想办法恢复fstab,不然就就算是神也救不了,不知道逻辑卷到底对应的挂载关系是什么.
    • 这里测试用的查看到信息为的boot分区直接就是本地硬盘第一个分区/dev/sda1 ,而/dev/sda2是物理卷,这个卷组分出了三个逻辑卷分别为home,root和swap
  3. 查看信息知道逻辑卷对应的挂载关系是什么之后,逻辑卷仍然无法使用,因为没有启动rc.sysinit脚本,逻辑卷默认不会激活,会显示NOT available状态(可在lvdisplay中看到)。因此要先激活它们,可以用vgchange -ay来激活LVs

image

4.激活之后就可挂载了,此时创建一个临时文件夹,把lv_root卷挂载到此文件夹上,然后进入etc,手动书写fstab.例如

  • 小技巧2:可以用ls 文件 >> fstab的方式追加重定向文件名到文件中,上面的书写grub也可这样用(因为没有VIM命令,vi总是出问题)
  • 注意挂载的时候要提前查并获知文件格式等。
  • 注意挂载的时候可能提示要指定文件系统,这样的话可用mount -t type.(分区表恢复后重启可以解决这个问题,此时不能跳过检测硬盘,直接continue,才能继续下一步切换根并grub-install)
  • 切换根之后可以用vim命令,注意别把fstab装到光盘启动盘中去了
/dev/sda1             /boot    ext4     defaults 0 0
/dev/VolGroup/lv_root /        ext4     defaults 0 0
/dev/VolGroup/lv_home /home    ext4     defaults 0 0
/dev/VolGroup/lv_swap swap     swap     defaults 0 0
  1. fstab写好之后,重新进入救援模式让它生效并挂载好各个分区信息。然后此时便可以按照前面的解决方案修复grub以及boot文件夹了。
    • 注意书写grub.conf的时候 root=/dev/VolGroup/lv_root ,不是sda2了

15.centos7中的boot文件夹直接删除

错误提示:

直接进入了grub rescue> 命令行,说明进入了grubstage2阶段

解决思路:

类似6中的boot被删除的修复操作即可,就是命令和细节稍有变化

解决步骤:

  1. 进入光盘救援模式
  2. 切根,挂载光盘
  3. 利用rpm -ivh Package/kernel-VERSION --nodeps --force的方式拷贝出来vmlinuz-VERSION和initramfs_VERSION.img文件(当然也可光盘直接拷贝),注意安装的时候需要时间等待。
  4. 然后grub2-install /dev/sda 安装,当然也缺少gurb.cfg文件
  5. 然后利用grub2-mkconfig -o /boot/grub2/grub.cfg 生成它
  6. sync ,reboot即可
grub2中的:
--boot-directory=DIR   install GRUB images under the directory DIR/grub2
                             instead of the boot/grub2 directory

A.注意点:

  1. 没有lsblk命令,可用blkid ,fdisk -l ,df 命令代替( 自己弄一个U盘linux盘来修复也行,题外话了)
  2. 逻辑卷的各种命令来查看逻辑卷信息,lvs lvdisplay vgs vgdisplay pvs pvdisplay
  3. 使用lvrename命令更改逻辑卷名
    lvrename /dev/VolGroup00/LogVol00 /dev/VolGroup00/lv_root
    lvrename /dev/VolGroup00/LogVol01 /dev/VolGroup00/lv_swap

B.由此可看出重要的,需要备份的文件

  1. MBR分区表512字节
  2. /boot整个文件夹(img,vmlinuz,grub文件夹中grub.conf)
  3. /etc整个文件夹(/etc/fstab /etc/inittab等很多配置文件)