CentOS 6常见启动故障及排错

CentOS 6常见启动故障及排错

单用户模式破解root口令

  1. 启动时在此界面按任意键进入启动菜单界面。

mark

  1. GRUB的启动菜单页面,在此界面可以看到内核的启动选项,并提供了交互式接口,有e、a、c 三个选项可以使用,分别代表不同的作用。
  • a:修改内核参数

  • e:编辑启动项

    • d:删除
    • o:打开一个新行
    • e:编辑行内容
    • b:启动
  • c:命令模式,提供交互式接口

键盘敲a键,进入内核参数的编辑界面

mark

  1. 在此界面输入1,而后回车进入单用户模式。

mark

  1. 下图就是单用户的界面,不需要输入密码,直接以root身份登录,可以直接使用passwd命令修改口令,然后使用init命令切换运行级别进行正常登录,看到登录页面后输入修改过的口令就可以直接登录。

mark


进入救援模式的方法

  1. 使用光盘引导启动,光盘的系统版本要和需要修复的系统的版本对应。选中 Rescue installd system 回车进入。

mark

  1. 选择使用的语言,直接回车,使用默认选项就可以。

mark

  1. 选择使用的键盘类型,使用默认值,直接回车。

mark

  1. 根据需求来选择是否设置网络,这里选择NO不进行设置。

mark

  1. 接下来的几个页面是介绍救援模式的,选择ContinueOK跳过即可;

mark

mark

mark

  1. 选择第一项开启一个shell,进入命令行模式进行修复,修复完成后执行exit命令退出后选择第三项进行重启。

mark

mark


GRUB stage 1故障导致的系统无法启动

问题现象

GRUB 1阶段出现故障,导致无法通过硬盘引导启动,默认会尝试通过其它引导方式启动,下图就是尝试通过网络启动,但未能成功引导,报错操作系统没有发现。

破坏stage 1的方法:

#dd if=/dev/zero of=/dev/sda bs=1 count=446
#hexdump -C -n 512 /dev/sda	#可以看到82 20之前的内容已经全部清零
#reboot

mark

mark

解决方法

挂载光盘进入救援模式,通过chroot /mnt/sysimage/命令完成切根操作,通过grub-install命令修复系统所在硬盘stage 1中的内容,通过hexdump命令可以检测修复的结果,使用sync同步磁盘写入,执行两次exit命令退出后重新启动系统。

grub-install命令不仅可以修复stage 1,同时还可以修复 stage 1.5和stage 2,此命令的执行过程中可能会出现一次执行不能修复的情况,重新执行一次便可以了。

mark


GRUB stage 1.5故障导致的系统无法启动

问题现象

GRUB stage 1没有问题,所以系统可以读取硬盘启动,但又到不了stage 2 所以看不到启动菜单,便会出现下图的故障现象,会有一个黑屏界面。

破坏stage 1.5的方法:

# dd if=/dev/zero of=/dev/sda bs=1 count=10240 skip=512 seek=512
# hexdump -C -n 10240 /dev/sda	#可以看到55 aa之后的内容已经全部清零
# reboot

mark

解决方法

挂载光盘进入救援模式,通过chroot /mnt/sysimage/命令完成切根操作,使用grub-install命令或grub命令以交互的方式进行修复,使用sync同步磁盘写入,执行两次exit命令退出后重新启动系统。

使用可交互的grub命令安装1.5阶段,此方法作为grub-install修复方式的补充,这种方式的缺点是依赖于/boot/grub/目录下的1.5阶段备份文件,如果没有备份文件,则此方法不可用。

  • root (hd0,0):根分区在第一个硬盘的第一个分区
  • setup (hd0):表示要把grub装在那块硬盘上。

mark


重装grub之后,/boot/grub/stage2文件被删除的报错

重装grub之后/boot/grub/stage2文件不再只是备份作用,而会变成启动时会被依赖的文件,丢失会影响启动,需要进入救援模式修复后才能正常启动。

删除/boot/grub/stage2文件的报错:

mark


删除/boot/grub/目录导致的系统无法启动

问题现象

GRUB stage 2故障,1和1.5 stage的启动没有问题,启动到2 stage时由于没有grub.conf文件,会无法加载启动菜单和启动项,导致启动中止,会有``grub>_`字样的报错。

执行rm -rf /boot/grub命令后重启服务器,便会出现下图中的报错;

mark

解决方法

修复的命令参考下图,在grub>后输入grub.conf文件中title字段及下面的两行,这个过程可以使用Tab键补全,实例启动后记得恢复丢失的/boot/grub/grub.conf文件,否则下次重启还会无法启动。

mark


删除/boot/目录导致的系统无法启动

问题现象

报错的界面和删除grub.conf文件的报错相同,会有``grub>_`字样的报错。但由于删除的是/boot目录,导致后续启动所依赖到的kernel文件和ramdisk文件也被一并删除,这种情况下,即使参考上面的方法进行修复也是无济于事。

执行rm -rf /boot命令后重启服务器,便会出现下图中的报错;

mark

解决方法

解决这个问题的思路是挂载光盘进入救援模式,切根后重新挂载光盘,复制光盘中的内核文件到boot目录中,再使用mkinitrd命令生成initramfs文件,使用grub-install命令生成/boot/grub目录,临时在grub目录下编辑一个用于引导启动的grub.conf文件,最后使用sync命令向磁盘同步一下数据,exit退出后重启。

具体操作方法参考下面截图:

mark

临时创建/boot/grub/grub.conf文件,格式参考下图:

mark

*补充:*initrd字段的参数比较长,比较容易输入错误,建议参考下图,通过vim的扩展命令模式直接将文件名读取到文件中,输入过程中支持tab键补全,避免因为文件名书写错误导致的修复失败。

mark


删除/sbin/init程序导致的系统无法启动

问题现象

可以看到启动菜单和启动过程,启动会卡在sh-4.1#字样的命令提示符处,无法进行输入,无法启动。

mark

解决方法

强制重启后按任意键进入启动菜单页面,在启动菜单页面按a键更改内核启动参数,将系统默认首个启动进程由/sbin/init改为/bin/bash。成功进入系统后,查询init程序的来源软件包,之后挂载光盘强制重新安装即可修复。这种修复方式可以用于某些特殊文件被破坏时,不需要进入救援模式就可以直接修复。

Note:

  • 使用/bin/bash引导系统启动,进入系统后磁盘会是只读的,需要重新以读写方式挂载一下。
  • 由于之前系统中已经安装过upstart软件包,所以安装时需要使用--force选项进行强制安装。

具体操作步骤请参考以下截图:

mark

mark

mark


删除/etc/fstab文件和/boot目录导致的系统无法启动

问题现象

无法通过GRUB 2 stage的引导,报错与删除/boot目录的报错相同。

mark

解决方法

修复方法和删除/boot分区的修复方法类似,比较麻烦的是进入救援模式后,由于/etc/fstab文件被被删除,导致之前系统中的分区无法被自动识别和挂载,不能直接进行切根修复。

  1. 挂载光盘进入救援模式,使用fdisk -l命令查看当前系统中的所有磁盘和每个磁盘的分区情况,找出每个设备所对应的挂载点,如果不清楚各个设备和挂载点的对应情况,可以将设备临时挂载一下,查看设备中的文件内容,推导出这个设备名之前所对应的挂载点名称。
  2. 清楚了设备和挂载点的对应挂载关系之后,便可以临时挂载根分区,重新创建/etc/fstab文件。挂载根分区时不要直接挂载到/mnt目录下,使用df -h命令可以看到/mnt/runtime目录下挂载的是loop0设备,对应的是光盘,直接向/mnt目录进行挂载会使之前的挂载被覆盖掉,导致救援模式不能正常使用。
  3. 重新创建好/etc/fstab文件后,退出重新进入救援模式,根分区会自动被挂载,通过切根的方式进入根分区。
  4. 挂载光盘通过安装kernel软件包,生成/boot分区下的vmlinuz和initramfs文件,通过grub-install命令生成grub目录,重新创建/boot/grub/grub.conf文件,编辑完成后退出重启主机正常登录。

mark

观察fdisk -l命令的显示结果,在boot字段下有*标记的是boot分区,System字段下有swap字样的是swap分区,剩余的分区如果还有不清楚和挂载点对应关系的,可以通过临时挂载的方式,看下目录中的内容,根据目录中的内容和分区的大小来推导一下。根分区通过挂载是比较好识别的,看下里面的目录结构就清楚了。

mark

mark

mark

mark


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值