系统启动(修改版1.0)

启动流程

CentOS 6中:

1.  post 加电自检,硬件信息

2.  grub stage1 ,读取默认启动设备MBR 前446 字节

3.  grub stage1.5,加载分区文件系统

4.  grub stage2,加载核心文件,以及驱动模块设备

5.  执行init程序,并且根据/etc/inittab获取默认信息

6.  执行/etc/rc.d/rc.sysinit初始化脚本

7.  根据使用的运行模式,运行/etc/rc(n).d/S、K开头的服务

8.  执行/etc/rc.d/rc.local脚本,里面包含自主设定的一些内容

9.  Login 用户登录

启动服务脚本介绍

1./etc/init.d/ 目录下放置的是服务脚本,服务脚本的格式为:

#!/bin/bash

# chkconfig:***(哪种运行模式下开启)**(S号)**(K号)

 # description:描述信息

COMMAND(执行的命令)

2.chkconfig命令

chkconfig --list                                              可查看所有服务在0-6运行模式下的on/off状态

chkconfig --add Server_SCRIPT             可将其加入到/etc/rc(n).d/下

chkconfig --del Server_SCRIPT               可将其从/etc/rc(n).d/下删除

chkconfig Server_SCRIPT on/off             开机时服务开启或关闭(默认对2,3,4,5模式)

chkconfig --level LEVEL  Server_SCRIPT  on/off


系统启动相关文件

/boot/vmlinuz-3.10.0-862.el7.x86_64(内核核心文件)

/boot/initramfs-3.10.0-862.el7.x86_64.img(与启动相关的辅助驱动模块的打包文件)

/lib/modules/3.10.0-862.el7.x86_64(与启动有关的模块)

grub引导加载程序分为三部分

1阶段:MBR的前446字节,告诉系统2阶段使用的文件系统驱动存放在何处

1.5阶段:MBR512字节后的27个扇区,找2阶段驱动所对应的需要的文件系统驱动进行加载

2阶段:加载内核需要的驱动

CentOS 6 引导程序在/boot/grub/目录下,CentOS 7 引导程序在/boot/grub2/目录下

 


 


以下的系统启动相关实验是基于CentOS 6,内核版本根据实际情况变化

实验1:/boot/initramfs-3.10.0-862.el7.x86_64.img的丢失后的恢复

rm -f /boot/initramfs-3.10.0-862.el7.x86_64.img

不重启下修复

mkinitrd /boot/initramfs-`uname -r`.img `uname -r`(第二个`uname -r`是该条命令参数,指明当前系统版本)

若是没修复重启,则会出现如下画面:

 

此时需要执行如下操作:

1.进入救援模式

2.切换到真根下:

chroot /mnt/sysimage/

mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

sync(同步,确保修改信息写入磁盘)

3.退出真根,重启即可恢复

 


实验2:/boot/vmlinuz-3.10.0-862.el7.x86_64的删除与修复

rm -f /boot/vmlinuz-3.10.0-862.el7.x86_64

此时重启系统,出现如下界面:

修复操作:

1.进入救援模式

2.看光盘是否挂载,若无怎手动挂载

3.拷贝光盘中的vmlinuz

cp /光盘挂载目录/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`

sync(同步,确保修改信息写入磁盘)

4.重启即可恢复

 


实验3:bootloader程序grub的第1阶段(MBR的前446字节)的破坏、修复实验

情况一:在已经备份的情况下

试验前可先对MBR做备份

dd if=/dev/sda of=/app/mbr bs=1 count=512(/dev/sda表示的是引导启动的第一个设备)

破坏第1阶段

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

重启后故障状态如下界面:(会直接进入光盘安装系统界面)

 

修复操作:

1.进入救援模式

2.将备份数据还原

dd if=/mnt/sysimage/app/mbr of=/dev/sda bs=1 count=446

利用如下命令可确认是否恢复:

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

sync(同步,确保修改信息写入磁盘)

3.重启

情况二:没有备份

破坏第1阶段

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

若机器没重启情况下:

方法一:

grub-install /dev/sda(可修复grub的所有阶段)

方法二:

使用grub交互式命令

grub

grub> root (hd0,0) (root代表的是vmlinuz所在目录也就是boot,hd0,0表示其分区位置)

grub> setup (hd0)

grub> quit

(注意:此方法依赖于/boot/grub/目录下除了grub.conf外其他的部分文件)

 

若误操作重启了机器:

方法一:

进入救援模式

chroot /mnt/sysimage/

grub-install /dev/sda

sync(同步,确保修改信息写入磁盘)

退出真根,重启

方法二:

进入救援模式

grub

grub> root (hd0,0)

grub> setup (hd0)

grub> quit

sync

重启

 

 

 


实验4:grub的1.5阶段破坏与修复

破坏第1.5阶段

dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512

重启后故障状态如下界面:

 

修复方法和破坏grub1阶段的修复方法一样


注意:在使用过grub交互式命令修复过grub1和1.5阶段后,若/boot/grub/目录下除了grub.conf其他的部分文件没有了,则会影响下一次的重新启动,会出现如下的界面:

 

只能使用如下方法修复:

进入救援模式

chroot /mnt/sysimage/

grub-install /dev/sda

sync(同步,确保修改信息写入磁盘)

退出真根,重启


 

实验5:grub的2阶段的破坏修复试验

grub的2阶段依赖于配置文件/boot/grub/grub.conf

若是启动出现如下界面:

 

因为/boot/grub/grub.conf配置文件中kernel行被放在了initrd行后

将/boot/grub/grub.conf删除后,重新启动,会出现如下界面:

 

修复操作,直接在此界面键入如下命令:

grub> kernel /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/sda2  (注意root的挂载分区,根据实际情况指定)

grub> initrd /initramfs-3.10.0-862.el7.x86_64.img

grub> boot


实验6:删除/boot/目录下所有数据,然后进行修复

rm -rf /boot/

此时重启后故障状态如下:

 

修复操作:

1.进入救援模式

2.chroot /mnt/sysimage/

3.挂载光盘

4.cp /光盘挂载目录/isolinux/vmlinuz /boot/

5.mkinitrd /boot/initramfs.img `uname -r`

(注意:4和5两个步骤还可以通过如下命令进行恢复:不切换根的状态下

rpm -ivh /光盘挂载目录/Packages/kernel-版本号.rpm --root=/mnt/sysimage/ --force

然后在第7步中,也添加上对应的版本号信息即可)

6.grub-install /dev/sda

7.创建grub.conf文件

cd /boot/grub/

vim grub.conf(最基本的几个信息建立即可)

    default=0

    timeout=5

    title centos-6

    kernel /vmlinuz root=/dev/sda2(注意此处根据实际分区情况填写)

    initrd /initramfs.img

8.退出,进入到图形界面,选择重启即可

(需要注意的是grub.conf文件中kernel和initrd后的 / 表示的boot目录所在分区,不是系统root根)

 

 

 

 


 

实验:当挂载信息文件/etc/fstab被删除,以及/boot/目录下数据也被删除,如何修复

rm -f /etc/fstab

rm -rf /boot/

重启后出现如下故障图:

 

修复操作如下:

1.进入救援模式,但是此时救援模式会出现如下图所示信息:

 

点击continue后会出现找不到分区信息的提示图:

 

2.继续下一步,进入shell命令行

3.利用fdisk查看分区信息,blkid查看文件系统

4.建立一个新文件夹,使用mount命令,依次挂载,通过列出内容,找到根分区

5.查出根分区后,挂载,创建fstab文件,示例如下:

   mount /dev/sda2 /mnt/testroot

   vim /mnt/testroot/etc/fstab

      /dev/sda2 / ext4 defaults 0 0

      /dev/sda1 /boot ext4 defaults 0 0

      /dev/sda5 swap swap defaults 0 0

6.退出,重新启动

7.接下来在执行“实验:删除/boot/目录下所有数据,然后进行修复”的所有步骤即可恢复



Centos 7的启动修复与CentOS 6 修复一样,除/boot/grub2/grub.cfg配置文件外:

可用命令grub2-mkconfig > ( 或-o)/boot/grub2/grub.cfg直接生成



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值