启动故障排错和修复
示例1
环境:centos6.10
故障:删除/sbin/init,删除系统第一个启动进程,导致无法启动
思路:首先要明白init是由软件包安装的,其次此软件包存在于光盘中,可以将软件包中此文件导出
方法如下:
a)开机进入grub菜单,更改内核启动加载一个进程为init=/bin/bash
b)进入bash后,由于是只读文件系统需要重新以读写方式挂载,否则后续拷贝文件会出错:mount -o remount,rw /
c)挂载光盘,目的是为了找到里面的安装init的包:mount /dev/sr0 /mnt/
d)由于init是由upstart包安装的,执行如下操作拷贝其中的init文件
rpm2cpio /mnt/Packages/upstart-0.6.5-17.el6.x86_64.rpm |cpio -idv ./sbin/init
e)将系统进程文件放入根分区的sbin下即可:mv ./sbin/init /sbin/init
重启即可
示例2
环境:centos6.10 故障:删除boot分区和启动加载脚本 思路:由于内核和引导都是在boot分区中,删除了boot分区,系统无法正常启动,无法进入grub,并且grub.conf,启动菜单也没有了。并且没有挂载执行脚本,根和swap都无法自动挂载。必须进入光盘救援模式。重新挂载,找到根分区,并安装内核,生成grub并制作启动菜单grub.conf.
方法如下: A:挂载根分区 a)查看分区表信息:fdisk -l (可以看到各分区的容量) b)除了swap分区外,尝试挂载(通常根分区比boot分区大) mount /dev/sda2 /mnt/sysimage c) 尝试切根:chroot /mnt/sysimage ;ls 可以查看根下目录 d)重新制作fstab开机挂载文件如下: vi /mnt/sysimage/etc/fstab /dev/sda1 /boot defaults 0 0 /dev/sda2 / defaults 0 0 /dev/sda3 swap swap 0 0 e)重启即可看到各个分区的挂载情况,但是boot的内核和启动菜单并没有生成,所以无法正常启动。
B:生成内核和启动菜单
a)进入光盘救援模式
b)切根:chroot /mnt/sysimage
c)挂载光盘:mount /dev/sr0 /mnt
d)安装内核:yum reinstall -y kernel (由于是删除了内核并不是卸载所以要使用reinstall)
e)修复grub:grub-install /dev/sda (过程可能有点慢)
f)生成启动菜单grub.conf:
vim /boo/grub/grub.conf
default=0
timeout=3
title centos6.10 linux
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 root=/dev/sda2 rhgb quiet
initrd /initramfs-2.6.32-754.el6.x86_64.img
vmlinz和initramfs可以从命令行读入,方法是vim的匹配模式
:r!ls /boot/vmlinuz********(initramfs**********)
C:重启即可:reboot