系统引导过程概述
通电–>bios初始化–>grub2磁盘引导阶段–>grub2文件引导阶段
–>指定boot所在分区–>启动内核,只读/挂载设备–>启动init程序进入初始化阶段
–>启动systemd初始化进程–>取/etc/systemd/中的文件–>启动程序–>启动登陆环境
1.进行grub磁盘引导阶段
模拟mbr引导分区数据(程序)丢失
第一步:在虚拟机上:
[root@localhost ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1 ##模拟mbr引导分区数据丢失
[root@localhost ~]# reboot ##重启后发现无法启动
第二步:在真机上virt-manager进入虚拟机管理界面(先将虚拟机force off);
选择Add Hardware添加镜像
选择使用光驱启动(将光驱调至最前)
第四步:在shell里写入恢复命令
chroot /mnt/sysimage/ ##挂载系统镜像到根目录,出现NO error reported说明恢复446的分区表成功grub2-install /dev/vda ##启动分区所在硬盘
两次exit退出
第五步:选择虚拟硬盘启动,重新开机(将光驱启动从第一拉到最后)
注意:一定要保证虚拟机在Force off的状态下更改硬盘或光驱的启动方式,否则会一直循环之前的操作。
2.文件引导阶段
grub引导文件/boot/grub2/grub.cfg丢失
实验步骤:在虚拟机上
[root@localhost ~]# rm -fr /boot/grub2/grub.cfg ##删除文件
方法一:删除文件后本机未reboot
[root@localhost ~]# grub2-mkconfig > /boot/grub2/grub.cfg ##将文件恢复到/boot/grub2/grub.cfg
方法二:删除文件后本机已经重新启动
进入新的shell
grub> set root='hd0,msdos1' ##指定boot分区
grub> linux16 /boot/vmlinuz-3.10.0-123.e17.x86_64(内核文件) ro root=/dev/vda1 ##分区设备名称
grub> initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img ##初始化镜像文件
grub> boot ##启动
注意:上述操作可以使系统正常启动,但是临时的,进入系统后要执行
grub2-mkconfig > /boot/grub2/grub.cfg 恢复文件后,系统才能恢复。
3.内核文件丢失
实验步骤:在虚拟机上
方法一:删除文件后本机没有重新启动
[root@localhost Desktop]# cd /boot/
[root@localhost boot]# ls
[root@localhost boot]# rm -fr vmlinuz-3.10.0-123.el7.x86_64 ##删除内核文件
[root@localhost boot]# yum whatprovides /boot/vmlinuz-3.10.0-123.el7.x86_64 ##查找这个文件在哪个安装包里
在Computer里搜索kernel内核文件,将它拖拽到桌面上
[root@localhost ~]# cd /root/Desktop
[root@localhost Desktop]# ls
kernel-3.10.0-123.el7.x86_64.rpm
[root@localhost Desktop]# file kernel-3.10.0-123.el7.x86_64.rpm
kernel-3.10.0-123.el7.x86_64.rpm: RPM v3.0 bin i386/x86_64 kernel-3.10.0-123.el7
[root@localhost Desktop]# rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id ##解压rpm软件包为cpio,解压到当前目录
219282 blocks
[root@localhost Desktop]# cp boot/vmlinuz-3.10.0-123.el7.x86_64 /boot/ ##复制boot下的镜像到/boot中
第一步:删除内核文件
第二步:查找删除的文件属于哪个软件包
第三步:在Computer里搜索kernel内核文件,将它拖拽到桌面上,解压内核软件包,将删除的文件复制到/boot下。恢复文件后虚拟机可以正常使用
方法二:删除文件后本机已经重新启动
第一步:删除内核文件,重启
第二步:开机报错,内核文件找不到
将虚拟机servser状态更改为Force off;
选择光驱启动
开机进入挽救模式;
进入一个新的shell
第三步:关机选择虚拟硬盘启动
4.初始化程序丢失
[root@localhost Desktop]# rm -fr /boot/initramfs-3.10-123.e17.86_64.img
实验步骤:
方法一:删除文件后本机没有重新启动
[root@localhost Desktop]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) ##uname -r 显示内核版本名
方法二:删除文件后本机已经重新启动
第一步:删除文件,重新启动
开机报错,初始化文件找不到;
将虚拟机server状态更改为Force off;选择光驱启动
进入挽救模式;进入新的shell
第二步:关机选择虚拟硬盘启动
注意:进入virt-manager后先将server状态更改为 force off 再将光盘驱动调到最后,启动
开机加载,说明恢复初始化程序成功
5.系统启动级别被修改
$( )和‘ ’的区别
在bash中,$( )与‘ ‘(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。
[root@localhost Desktop]# systemctl set-default shutdown.target ##更改启动级别
[root@localhost Desktop]# reboot ##重启
实验步骤:
1.开机按上下键
2.按“e”进入编辑模式
3.选择内核启动行
linux16 /vmlinuz-xxxx ro xxxxxx 5 ##添加5是表示开启图形
4.ctrl +x ##执行
5.进入虚拟机
[root@localhost Desktop]# systemctl set-default graphical.target ##开启初始的启动级别