1 系统启动流程
简单来说,系统启动的过程如下:
(1)加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备;
(2)读取并执行第一个启动设备内MBR(主引导分区)的boot loader(引导装载程序,即是grub,spfdisk等程序);
(3)依据boot loader的设置加载kernel(内核文件),kernel会开始检测硬件与加载驱动程序;
(4)在硬件驱动成功后,kernel会主动调用init进程,而init进程会取得run-level(运行级别)信息;
(5)init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络、时区等);
(6)init执行run-level的各个服务的启动(script方式);
(7)init执行/etc/rc.d/rc.local(用户自定义开机启动程序)文件;
(8)init执行终端机模拟程序mingetty来启动login进程,最后就等待用户登陆。
2 系统排错
2.1 硬盘引导阶段错误
对应上面流程的第二步中,引导装载程序(boot loader)安装在启动设备的第一个扇区(sector)内,也就是我们一直谈到的MBR(MasterBoot Record,主引导分区)。当MBR内的字节被破坏,需要进行MBR主引导分区的恢复
模拟问题,截取MBR的446个字节:dd if=/dev/zero of=/dev/vda bs=446 count=1
解决方法:
系统关机状态下,添加cdrom
把iso镜像装进cdrom 选择光盘启动
先选择选择troubleshooting中的挽救模式rescue
选择1-->continue--> 回车打开shell
chroot /mnt/sysimage/,更改挂载目录为根目录
grub2-install 启动分区所在硬盘
grub2-install /dev/vda
exit退出两次
然后选择从硬盘启动
截取MBR的446个字节
系统无法启动
添加光盘,导入镜像,选择从光盘启动
选择troubleshooting中的挽救模式rescue
选择1–>continue–> 回车打开shell ,chroot /mnt/sysimage/,grub2-install /dev/vda,exit退出两次
最后,选择硬盘启动,系统恢复正常
2.2 文件引导阶段错误
2.2.1 引导文件丢失:/boot/grub2/grub.cfg文件丢失
对应启动流程中的第二步boot loader引导装载程序的文件丢失。
模拟问题,/boot/grub2/grub.cfg文件被删除,rm -fr /boot/grub2/grub.cfg
当系统没有重新启动时:grub2-mkconfig > /boot/grub2/grub.cfg
当系统被重新启动:
grub > set root='hd0,msdos1' 此位置是不确定的,位置指定/boot 分区
grub > linux16 /vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1 (写根分区)根分区的设备名称
grub > initrd16 /initramfs-3.10.0-1213.el7.x86_64.img 系统初始化镜像
grub > boot
以上操作可以使系统正常启动,但是是临时的,所以进入系统后还是需要执行:
grub2-mkconfig > /boot/grub2/grub.cfg
2.2.2 内核文件(vmlinuz)丢失
对应上述流程的第三步,根据boot loader引导启动内核文件,当内核文件被删除后,无法加载内核,导致不能正常启动。
模拟问题:rm -fr /boot/vmlinuz-3.10.0-514.el7.x86_64
内核文件在安装系统时使用的镜像文件ios的packages中,
所以,光盘启动时,我们可以拆解packages包,将需要的内核文件复制到原来的位置中
切换成光盘启动,进入挽救模式:
chroot /mnt/sysimage
mount /dev/cdrom /media
cd /media/Packages
cp kernel-3.10.0-514.el7.x86_64.rpm /mnt
cd /mnt
rpm2cpio kernel-3.10.0-514.el7.x86_64 | cpio -id
cd boot
cp vmlinuz-3.10.0-514.el7.x86_64 /boot
exit
exit
然后切换成硬盘启动
切换成光盘启动,进入挽救模式
切换成硬盘启动,正常进入系统
2.3 系统初始化镜像文件丢失
对应启动流程的第四步,在加载内核后启动init程序进入初始化阶段,当初始化镜像文件丢失后,需要使用命令生成镜像文件
模拟问题:rm -fr /boot/initramfs-3.10 .img
当系统没有重启时:mkinitrd /boot/initramfs-$(umane -r).img $(uname -r)
当系统重启后:切换成光盘启动,进入挽救模式 chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
然后exit两次 切换成硬盘启动
2.4 当开机启动级别被篡改
对应启动流程的第四步,启动级别被篡改后,比如篡改为开机重启级别,就会一直开机重启,所以,需要改变开机启动级别
错误形成systemctl set-default reboot.target
1.开机按上下键停止读秒
2 按“E”进入编辑模式
3 选择内核启动行
linux16 /vmlinuz-xxxxxxx ro xxxxxxxxxxxxx 改变为:
linux16 /vmlinuz-xxxxxxxx ro xxxxxxxxxx 5
然后ctrl +x
4. 启动系统 然后在系统中重新设定 systemctl set-default graphical.target
2.5 忘记超户密码
最后一步需要用户的登陆,当我们忘记超户的密码时,重新编辑引导条目
在系统启动阶段按上下健停止系统引导,按“E”进行编辑
找到linux16引导条目这一行,从这行最后删除到ro选项,并把ro改为rw,然后添加rd.break选项
ctrl+x启动设定过后的系统引导条目
chroot /sysroot/ ,切换到真实的系统环境
echo westos | passwd --stdin root
建立文件/.autorelabel让系统从新扫描所有文件
exit两次使系统自动重新启动
如此,就可以使用新密码westos登陆超户了!!!
############################The End################################