一、系统的开机过程引导
- 通电
- biso初始化(BIOS是基本输入输出系统,bios初始化实际上是执行开机电自检和系统启动自举程序)
- grub2磁盘引导(硬盘主引导记录MBR和分区表DPT以及磁盘的有效标志。其中,主引导检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序调入内存加以执行)
- grub2文件引导阶段
- 指定boot所在分区
- 加载内核,只读挂载在 / 设备
- 启动该init程序进入初始化阶段
- 启动systemd初始化进程
- 读取 /etc/systemd/ 中的文件
- 启动程序
- 启动登陆环境
二、系统开机出错的的解决措施 (以下实验都是以虚拟机为载体进行实验)
1.grub2磁盘进到阶段
假设电脑的磁盘引导坏了
在虚拟机上执行以下操作:
确认虚拟机的操作系统的版本号
hostnamectl
dd if=/dev/zero of=/dev/vda bs=446 count=1
reboot
重启会有以下的问题出现:
解决方法:
1.准备好虚拟机对应的版本镜像
2.在真机中以root用户打开虚拟机管理 virt-manager
3.为做实验的虚拟机添加光驱设备
4.并将之前的硬盘驱动改为光驱驱动,(将光驱驱动放在硬盘驱动的上面)
5.打开虚拟机进入挽救模式
6.通过挽救模式进入到系统真实环境
chroot /mnt/sysimage
然后恢复grub2此引导
没有出现报错之后,两次exit 退出
7.然后关机,将驱动改为硬盘驱动
然后开机。
系统正常开机,问题解决成功。
三、grub磁盘引导文件丢失 /boot/grub2/grub.cfg
实验:
在虚拟机中删除掉引导文件
rm -fr /boot/grub2/grub.cfg
如果虚拟机此时未重启,那么执行
grub2-mkconfig > /boot/grub2/grub.cfg
可以使系统恢复引导文件,如果reboot 重启了系统那么就要进行以下操作了
在执行reboot之后
输入以下信息:
set root='hd0,msdos1' //hd0,msdos1表示第一个磁盘的第一个分区 boot分区
linux16 /boot/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/vda1 ( /dev/vda1 为根分区)
initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img
boot //引导完成,启动系统
系统重新启动之后,进入系统
再执行 grub2-mkconfig > /boot/grub2/grub.cfg 命令将引导文件恢复,下次电脑将正常启动。
注意:如果开机不执行该操作,那么下一次开机继续会进入引导界面,需要重新手动引导。
四、内核文件丢失
模拟问题:rm -fr /boot/vmlinuz-3.10.0-123.e17.x86_64 ##删除系统内核文件
解决思想:在安装包中找到内核安装包,拆解安装包,将文件复制到 /boot 下。
当系统未重启时:
yum whatprovides /boot/vmlinuz-3.10.0-123.e17.x88_64 //查找内核文件所在的安装包 将光驱的packages的kenel-3.10.0-123.e17.x88_64.rpm安装包复制到桌面上;
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id //将安装包拆解,拆解后的文件在桌面上
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/ //将boot目录下的内核文件复制到根目录/boot/下
当系统重启之后,会出现
为虚拟机添加光盘驱动
并将虚拟机设置成开机先启动光盘驱动
进入到挽救模式
执行 df 命令可以看到
当前光驱挂载点为 /dev/sr0 --------> /run/install/repo
当前硬盘挂载点为 /dev/vda ---------> /mnt/sysimage
cd /run/install/repo/Packages //进入到光驱存放软件包的地方
cp kenel-3.10.0-123.e17.x88_64.rpm /mnt/sysimage/mnt //将内核文件压缩包复制到/mnt
chroot /mnt/sysimage //从挽救环境进入系统真实环境
cd /mnt //进入/mnt下
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id //将安装包拆解
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/ //将内核文件复制到/boot
exit //退出系统真实环境
exit //退出挽救环境
进行完以上操作只有将虚拟机改为硬盘驱动
开机进入系统,系统恢复正常。
五、系统初始化文件丢失
实验:
在虚拟机上执行 rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img 删除掉初始化文件
若虚拟机未重启,则执行下列命令可恢复文件:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
// uname -r 为查看当前系统内核的版本号
若虚拟机重启,那么会出现报错:
那么就需要添加镜像文件为光驱,并且设置开机光驱启动
进入挽救模式:
sh-4.2# chroot /mnt/sysimage //切换至真实的系统环境
bash-4.2# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) //按照当前内核版本号恢复初始化文件
cat:write error: Broken pipe
bash-4.2# exit
然后关机,将虚拟机恢复到硬盘驱动启动
开机之后发现系统恢复。
六、 开机启动级别发生错误
Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
设定启动级别
systemctl set-default + 启动级别
实验:
在虚拟机上执行命令 systemctl set-default shutdown.target
开机会出现错误提示
解决方法:
1.重新启动进入该界面
2.开机按上下键停止读秒
3.按 ‘ E ’ 进入编辑模式
4.选择内核启动行,linux16 /vmlinuz-xxxxxxxx ro xxxxxxxxx 后添加启动级别5
5.ctrl+x执行
6.系统恢复正常。
6.修改超级用户的密码
七、在忘记超级用户密码无法登陆的时候,怎么样来修改用户的密码
1.重启系统
2.在系统启动阶段按上下键停止读秒
3.按 “ E ” 进入系统内部
4.找到这条
并将 ro (只读)改为 rw (读写),然后加上 rd.break
5.ctrl+x启动设定过后的系统引导条目
6.进入系统后执行 chroot /sysroot 切换到真实的系统环境
7.修改超级用户的密码
8.建立文件 touch /.autorelabel 让系统从新扫描所有文件
9.exit两次使系统自动重新启动
10.超级用户密码修改成功。