linux下的系统启动修复
1.linux系统启动步骤
(1)POST加电自检
Linux系统在接通电源之后,会自动启动POST加电自检程序来对内部的各个配件进行自检;自检出现错误系统无法启动,重则停机
(2)BIOS启动引导阶段
BOIS 基本输入输出系统
加电自检后,系统会静入BIOS阶段,在该阶段系统会启动Boot Sequence来查找引导设备,当找到有引导程序的设备时,系统会读取该引导设备的0磁道一扇区mbr主引导程序,mbr会告诉系统下一步该干什么,进行下一阶段的启动
(3)GRUB启动引导阶段
GRUB 多重操作系统启动管理器
在该阶段系统会读取/etc/grub/grub.conf
系统配置文件,该文件为系统提供了菜单及加载的kernel位置,当kerenl被成功加载到内存重时,系统将进入下一阶段
(4)kerenl内核阶段
kerenl为系统的核心程序
进入内核阶段,系统会先探测可识别的所有硬件设备;随后系统会加载硬件驱动程序
(5)init初始化阶段
初始化阶段,系统开始完成启动前的初始化操作,根据文件执行脚本
2.linux系统故障排错
(1) 磁盘引导阶段
mbr=主引导记录=0磁道1扇区446
作用: 记录grub2引导文件的位置 当mbr数据丢失系统会因为找不到启动分区而停止启动
#fdisk -l *
所在的硬盘即为根所在的硬盘
模拟问题:
dd if=/dev/zero of=/dev/vda bs=446 count=1 mbr 主引导程序丢失
解决方法:
1)为系统添加光盘,使用光盘启动系统,进入rescue援救模式
2)chroot /mnt/sysimage
切换到主机真实环境
grub2-install /dev/vda
启动分区所在的硬盘
exit
退出主机环境
exit
退出援救模式
3)重新设置用硬盘启动系统,系统恢复正常
(2)grub文件引导阶段
位置 :
rhel7: /boot/grub2/grub.cfg
rhel8 /boot/grub2/grub.cfg /boot/loader/entries/xxxxxxxxx.conf
作用:指定/boot位置 指定系统启动时加载文件成名
1)引导文件丢失
模拟问题:rhel7: rm -fr /boot/grub2/grub.cfg
rhel8: rm -fr /boot/loader/entries/xxxxxxxxx.conf
解决方法:
umane -r 查看内核版本号
未重启系统时:
rhel7 grub2-mkconifg > /boot/grub2/grub.cfg
rhel8: kerne-install add 内核版本号 内核镜像
kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz
`grub2-mkconfig > /boot/grub2/grub.cfg` 重新建立引导文件
重启系统时:
手动引导
set root='hd0,msdos1'
linux16 /vmlinuz-3.10.0-957.el7.x86_64 ro root=/dev/nvme0n1p2
initrd16 /initramfs-4.18.0-80.el8.x86_64.img boot
开机后
rhel7 grub2-mkconifg > /boot/grub2/grub.cfg
rhel8:kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz
2)内核文件丢失
加载内核作用: /boot/vmlinuz-$(uname -r)
系统初始化硬件设备 只读挂在/设备
模拟问题:rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
解决方法:
未重启系统时:(系统中需要有镜像)
步骤与重启系统时类似,到镜像中找到我们丢失的内核引导文件,重新复制一份到/boot分区
重启系统时:
1)选择镜像启动系统
2)进入rescue模式:
chroot /mnt/sysimage` 切根
chroot /mnt/sysimage
mount /dev/cdrom /mnt
cd /mnt/BaseOS/Packages
rpm -ivh kernel-xxxxx.rpm --force 在rhel7中恢复完成
rhel8: mv /boot/vmlinuz-kernel-xxxxx /boot/vmlinuz-xxxxx
exit 切根
exit 退出援救模式
4) 用硬盘启动系统
实验现象:
3)初始化镜像文件丢失
位置:/boot/initramfs-4.18.0-80.el8.x86_64.img
作用:加载系统时钟 加载selinux 加载系统主机信息 加载/etc/fstab文件中磁盘挂在策略 加载磁盘配额 初始化系统程序开启开机启动服务 开启虚拟控制台 开启图形
模拟问题:rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
解决方法:
未重启系统时:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 重新建立镜像文件
注: $ (umane -r) 表示引用uame -r 这条命令的输出结果
重启系统时:
1)选择镜像启动系统
2)进入援救模式
chroot /mnt/sysimage 切根
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
exit 切根
exit 退出援救模式
3)选择硬盘启动系统 重新启动
(3)开机启动级别被篡改
0 关机 1 单用户 2 无图形网络模式 3 无图形网络模式 4 无图形网络模式 5 有图形网络模式 6 重启
恢复: 在开机选择界面按进入到引导文件编辑模式 在内核加载选项最后加入启动级别5 ctrl+x systemctl set-default graphical.target
模拟问题:
systemctl set-defaults reboot.target 将系统启动级别设置为不断重启状态
解决方法:
1)让系统在读秒界面停止读秒 ,选择界面按进入到引导文件编辑模式 在内核加载选项最后加入启动级别5
2) ctrl+x
3)systemctl set-default graphical.target
(4) 超级用户密码忘记
恢复:
1.在开机选择界面按进入到引导文件编辑模式
2.在内核加载选项最后删除到ro选项
3.更改ro---->rw
4.加入rd.break参数终止系统启动进入单用户模式
5.ctrl+x启动
6.chroot /sysroot
7.echo lee| passwd --stdin root
8.touch /.autorelabel ##当/.autorelabel文件存在selinux会重新初始化