当前位置: > CentOS > CentOS故障 >

CentOS开机异常修复汇总

时间:2018-02-02 13:32来源:linux.it.net.cn 作者:IT
  1. 破解root 口令,并为grub 设置保护功能
开机enter 按a->1或s或S或single进入单用户模式,修改密码
  1. 破坏本机grub stage1 ,而后在救援模式下修复之
==注意grub.conf文件会丢失,要提前备份==

#备份mbr
dd if=/dev/sda of=/root/mbr bs=1 count=466

进入单用户模式
chroot /mnt/sysimage
grub-install /dev/sda 从“/dev/sda”中找到GRUB程序并进行修复
  1. 删除vmlinuz 和initramfs 文件后无法启动, 两种方法恢复之
#initramfs文件
chroot /mnt/sysimage
df#可以看到原系统的磁盘设备
cd /boot
ls
#是initframs内核文件丢失导致,解决方案:
#修复initramfs文件
mkinitrd ./initramfs-`uname -r`.img `uname -r`
#如果是CenOS5 则执行
mkinitrd ./initrd-`uname -r`.img `uname -r`

若修复失败可重装内核
#查看当前系统使用的内核
uname -r
从光盘安装内核(注意要先切换根)
lsblk 可以看到光盘设备是sr0
挂载光盘
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
df
rpm -ivh kernel-2.6.e64.......rpm --force

启动后出现grub,则需要修复grub
chroot /mnt/sysimage
grub-install /dev/sda
exit
exit
reboot

#vmlinuz文件
光盘里面/images/preboot/vmlinuz和/isolinux/vmlinuz即为内核文件,可以直接cp过来
# vmlinuz的文件名可参考/boot/grub/grub.conf中的配置,亦可直接改配置中的文件名,两者保持一致即可
cp -av /mnt/cdeom/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
  1. /etc/inittab 设置默认6 恢复之
开机回车,a->1|s|signal进入单用户模式
或者
开机回车,a->3
然后将/etc/inittab改回来
  1. 某个服务无法启动,系统无法启动,解决之
cd /etc/init.d/
vim testsrv
输入以下内容
#!/bin/bash
#chkconfig:2345 99 00
#description:this service is used for test
case $1 in
start)
    echo 'the service is started'
    touch /root/testsrv
    ;;  
stop)
    echo 'the service is stopped'
    rm -f /boot/testsrv
    ;;  
status)
    [ -f /boot/testsrv ] && echo 'service testsrv is running...'||echo 'service testrv is stopped'
    ;;  
*)
    echo 'Usage start|stop|status'

注意#chkconfig:2345 99 00这里开机启动的序号不能大于99
#给执行权限
chmod +x testsrv 
chkconfig --add testsrv
chkconfig testsrv --level 1 on
修改启动时间
reboot
#!/bin/bash
#chkconfig:12345 00 00
#description:this service is used for test
case $1 in
start)
    echo 'the service is started'
    sleep 100000
    touch /root/testsrv
    ;;  

由于启动序号设置太小,网络服务还没起来,无法连接xshell,而单用户模式也设置了开机启动,所以需要按照如下方法修复
开机按回车进入内核选则项
按a 在quite后添加 init=/bin/bash(默认为/sbin/init)
此时开机进入bash以后根目录是以只读方式挂载的,需要重新挂载
mount -o remount,rw /
chkconfig --level  12345 testsrv off
exit 
reboot
  1. 破坏stage1.5

==grub命令依赖于grub目录里面的文件==

grub
grub> root (hd#,#)
grub> setup (hd#)
(hd#,#)
hd#:  磁盘编号,用数字表示;从0 开始编号
#:  分区编号,用数字表示;  从0 开始编号
(hd0,0) 
#备份分区表
dd if=/dev/sda of=/root/mbr count=446 bs=1 conv=notrunc
# 备份grub.conf
cp -av /boot/grub/grub.conf /root/
# 破坏mbr
dd if=/dev/zero of=/dev/sda bs=1 count=446 conv=notrunc

启动时会出现operating System not found的提示,说明没有mbr来引导操作系统
reboot

chroot /mnt/sysimage
df 查看boot和/是否挂载
grub
root (hd0,0) # (hd0,0)表示第一块硬盘的第一个分区,也就是sda的sda1
setup (hd0)


1.5阶段前512字节记录的是后面27个扇区具体要读取的内容,如果将后面的内容破坏掉,系统仍无法正常启动
#备份
 dd if=/dev/sda of=/root/mbr2 bs=1 count=2048 skip=512
#破坏
dd if=/dev/zero of=/dev/sda bs=1 count=2048 seek=512 conv=notrun
c
reboot
此时开机界面不会出现倒计时
进入救援模式
用grub或grub-install修复
chroot /mnt/sysimage
grub-install /dev/sda
sync
exit
exit
reboot

  1. 破坏stage2

#备份/boot/grub/grub.conf
#清空/boot/grub目录
rm -rf /boot/grub
reboot
# 进入救援模式
df 确保/boot已挂载
chroot /mnt/sysimage
df
grub-install /dev/sda
sync
exit
exit
reboot
此时由于没有/boot/grub/grub.conf文件,开机会进入grub命令行
输入ker(tab补全)  /v(tab)补全 root=/dev/vg0/root selinux=0 回车
ini(tab补全) /initra(tab补全)   回车
boot
(也可以在救援模式下手写grub文件)

8.为grub加口令

#生成md5口令
grub-md5-crypt
#grub-crypt (sha512)
[root@lee: /root]# grub-crypt
Password: 
Retype password: 
$6$IwfTNtZWfvNHA2ec$RWiVdrt78Tbbw2fsvAA/icQWCfIgy3KGkoFJHRntceUBwK.Vnn9Mhmz1JfRt/yWdtEbbMaWeWFSTiYUuxTiPn.

添加至配置文件
default=0
timeout=5
#sha512的加密方式需要指定--encrypted
password --encrypted $6$IwfTNtZWfvNHA2ec$RWiVdrt78Tbbw2fsvAA/icQWCfIgy3KGkoFJHRntceUBwK.Vnn9Mhmz1JfRt/yWdtEbbMaWeWFSTiYUuxTiPn.
  splashimage=(hd0,0)/grub/splash.xpm.gz
  hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
      root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_lee-lv_root rd_LVM_    LV=vg_lee/lv_root rd_NO_LUKS rd_LVM_LV=vg_lee/lv_swap rd_NO_MD crashkernel=128M LANG    =zh_CN.UTF-8  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
# 也可直接用明文
password $1$fYmOJ/$0n6c5b/WPxt0nDOJPsrJq0



  1. 删除/boot/ 所有内容,然后恢复
1)/boot/vmlinuz
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-`uname -r`
2)/boot/initramfs.img
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
rpm -ivh /mnt/cdrom/Packages/kernel.XXX.rpm 
3)grub/*
grub-install /dev/sda
4)grub/grub.conf
default=0
timeout=3
title 23M
kernel /vmlinuz-XXXX root=/dev/sda2
initrd /initramfs-XXXX.img
  1. 在普通分区,删除/boot/ 所有内容及/etc/fstab,恢复
1)救援模式,先/etc/fastab恢复
df
blkid 
mount /dev/sda1 /mnt/sda1
mount /dev/sda2 /mnt/sda2
mount /dev/sda3 /mnt/sda3
vim /etc/fstab
2)reboot,重新进入救援模式
df 确保挂载成功
3)修复grub
grub-install /dev/sda
4)修复kernel initramfs.img
mount /dev/sr0 /mnt/
rpm -ivh /mnt/Packages/kernel-XXX.rpm --force
5)vim /boot/grub/grub.conf
  1. 使用逻辑卷,删除/boot/ 所有内容及/etc/fstab,恢复
1)救援模式,先/etc/fastab恢复
lsblk(失效)
df
blkid 
fdisk -l
sda1带*为boot分区
mkdir /mnt/{sda1,sda2}
mount /dev/sda1 /mnt/sda1
mount /dev/mapper/vg_lee-lv_root      /mnt/sda2
lvdisplay (可以看到NOT available)
vgchange -ay 激活卷组
lvdisplay 

vim /mnt/sda2/fstab(r!blkid)
2)reboot,重新进入救援模式
df 确保挂载成功
3)修复grub
grub-install /dev/sda
4)修复kernel initramfs.img
mount /dev/sr0 /mnt/
rpm -ivh /mnt/Packages/kernel-XXX.rpm --force
5)vim /boot/grub/grub.conf  

default=0                         timeout=5
title=CentOs6.8
kernel /vmlinuz-2.6.32-642.el6.x86_6 root=/dev/mapper/vg_lee-lv_root selinux=0
initrd /initramfs-2.6.32-642.el6.x86_64.img


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容