删除内核启动文件
[root@CentOS6 ~]#cd /boot [root@CentOS6 /boot]#rm -f initramfs-2.6.32-754.el6.x86_64.img [root@CentOS6 /boot]#reboot重启进入系统失败,开始进入救援模式
chroot /mnt/sysimage/ #切换根目录 cd /boot #去内核目录下 mkinitrd initnamfs-`uname -r`.img `uname -r` #创建内核启动文件 exit #退出shell,否则无法重启 reboot在/etc/rc.d/init.d目录下,新建服务脚本文件
#!/bin/bash #chkconfig: - 96 07 # - 表示全部禁止 96是S 07是K #description: ceshi . /etc/init.d/functions start() { touch /var/lock/subsys/testsv action "Starting testsv" } stop() { rm -f /var/lock/subsys/testsv action "Stopping testsv" } status() { if [ -f /var/lock/subsys/testsv ];then echo "testsv is running" else echo "testsv is stopped" } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: testsv {start|stop|status|restart" esac脚本测试结果如下
service testsv start Starting testsv [ OK ] service testsv stop Stopping testsv [ OK ] service testsv restart Stopping testsv [ OK ] Starting testsv [ OK ] service testsv status testsv is runningchkconfig命令添加此服务,查询此服务在各个运行级别的开启、关闭状态是否符合服务脚本文件中的描述
[root@CentOS6 /etc/init.d]#chkconfig --list testsv service testsv supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add testsv') [root@CentOS6 /etc/init.d]#chkconfig --add testsv [root@CentOS6 /etc/init.d]#chkconfig --list testsv testsv 0:off 1:off 2:on 3:on 4:on 5:on 6:offchkconfig修改此服务在运行级别3的状态为off
[root@CentOS6 /etc/init.d]#chkconfig --level 3 testsv off [root@CentOS6 /etc/init.d]#chkconfig --list testsv testsv 0:off 1:off 2:on 3:off 4:on 5:on 6:offchkconfig删除此服务
[root@CentOS6 /etc/init.d]#chkconfig --del testsv [root@CentOS6 /etc/init.d]#chkconfig --list testsv service testsv supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add testsv') [root@CentOS6 /etc/init.d]#ls /etc/init.d | grep testsv testsvservice命令:手动管理服务
语法:
service service_name start|stop|restart|status,服务开启、关闭、重启、状态查询 service --status-all,查询所有服务的状态安装telnet以及xinetd服务
yum -y install telnet-server #必须安装此服务,否则xinetd不能守护此进程 yum -y install telnet yum -y install xinetdchkconfig --list命令发现telnet服务属于非独立服务,需要修改xinetd服务的配置文件
[root@CentOS6 /etc/init.d]#chkconfig --list xinetd based services: chargen-dgram: off chargen-stream: off daytime-dgram: off daytime-stream: off discard-dgram: off discard-stream: off echo-dgram: off echo-stream: off rsync: off tcpmux-server: off telnet: off time-dgram: off time-stream: off配置/etc/xinetd.d/telnet,将disabled的值由yes改为no,重新执行chkconfig --list命令,发现telnet的状态已经变成yes
service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }重启xinetd服务,此时通过ss -ntlp查看监听端口,发现xinetd正在监听telnet的23端口
[root@CentOS6 /etc/init.d]#service xinetd restart [root@CentOS6 /etc/init.d]#ss -ntlp State Recv-Q Send-Q Local Address:Port Peer Address:Port users:(("xinetd",2782,5)) LISTEN 0 128 127.0.0.1:631 *:* [root@CentOS6 /etc/init.d]#lsof -i :23 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 2782 root 5u IPv6 15073 0t0 TCP *:telnet (LISTEN)远程telnet登录本机,此时查看tcp端口,发现telnet正在23端口处于连接状态
[root@CentOS6 /etc/init.d]#ss -ntup Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.39.3:23 192.168.39.14:54442 users:(("in.telnetd",2834,0),("in.telnetd",2834,1),("in.telnetd",2834,2)) tcp ESTAB 0 64 192.168.39.3:22 192.168.39.100:62331 users:(("sshd",2088,3)) [root@CentOS6 /etc/init.d]#lsof -i :23 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 2782 root 5u IPv6 15073 0t0 TCP *:telnet (LISTEN) in.telnet 2834 root 0u IPv4 16037 0t0 TCP 192.168.39.3:telnet->192.168.39.14:54442 (ESTABLISHED) in.telnet 2834 root 1u IPv4 16037 0t0 TCP 192.168.39.3:telnet->192.168.39.14:54442 (ESTABLISHED) in.telnet 2834 root 2u IPv4 16037 0t0 TCP 192.168.39.3:telnet->192.168.39.14:54442 (ESTABLISHED)判断kernel行和initrd行可否交换次序:
在/boot/grub/grub.conf文件中复制当前启动菜单选项设置,交换kernel行和initrd行的次序 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-754.el6.x86_64) root (hd0,0) initrd /initramfs-2.6.32-754.el6.x86_64.img kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=20901eea-7a80-4623-81ec-ebb0951c8b80 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 重启系统,进入复制的启动项,发现错误提示:kernel必须在initrd前 开始救援模式 使用键盘 e 进入编辑 选中行然后用 d 删除 使用键盘 o 增加一个空白行 使用键盘 e 进入编辑 回车进入目录按 b 重启机器,最终成功启动由于本次启动属于在grub中临时更改启动项,在系统启动之后,需要及时对/boot/grub/grub.conf文件进行修改,确保今后启动正常一、仅保留/boot/grub目录下的grub.conf文件
[root@CentOS6 ~]#mv /boot/grub/* /data/ [root@CentOS6 ~]#mv /boot/grub/* /data/重启后发现系统正常启动,这说明进入stage 2必要的文件只有 /boot/grub/grub.conf 文件,其他文件只是 stage1, stage 1_5, stage 2 的备份文件 二、grub的stage 1 丢失
[root@CentOS6 ~]#mv /boot/grub/* /data/ [root@CentOS6 ~]#mv /boot/grub/* /data/ #在/boot/grub目录中只保留grub.conf文件 [root@CentOS6 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=446 #删除磁盘前446字节,即grub的stage 1 446+0 records in 446+0 records out 446 bytes (446 B) copied, 0.00317388 s, 141 kB/s 查看磁盘前512字节 [root@CentOS6 ~]#hexdump -C -n 512 /dev/sda 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 20 |............... | 000001c0 21 00 83 9b 1c 7f 00 08 00 00 00 40 1f 00 00 9b |!..........@....| 000001d0 1d 7f 83 fe ff ff 00 48 1f 00 00 00 35 0c 00 fe |.......H....5...| 000001e0 ff ff 83 fe ff ff 00 48 54 0c 00 80 1a 06 00 fe |.......HT.......| 000001f0 ff ff 05 fe ff ff 00 c8 6e 12 00 38 91 06 55 aa |........n..8..U.| 00000200 #80-aa之间是分区信息,前面446全部为0 重启发现错误 重启后,BIOS认为/dev/sda不是启动磁盘,于是寻找第二启动介质,所以出现光盘界面,如果没插入光盘,那就是黑屏提示。救援模式修复 chroot /mnt/sysimage/ grub-install /dev/sda 启动后查看文件都恢复了,修复成功 [root@CentOS6 ~]#ls /boot/grub/ device.map grub.conf reiserfs_stage1_5 vstafs_stage1_5 e2fs_stage1_5 iso9660_stage1_5 stage1 xfs_stage1_5 fat_stage1_5 jfs_stage1_5 stage2 ffs_stage1_5 minix_stage1_5 ufs2_stage1_5三、grub的stage 1_5丢失
人为损坏stage1后面的扇区 #除stage1之外的前20个扇区的内容全部清零 dd if=/dev/zero of=/dev/sda bs=1 count=10240 skip=512 seek=512 hexdump -C 512 -n 10240 /dev/sda #查看/dev/sda磁盘的前10240字节,发现stage1_5确实已经清零红线区域是分区数据,如果46个字节没了也没备份就凉凉了
重启后无法进入系统,症状如下 只有一个光标来回闪,说明已经过了第一阶段进入救援模式 chroot /mnt/sysimage/ gurb-install /dev/sda #万能的命令啊 修复后重启成功 四、/boot/grub/grub.conf文件丢失删除/boot/grub.conf 当删除/boot/grub/grub.conf文件后,系统无法启动,症状如下: 开始修复:手动输入关键启动参数root, kernel, initrd等关键信息 root (hd0,0) #根的路径 kernel /vmlinuz-2.6.32-754.e16.x86_64 root=/dev/sda2 #内核参数,有时候启动不起来后面必须加root路径 initrd /initramfs-2.6.32-754.e16.x86_64.img #为选定的内核提供额外文件的ramdisk有时候就算进行上述操作还是会出现如下错误: 这时候需要在内核参数后面加上 root=/dev/sda2即可
重启系统,修复成功五、/boot/grub下的所有文件全部丢失
删除整个grub文件夹 [root@CentOS6 ~]#rm -rf /boot/grub/ 重新启动系统此时stage2文件丢失,报错如下图: 进入救援模式 1.先修复grub chroot /mnt/sysimage/ grub-install /dev/sda 2.手动创建grub.conf文件 default=0 timeout=6 ttile lipenggbin_2.6 kernel /vmlinuz-2.6.32-754.e16.x86_64 root=/dev/sda2 #内核参数 initrd /initramfs-2.6.32-754.e16.x86_64.img #为选定的内核提供额外文件的ramdisk 重新启动系统,修复成功前提分析,boot目录下所有文件丢失,需要恢复的文件如下
1. 内核文件2. 给内核提供额外文件的ramdisk3. grub stage 2相关文件,即修复grub4. grub.conf配置文件进入救援模式
chroot /mnt/sysimage/ #切换根目录 mount /dev/sr0 /mnt #挂载光盘 cp /mnt/isolinux/vmlinuz /boot/vmlinuz-`unmae-r` #复制内核文件过来并改回原来的名字 mkinitrd /boot/initramfs-`uname -r`.img `uname -r` #创建内核需要的额外文件的ramdisk grub-install /dev/sda #修复grub文件引导 vi /boot/grub/grub.conf #创建grub配置文件 default=0 timeout=8 title lipengbin_6.0 kernel /vmlinuz-2.6.32-754.e16.x86_64 root=/dev/sda2 #内核参数 initrd /initramfs-2.6.32-754.e16.x86_64.img #为选定的内核提供额外文件的ramdisk reboot重启修复成功
完 毕