第七周博客总结

系统故障排错汇总

实战:以centos67为例,如果误删/boot/initramfs–3.10.0-693.el7.x86_64.img,机器重启如何恢复?机器重启后菜单能出来后续不显示了!!!

答:重启—ESC—CD-ROM-Drive-进入救援模式–chroot /mnt/sysimage(切换到真正的根)–cd /boot/–

mkinitrd /boot/initramfs-`uname -r`.img `uname -r`–sync–exit—exit—选择reboot选项即可修复。

实战:以centos67为例,如果误删/boot/vmlinuz-2.6.32-696.el6.x86_64,重启后如何恢复?

centos67:重启—ESC—CD-ROM-Drive-进入救援模式— chroot /mnt/sysimage(切换到真正的根)–mount -o remount,rw /dev/sr0 /misc—cd /misc/isolinux—

cp vmlinuz /boot/vmlinuz-`uname -r`–sync—sync—sync—exit—exit—选择root选项即可!!!

实战:如何实现自己自定义的服务?

第一步:创建一个服务脚本,放在/etc/init.d/目录下

服务脚本是有一定的格式的,关键内容有几行,分别是

chkconfig:   345 95 5  第一个数字(即345)的意思是加到服务以后,默认是在什么模式下处于on状态的(如果是-,代表所有模式下该服务都是off状态)。第二个数字(95)代表开机时在/etc/rc.N/下会生成一个S95的文件,第三个数字(5)代表关闭该服务的时候,会在/etc/rc.N/下生成一个K5的文件。

第二步:(描述信息,centos5上必须有,centos6可有可无)

description: Runs commands scheduled by the “at” command at the time \

第三步:脚本内容

注意第二行和第三行有冒号:

这样做完以后还没有成为真正的服务,因为在chkconfig –list中并没有testsrv这个服务,需要将该服务添加到服务列表当中(加之前必须确保服务脚本在/etc/init.d的目录下,且有执行权限),即chekconfig –add testsrv

ls /etc/init.d/

 

在服务列表中删除testsrv服务 chkconfig –del testsrv,虽然服务被删掉,但是脚本还在/etc/init.d/目录下,但是在对应的/etc/rcN.d/下对应的S和K文件却没有了。

实战:假设testsrv服务脚本写的有问题,同时设为开机启动,开机时系统卡在那,如何恢复?

重启—按a键—输入空格1—chkconfig testsrv off(将该服务在2、3、4、5模式上设为off状态)—reboot,重启后再慢慢修改testsrv这个脚本。

 

ls /etc/rc{1,2,3,4,5}.d/  里面有一个S99local文件

这个服务的作用是:开机时所有的服务都运行完了才运行S99local,而且开机就会运行,所以我们可以将服务脚本放在S99local里面,开机后会自动运行!!!在centos7上如果想开机自动运行S99local脚本,需要自行加执行权限!!!

实战:如果破坏了MBR的前446个字节,系统重启后没有经过菜单栏而直接切换到救援模式的界面, 如何恢复?

先研究第一阶段,即MBR446个字节,

dd if=/dev/sda of=/data/mbr bs=1 count=512

sz /data/mbr

dd if=/dev/zero of=/dev/sda bs=1 count=446

hexdump -C -n 512 -v /dev/sda

reboot

答:救援模式—dd if=/mnt/sysimage/data/mbr of=/dev/sda bs=1 count=446—

hexdump -C -n512 -v /dev/sda—sync—sync—exit—exit—选择reboot项。

如果没有备份,使用grub命令也可以生成,即grub-install /dev/sda,这个命令的作用效果是将grub1阶段、1.5阶段以及第二阶段都修复,不仅仅只修复1阶段,只要看到菜单就说明已经成功的进入到第二阶段,因为菜单是由第二阶段的配置文件生成的,具体修复过程如下:

救援模式切根(chroot /mnt/sysimage–grub-install /dev/sda—sync—sync—

exit—exit—选择reboot选项。

实战:/boot为独立分区!删除/boot下的所有文件,包括目录,重启如何修复?方法一:

救援模式→chroot /mnt/sysimage→mount /dev/sr0 /mnt →

cp /mnt/isolinux/vmlinuz  /boot→mkinitrd initramfs-`umane -r`.img `uname -r`→grub-install /dev/sda →cd /boot/grub→vim grub.conf

→exit→exit→选择reboot选项

方法二:(安装kernel包,自动生成/boot下的vmlinuz和initramfs文件)

救援模式→mkdir /mnt/cdrom → mount /dev/sr0 /mnt/cdrom→

cd /mnt/sysimage/boot→

rpm -ivh /mnt/cdrom/Package/kernel-版本.rpm –root=/mnt/sysimage –force→chroot /mnt/sysimage→grub-install /dev/sda→cd /boot/grub→vi grub.conf

在vi里可以用:r!ls /boot/vmlinuz tab键补出来!

在命令行输入的是–root= ,在vi grub.conf 里面输入的是root=  !!!

如果/boot不是独立分区,与根在一块,如何恢复?

恢复过程一样,只不过在编制/boot/grub/grub.conf文件时,那两个文件要写成

kernel /boot/vmlinuz    红色的/表示的时boot这个目录所在的分区!!!

initd /boot/initramfs

实战:如果将/etc/fstab文件删除,再将/boot下的所有文件删除,如何恢复?

备注:/etc/fstab文件内存放的是各个分区挂载到哪个文件夹下。

救援模式下的故障状态显示

恢复方法:救援模式→fdisk -l,显示如下,*代表引导的意思

经查有5个分区,建一个文件夹mkdir /mnt/rootfs,将上述分区分别挂载到/mnt/rootfs下,再进入到/mnt/rootfs下,看看到底哪个分区对应的是根分区→

vi /mnt/rootfs/etc/fstab

使用blkid可以查看分区是什么文件系统。

→exit→选择reboot选项→救援模式→chroot /mnt/sysimage→mount /dev/sr0 /mnt →

cp /mnt/isolinux/vmlinuz  /boot→mkinitrd initramfs-`umane -r`.img `uname -r`→grub-install /dev/sda →cd /boot/grub→vim grub.conf

→exit→exit→选择reboot选项

实战:破坏/sbin/init文件,如何恢复?(/sbin/init是个二进制文件)方法一:

故障状态为

思路:将别的centos6上的/sbin/init文件拷一份过来就可以!

方法:救援模式→配置网络

chroot /mnt/sysimage→scp 192.168.30.48:/sbin/init ./→

mv init /sbin/→reboot

方法二:

查看/sbin/init来自于哪一个包,使用rpm -qf /sbin/init来查看

方法:救援模式→chroot /mnt/sysimage→挂载→

rpm2cpio /media/CentOS_6.9_Final/Packages/upstart-版本号.rpm | cpio -idv

./sbin/init  意思是将只解压upstart包里面的/sbin/init文件到当前目录!

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98376

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班