您现在的位置是:首页 >学无止境 >Linux启动过程的问题解决网站首页学无止境

Linux启动过程的问题解决

凤凰战士芭比Q 2024-06-20 00:01:02
简介Linux启动过程的问题解决

Linux启动过程的问题解决

当我们在使用Linux时,可能会因为某些设置或突然断电等原因导致文件系统出现错误,从而导致Linux无法正常启动。但这并不意味着我们需要重新安装系统,我们可以进入rescue模式来解决这些问题。下面是一些常见的问题及其解决方案:

忘记root密码的解决

如果我记忆力不是很好 root 密码忘记了怎么办?其实在Linux环境中 root 密码忘记时是可以救回来的。只要能够进入并且挂载,如何重新设置一下root的密码,就救回来了。

只是在新版的 systemd 的管理机制中,默认的 rescue 模式是无法直接获取 root 权限的,还是得要使用 root 的密码才能够登录 rescure 环境。那怎么办?,还是有办法的,通过一个名为【rd.break】的内核参数来处理即可。只是需要注意的是,rd.break 是 RPM disk 里面的操作系统状态,因此你不能直接获取原本的 Linux 系统操作环境。所以,还需要 chroot的支持。更由于 SELinux 的问题,你可能还得要加上某些特殊的操作才能顺利搞定 root 密码的恢复。

解决方法

现在我们来实践一下(1)按下 systemctl reboot 来重新启动

image-20230523104950118

(2) 进入到启动画面,在可启动的选项上按下 e 进入编辑模式,如何就在Linux 16 的哪个内核项目上面使用 这个参数保护来处理

在下面的画面按下 e 进入编辑模式

image-20230523105044028

image-20230523095730775

改完之后按下 [ctrl] + x 开始启动,启动完成后屏幕会出现如下类似画面

image-20230523105205653

此时请注意,你应该是在 RAM disk 的环境,并不是原本的环境,因此根目录下面的东西跟你原本的系统无关。而且,你的系统应该会被挂载到 /sysroot 目录下,因此,你得这样做

switch_root:/#                                  # 无须输入密码即可获取root权限
switch_root:/# mount |grep /sysroot             # 检查一下挂载点,一定要发现/sysroot 才是对的
/dev/mapper/centos-root on /sysroot xfs (ro,relatime,attr2,inode64,noquota)
switch_root:/# mount -o remount,rw /sysroot     # 要先让它挂载成可读写属性
switch_root:/# chroot /sysroot
sh-4.2# echo "csq131400" | passwd --stdin root  # 修改密码
sh-4.2# touch /.autorelabel                     # 这一步很重要,使用SELinux的安全上下文
sh-4.2# exit                                   
switch_root:/# reboot                           # 重启测试

重新启动后,你输入新的密码就可以登录系统了。

  • chroot 目录:代表将你的根目录【暂时】切换到 chroot之后所接的目录。因此,以上表为例,那个 /sysroot 将会被暂时作为根目录,而我们知道那个目录其实就是最原先的系统根目录,所以你当然就能够用来处理你的文件系统与相关的账号管理
  • 为什么需要/.autorelabel:在rd.break 的RAM disk 环境下,系统是没有 SELinux的,而你刚刚修改了 /etc/shadow (因为改密码),所以【这个文件的SELinux安全上下文的特性将会被取消】。如果你没有让系统于启动时自动地恢复 SELinux上下文,你的系统将产生【无法登录】的问题(在 SELinux 为 Enforcing 的模式下),加上/.autorelabel就是让系统在启动的时候自动使用默认的SELinux类型重新写入 SELinux 安全上下文到每个文件中。

不过加上 /.autorelabel 之后,系统重新启动就会重新写入 SELinux 的类型到每个文件,因此会花不少时间。如果你不想花很多时间,还有个方法可以处理:

  • 在rd.break 模式下,修改完 root 密码后,将 /etc/selinux/config 内的 SELinux 运行模式修改为 permissive

  • image-20230523150928979

  • 重新启动后,使用 root 身份执行【restorecon -Rv /etc】仅修改 /etc 下面的文件

  • 重新修改 /etc/selinux/config 改为 enforcing,然后【setenforce 1】即可

[root@localhost ~]# getenforce 
Permissive
[root@localhost ~]# restorecon -Rv /etc/
[root@localhost ~]# restorecon -Rv /etc
[root@localhost ~]# vim /etc/selinux/config 
SELINUX=enforcing     
[root@localhost ~]# setenforce 1

因文件系统错误而无法启动

如果因为设置错误导致无法启动时,要怎么办?很简单。最容易除错的设置而导致无法顺利启动的步骤,通常就是 /etc/fstab 这个文件了,尤其是用户在实践磁盘配额、LVM、RAID时,最容易写错参数,又没有经过 mount -a来测试挂载,就立刻直接重新启动,就立刻直接重新启动,然后就无法启动了该怎么办?如下图

image-20230523154335381

解决方法

  • 可以看到最后两行,他说输入root密码继续加以恢复,那就输入root密码

    image-20230523154544662

  • mount -o remount,rw / 将根目录挂载成可读写

    image-20230523154659989

  • 编辑/etc/fstab修改错误

  • 保存退出 重启(reboot)看看
    image-20230523155123597

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。