实战:以centos6、7为例,如果误删/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选项即可修复。
实战:以centos6、7为例,如果误删/boot/vmlinuz-2.6.32-696.el6.x86_64,重启后如何恢复?
centos6、7:重启—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个字节,系统重启后没有经过菜单栏而直接切换到救援模式的界面, 如何恢复?
先研究第一阶段,即MBR前446个字节,
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,这个命令的作用效果是将grub的1阶段、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