18-系统启动故障修复-实践

说明:重启时可以选择性在vmlinuz所在行末尾添加 selinux=0;或者直接编辑/etc/selinus/config文件,更改 SELINUX=disabled 关闭SELINUX。可以避免打标签,节省启动时间

以下操作都需要进入bootloader引导加载项修改内核启动参数,在vmlinuz所在行末尾添加一个启动选项
如何进入bootloader引导加载项?
对于CentOS6:

POST加点自检后由MBR找到bootloader开始引导Grub之前的画面:
18-系统启动故障修复-实践

此时按任意键进入启动菜单:

按e键编辑:
18-系统启动故障修复-实践

按下箭头键选择vmlinuz所在行,再按e键进入编辑:
18-系统启动故障修复-实践
TAB键可补全,Esc键取消修改,Enter键接受修改并继续启动。
对于CentOS7:

按任意键进入启动菜单:
18-系统启动故障修复-实践

按e键编辑:
18-系统启动故障修复-实践

按下箭头键向下翻到vmlinuz所在行:
18-系统启动故障修复-实践

Ctrl+x键接受修改并继续启动,Ctrl+c启动命令行,Esc键取消修改并返回上级菜单,TAB键列出可用的补全列表。
忘记root密码
CentOS6:添加1或S或s或single,以单用户模式启动
CentOS7:
由于在/etc/inittab里设置了runlevel为6导致系统无限重启
CentOS6:
添加 3,以多用户模式启动,编辑/etc/inittab文件
CentOS7:
添加 rd.break,中断启动进入initramfs
默认挂载在/sys/目录下,编辑/etc/inittab文件
由于在crontab任务里设置了@reboot(注意:任何用户都有reboot执行权限)导致系统无限重启
CentOS7:
添加 rd.break,中断启动进入initramfs
默认挂载在/sys/目录下,编辑定义该任务的crontab文件
vim /sys/var/spool/cron/

以下修复操作都在光盘救援模式下执行,另外救援模式会尝试自动挂载分区,如果出现没有挂载的情况,首先需要挂载分区,对于MBR和bootloader的恢复而言主要是/和/boot,才能执行恢复操作。
破坏stage1,由于MBR前446字节数据损坏无法引导启动(dd id=/dev/zero of=/dev/sda bs=1 count=446) :grub-install
hexdump -C /dev/sda -n 512
chroot /mnt/sysimage
grub-install /dev/sda
hexdump -C /dev/sda -v -n 512
如果不切根,可以这样执行:
grub-install –root-directory=/mnt/sysimage/ /dev/sda

但是这里有个BUG:
18-系统启动故障修复-实践

该BUG从2008年就存在了: https://bugzilla.redhat.com/show_bug.cgi?id=429785
解决方法就是创建一个软链接:ln -s /usr/sbin/grub /sbin/grub
再执行:grub-install –root-directory=/mnt/sysimage /dev/sda

破坏stage1.5,/boot/grub/*1_5 (dd id=/dev/zero of=/dev/sda bs=1 count=14000 seek=512,意即搜寻目标位置从512bytes字节后开始操作)
注意:该dd破坏必需在手动执行过grub-install后才有效,因为只有手动执行过grub-install /dev/sda,grub的stage1.5的数据出现于MBR所在的512bytes之后的27个扇区内(513-14000bytes区间,总共13.5Kbytes)

hexdump -C /dev/sda -n 14000     #十六进制查看磁盘前14000字节的数据(注意到512bytes后的数据都已被dd命令成功清空,置为零)
18-系统启动故障修复-实践

方法1:
chroot /mnt/sysimage
grub-install /dev/sda
方法2:
df -h
grub
grub> root (hd0,0)     #假如/boot分区位于第一块硬盘的第一个分区

grub> setup (hd0)     #需要/boot/grub/*1_5备用文件
18-系统启动故障修复-实践

如果/boot/grub/*1_5备用文件不存在,这种方法不会修复成功:(对比上图,下图中提示e2fs_stage1_5文件不存在,如果用命令 “hexdump -C /dev/sda -n 14000” 查看,512字节后数据依然为零,说明并未将属于stage1.5的27个扇区的数据嵌入磁盘(hd0))
18-系统启动故障修复-实践


破坏stage2,由于/boot/grub/grub.conf内容有误无法引导启动
df -h
fdisk -l
chroot /mnt/sysimage
# grub2-mkconfig -o /boot/grub/grub.conf     #CentOS7可直接执行该命令重新生成grub配置文件
#手动执行grub命令启动
root (hd0,0)
kernel /vmlinuz<TAB键补全>  root=/dev/sda2
initrd /initramfs<TAB键补全>
boot
#进系统后再编辑/boot/grub/grub.conf配置文件即可

kernel行若未指明root=/dev/</partition> 会报错如下:
18-系统启动故障修复-实践


删除初始化内存盘文件导致无法进入系统(rm -f /boot/initramfs-*.img ):mkinitrd制作initramfs
18-系统启动故障修复-实践

chroot /mnt/sysimage
mkinitrd /boot/initramfs-`uname-r`.img `uname -r`

删除内核文件导致无法进入系统 (rm -f /boot/vmlinuz-* ):从光盘的kernel包解压出vmlinuz文件
18-系统启动故障修复-实践

mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
cp /mnt/cdrom/Packages/kernel-*.rpm  /mnt/sysimage/root/
cd /mnt/sysimage/root/
rpm2cpio kernel-*.rpm | cpio -idv  ./boot/vmlinuz-2.6.32-642.el6.x86_64
或者:
cp /mnt/cdrom/isolinux/vmlinuz  /mnt/sysimage/boot/vmlinuz-`uname -r`

删除/boot/grub(rm -rf /boot/grub/)

chroot /mnt/sysimage/

grub-install /dev/sda
18-系统启动故障修复-实践

cd  /mnt/sysimage/boot/grub/
vim grub.conf
default=0
timeout=3
tile centos
root (hd0,0)
:r!ls /boot/vmlinuz /boot/initramfs.img

删除/boot(rm -rf /boot)
18-系统启动故障修复-实践

方法1:
chroot /mnt/sysimage
df -h
mount /dev/cdrom /mnt
#重新强制安装内核
rpm -ivh /mnt/Packages/kernel-* –force|–replacepkgs
grub-install /dev/sda
vim /boot/grub/grub.conf     #手写grub.conf
default=0
timeout=3
title centos6
root (hd0,0)
kernel /vmlinuz root=/dev/sda2
initrd /initramfs-.img
方法2:
chroot /mnt/sysimage
df -h
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz
mkinitrd /boot/initramfs.img `uname -r`
grub-install /dev/sda
vim /boot/grub/grub.conf     #手写grub.conf
default=0
timeout=3
title centos
root (hd0,0)
kernel /vmlinuz root=/dev/sda2
initrd /initramfs.img

由于在/etc/fstab里设置了某个必需自检的设备损坏导致无法进入系统
vim /mnt/sysimage/etc/fstab    #将该损坏的设备的自检对应值设为0

删除/etc/fstab,普通分区(rm -rf /etc/fstab)
18-系统启动故障修复-实践

#恢复/etc/fstab文件
fdisk -l     #根据分区大小,猜测分区
blkid
mkdir /mnt/tmp
mout /dev/sda2 /mnt/tmp     #尝试挂载各个分区
ls /mnt/tmp     #通过内容猜测分区原来的挂载点
vi /mnt/root/etc/fsatb
/dev/sda1 /boot     ext4 defaults 0 0
/dev/sda2 /     ext4 defaults 0 0 
/dev/sda3 /home    ext4 defaults 0 0
/dev/sda4 swap 
#按猜测到的状态挂载分区
mkdir /mnt/root
mount /dev/sda2 /mnt/root
mount /dev/sda1 /mnt/root/boot

删除/boot/和/etc/fstab,普通分区(rm -rf /boot/ /etc/fstab)
#先恢复/etc/fstab文件
fdisk -l     #根据分区大小,猜测分区
blkid     #
mkdir /mnt/tmp
mout /dev/sda2 /mnt/tmp     #尝试挂载各个分区
ls /mnt/tmp     #通过内容猜测分区原来的挂载点
vi /mnt/root/etc/fsatb
/dev/sda1 /boot     ext4 defaults 0 0
/dev/sda2 /     ext4 defaults 0 0 
/dev/sda3 /home    ext4 defaults 0 0
/dev/sda4 swap 
#按猜测到的状态挂载分区
mkdir /mnt/root
mount /dev/sda2 /mnt/root
mount /dev/sda1 /mnt/root/boot
#再恢复/boot
#启动后查看
fdisk -l
mount
df -h

删除/boot/和/etc/fstab,逻辑卷LVM(rm -rf /boot/ /etc/fstab)
#恢复/etc/fstab
lvs     #查看lv信息:vg和lv名字
vgchange -ay     #激活所有卷组
ls /mnt/sysimage
vim /mnt/sysimage/etc/fstab
/dev/vg0/root     /     ext4 defalults 0 0 
/dev/vg0/var     /var/     ext4 defaults 0 0
/dev/vg0/usr     /usr     ext4 defaults 0 0
/dev/sda1     /boot     ext4 defaults 0 0
/dev/vg0/swap swap swap defaults 0 0
#挂载分区
mkdir /mnt/root
mount /dev/vg0/root /mnt/root
mount /dev/sda1 /mnt/root/boot
mount /dev/vg0/var /mnt/root/var
mount /dev/vg0/usr /mnt/root/usr
#恢复/boot
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz
mkinitrd /mnt/root/boot/initramfs.img `uname -r`
vim /boot/grub/grub.conf     #手写grub.conf
default=0
timeout=3
title centos
root (hd0,0)
kernel /vmlinuz root=/dev/sda2
initrd /initramfs.img
删除/sbin/init(rm -rf /sbin/init)
在vmlinuz所在行末尾添加 init=/bin/bash
从另外一个系统拷贝/sbin/init文件过来

原创文章,作者:Leion,如若转载,请注明出处:http://www.178linux.com/72341

(0)
LeionLeion
上一篇 2017-04-02 20:29
下一篇 2017-04-02 21:10

相关推荐

  • Mysql备份II

    Mysql备份II V.II.I单台或共用机器,数据量和访问量小50G< 1 Mysqldump(全导出,导库,导表) 锁表 如果这时有些入会锁住或者超时 2 至少停止写入 防止innodb配置还没刷到磁盘里 先flash tables /usr/local/mysql/bin/mysqladmin -S /tmp/mysql.so…

    Linux干货 2016-06-09
  • linux发展简史

    前言 为什么要写这么一篇文章呢?我发现我虽然知道linux的一些知识,却不知道linux方面的历史,所以今天写一篇关于linux方面历史的文章,用来总结这段时间自己所学习到的关于linux的历史与linux的知识。关于说起linux的历史,就不得不介绍计算机的历史,与其他相关操作系统的一些历史,所以本文中的会简单介绍Linux与其他操作系统的关系。主要讲li…

    Linux干货 2017-02-16
  • N25 – Week 4 blog

    第四周博客作业了,感觉前面的有好多都忘掉了,但是没有时间补以前的啊……好郁闷,幸好今天周五,明天又是圣诞节,从马云爸爸买了一颗圣诞树,今晚回家装上 1. 复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 [root@dhcp-10-129-6-166&nb…

    Linux干货 2016-12-20
  • 编译内核制作小型的linux

    1.  前言       今天我将会给大家带来如何定制一个属于自己linux系统,也就是编译内核,那为什么要编译内核呢? 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统管理,决定着系统的性能和稳定性。Linux作为一个自由软件,在广 大爱好者的支持下,内核版本不…

    Linux干货 2016-08-03
  • MBR详解

    前言:     话说,现在买电脑如果预装win8以上的系统,基本上都是GPT。想当年博主买的电脑预装的win8磁盘分区样式就是GPT,而且貌似如果想把win8换win7就得把GPT改成MPR。虽然会在最后提到GPT,不过本文还是主要讲解MBR,并通过实验验证。 机械硬盘: 主引导记录(Master Boot Record,缩写:MBR),…

    Linux干货 2016-11-14
  • 逻辑卷管理(LVM)

    逻辑卷管理(LVM) LVM概念 是系统上对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。 安装Linux系统时,最常见的问题是如何评估各分区大小,以分配合适的硬盘空间。随着LVM的出现,这些问题都引刃而解了,用户在无需停机的情况下方便地情况下方便的调整个分区的大小。 LVM重点在于可以弹性的调整文件系统的容量…

    Linux干货 2016-11-22