linux系统虽然是一个相对比较安全的系统,它也会出现一些问题,面对这些问题,我们需要知道和了解常遇到的问题,通过这些故障的学习,我们可以解决简单的故障问题。
一、系统引导过程概述
通电 --> bios初始化 --> grub2磁盘引导阶段 --> grub2文件引导阶段 --> 指定boot所在分区 --> 启动内核,只读挂在/设备 --> 启动init程序进入初始化阶段 --> 启动systemd初始化进程 --> 取/etc/systemd/中的文件 --> 启动程序 --> 启动登录环境
在进行系统排错之前,我们需要对我们的虚拟机或者是快照,添加一个存放镜像文件的光盘设备。要注意一定要有镜像文件,通过镜像文件,可以恢复文件。此外一定不要在真实主机中做实验。镜像文件要和虚拟机的版本一致。
二、boot引导错误
1. 模拟问题:
dd if=/dev/zero of=/dev/vda bs=446 count=1 ##破坏引导分区
vim /etc/sysconfig/selinux ##状态改为disabled,目的加快系统运行
我们可以通过【fdisk -l】命令,可以查看虚拟中boot引导分区存放的位置,引导程序存放在带*的设备中,我们一定要先知道引导分区的位置,再进行操作。破坏分区后,reboot重启。
2. 出现的现象
我们可以发现系统在该位置卡住,系统启动不了。
3. 问题解决解决
首先,我们要做的是,修改启动顺序,使光盘启动为第一个,因为我们要利用镜像文件进行引导文件的恢复。
我们会看到以下界面,选择【troubleshooting】问题解决选项,不要选择第一个选项,第一个是安装系统。
进入挽救模式,从而进入单人维护模式进行系统的恢复。
单人维护界面,我们需要选择选项【1】,找到系统安装镜像,并将它挂载到/mnt/sysimage上,回车,我们可以看到命令提示行出现,可以通过命令进行恢复。
查看挂载信息,我们看到的boot分区,它是镜像文件中的boot分区,不是我们虚拟机中出错的boot分区。我们需要将我们系统中的boot分区挂载。
chroot /mnt/sysimage ##挂载到系统上的引导/boot上
df ##查看挂载信息
挂载系统上的boot分区
grub2-install /dev/vda ##安装分区
exit ##退出
安装boot分区引导文件,安装完毕会提示“没有错误”,然后我们需要两次【exit】退出该模式。
退出后,系统仍然会进入选项菜单,我们需要通过点击倒三角强制退出,修改启动顺序,启动系统,这样系统就可以登录了。
三、引导文件丢失
1. 模拟问题:
cd /boot/grub2/ ##启动文件存放位置
rm -fr /boot/grub2/grub.cfg ##删除启动文件
2. 出现的现象
会出现grub> ,系统告诉我们需要进行手动的引导
3. 问题解决
(1)未重启
删除文件后,没有重新启动,我们可以通过系统启动文件模板进行恢复
grub2-mkconfig > /boot/grub2/grub.cfg ##文件恢复
(2)已重启
首先,我们需要通过【df】命令查看,根分区挂载的设备,我们在恢复过程需要使用该设备,如果设备填写错误,则手动引导会出现问题。
set root='hd0,msdos1' ##第一块硬盘和第一块分区
linux16 /vmlinuz-3.10.0-514.el7.x86_64 ro root=/dev/vda3 ##内核文件
initrd16 /initramfs-3.10.0-514.el7.x86_64.img ##系统初始化镜像
boot ##启动
在grub> 后直接输入命令,进行手动引导,要注意的是我们不用记住文件的版本,我们可以使用【tab】键,进行命令的补全,同时也避免了我们手动输入的错误。
登录系统后,我们需要将删除的文件恢复,没有恢复,下一次系统启动,还会出现该问题。
grub2-mkconfig > /boot/grub2/grub.cfg ##文件恢复
四、内核文件丢失
1. 模拟问题:
rm -fr /boot/vmlinuz-3.10.0-514.el7.x86_64 ##删除内核文件
reboot ##重启
2. 出现的现象
上传内核文件后,我们可以直接解压镜像文件,将镜像文件中的内核文件复制到/boot目录下。如果我们重启了系统,就不能这样操作了。
3. 解决问题
和第一个排错相同,我们需要修改启动顺序为光盘启动,而后进入挽救模式,进入后,选择【1】,回车,我们会看到命令提示行,首先使/boot分区直接挂载。
mount /dev/cdrom /media ##挂载镜像文件
cd /media/Packages
cp kernel-3.10.0-514.el7.x86_64.rpm /mnt ##复制安装包到mnt目录
cd /mnt
rpm2cpio kernel-3.10.0-514.el7.x86_64.rpm | cpio -id ##解开压缩包
我们需要将镜像文件挂载,将里面关于内核文件的压缩包解压,将我们所需要的内核文件复制到/boot下,我们的系统就可以启动
cd boot ##切换到镜像文件中的boot目录下
cp vmlinux-3.10.0-514.el7.x86_64 /boot ##复制内核文件
cd /boot ##查看根分区是否有该文件
exit
五、初始化镜像丢失
1. 模拟问题:
rm -fr initramfs-3.10.0-514.el7.x86_64.img ##删除初始化镜像文件
2. 出现的现象
删除初始化镜像文件后,系统会报错,找不到初始化镜像文件。
3. 解决问题
(1)未重启
我们可以通过以下命令恢复镜像文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) ##镜像文件的恢复
(2)已重启
设置启动顺序为光盘启动,进入挽救模式,选择【1】,/boot分区的挂载,开始恢复初始化镜像文件。
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) ##恢复初始化镜像文件
六、系统启动级别被篡改
1. 模拟问题:
cd /etc/systemd/system/
ls -l default.target ##查看图形界面是否在初始化启动列表中
systemctl set-default reboot.target ##设置进入默认界面,重新启动
默认启动级别的篡改会使我们的系统处于无限循环重启的状态。
2. 出现的现象
系统一直处于无限重启的循环
3. 解决问题
回车,进入系统,系统会一直回到该界面,我们需要按【e】进入编辑
在编辑界面的Linux16所在行,行末添加启动级别【5】,通过【ctrl+x】执行
登录系统后,我们需要将被篡改的启动级别改正,不然再次启动,系统还是会出现无限重启状态。
cd /etc/systemd/system/
systemctl set-default graphical.target ##修改默认启动后,进入图形界面
ls -l default.target ##查看图形界面是否在初始化启动列表中
七、root密码被篡改
reboot
进入选项菜单,按【e】进入编辑状态,在linux16所处行,改为删除ro之后的代码,并将ro改为rw rd.break
ctrl+x 继续执行
1. 现象
超级用户登录不了,密码被篡改
2. 解决问题
通过按上下键,可以停止读秒,我们可以看到下面提示按【e】键,进入编辑模式
进入编辑模式之后,我们需要在Linux16所在行,删除ro后面的代码,并将它改为“rw rd.break”,中断直接进入登录界面,设置完毕后,通过【ctrl+x】执行修改。
chroot /sysroot/
方法一:echo westos | passwd --stdin root ##修改密码
方法二:passwd root ##输入新密码,再次确认
touch /.autorelabel ##自动刷新内核级火墙,启动初始化标识
我们可以看到有命令提示行出现,输入命令修改root用户的密码,由于防火墙可能会阻止超级用户密码的更改,我们需要创建一个自动启动初始化标识的文件,来避免防火墙的阻挡。输入两次【exit】退出单人维护模式。
exit后,系统会自动启动,直接进入启动界面,我们可以用修改后的密码进行登录