Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux服务器启动和修复

Linux服务器启动和修复方式

作者:feng68_

本文介绍了Linux系统启动过程中的疑难问题及其解决方法,包括磁盘引导阶段、文件引导阶段、内核文件丢失、系统初始化文件丢失和/boot丢失等问题的诊断和修复步骤

一、通电

启动

启动所有硬件并进入系统做准备

修复

检查所有电源设备,确定供电设备正常,所有线缆是否插紧,检查线缆是否有损坏

二、BIOS环境检查

检查硬件是否正常、检查硬件是否插紧

以上问题是硬件问题不是我们要关注的,找修电脑的修,我们要关注的是第三步即以下部分

三、磁盘引导

了解mbr

mbr主要作用是使得磁头去读取启动分区(/boot分区)

在linux下找到/boot分区,如果此阶段出现问题,那么系统会处于黑屏并闪烁光标

模拟问题

模拟命令

 [root@Server ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
 # 此命令表示用无限零字节覆盖/dev/sda上最前面的446个字节(最前的446个字节就是mbr主引导记录,其负责找到/boot)
 # /dev/sda 是系统boot分区所在的磁盘
 1+0 records in
 1+0 records out
 446 bytes copied, 0.000200806 s, 2.2 MB/s
 [root@Server ~]# reboot
问题现象

要把 光盘给取消勾选“启动时连接” 和 关掉(BIOS)或移除(取消启动时连接还不管用)网卡(不然它会上网去恢复,看不到现象),问题提示此如下:

解决问题

mbr是在安装系统时安装来的,那么我们再从光盘中安装就好了

1.重光盘启动

在光盘选项中勾选“启动时连接”,开机后选择“Troubleshooting”

2.进入系统挽救模式

这个挽救模式是由光盘提供的

3.得到shell后操作

开始执行修复命令,修复原理是把mbr重新安装到启动设备

chroot /mnt/sysroot		# 不同系统被挂载的地方可能不一致
grub2-install 启动设备(/dev/sda)		# 根据*所在分区不同而确定启动分区所在的设备		fdisk -l
exit
exit

执行命令使它正常挂载

grub2-install往哪里安装,往有*的设备上安装

4.成功回到引导界面

四、文件引导阶段

在文件系统引导阶段,系统会读取自动引导文件(/boot/grub2/grub.cfg),在此文件中指定系统启动过程中会读取什么文件,加载什么文件。

模拟问题

/boot/grub2/grub.cfg文件丢失

当/boot/grub2/grub.cfg文件丢失,那么将无法完成自动启动

模拟命令

事前准备,确定根分区和boot分区所在系统位置

 [root@Server ~]# df
 Filesystem     1K-blocks     Used Available Use% Mounted on
 devtmpfs            4096        0      4096   0% /dev
 tmpfs            1857340        0   1857340   0% /dev/shm
 tmpfs             742940    10584    732356   2% /run
 /dev/sda3       99634176  2930108  96704068   3% /      # 根分区(hd0,3)hard-->硬盘设备
 /dev/sda1         983040   264680    718360  27% /boot      # boot分区(hd0,1-->第一个设备的第一个分区)
 /dev/sr0        10825576 10825576         0 100% /media
 tmpfs             371468        0    371468   0% /run/user/0

把这文件删了就好,要是及时发现,还可以用grub2-mkconfig > /boot/grub2/grub.cfg命令重新生成覆盖挽救一下。

 [root@Server ~]# rm -rf /boot/grub2/grub.cfg
 [root@Server ~]# reboot
问题现象

解决问题

它自是不能自动启动了,还可以手动引导

 # 命令可以用tab键补全
 grub> set root=(hd0,msdos1)     # 指定boot分区位置
                                 # hdn便是boot分区在哪个硬盘上
                                 # msdosn在哪个分区
 # 回车后它给我们的内存有限,不要反复手残,然后报内存溢出的错误
 ​
 # 指定内核文件,只读挂载根设备
 grub> linuxx16 /vmlinuz-5.14.0      net.ifnames=0 selinux=0     # 只读挂载根分区,读取根分区里面的东西,注意:这里的selinux参数必须于你之前在中设定的参数一样,不写默认是1,不然参数不一样它会重启一遍去读取selinux,就白写命令了,net.ifnames=0也写上,之前做系统母盘时这两个参数都动过,具体情况根据机器具体而写。
 grub> initrd16 /in
 grub> boot  # 不是reboot,不然上面执行的命令白干,又得从新写一遍
 ​
 # 完成以上手动引导后再进入系统重写grub.cfg文件下次进系统就可以开机自动引导了
 [root@Server ~]# grub2-mkconfig > /boot/grub2/grub.cfg
 [root@Server ~]# reboot # 以成功自动引导

也是ok的啊,成功来到了登录黑框,现在只需从新写grub.cfg文件并覆盖到/boot/grub2/目录下就ok了

成功出现引导界面

内核参数文件丢失

模拟命令
 [root@Server ~]# ls /boot/loader/entries/
 3890aef9b6a64543b93a31bfc8c60d0d-0-rescue.conf
 3890aef9b6a64543b93a31bfc8c60d0d-5.14.0-427.13.1.el9_4.x86_64.conf
 [root@Server ~]# rm -rf /boot/loader/entries/*
 [root@Server ~]# reboot
问题现象

解决问题

问题现象和解决问题和“/boot/grub2/grub.cfg文件丢失”一样,先手动挂载。

进入系统后用kernel-install命令恢复

 [root@Server ~]# kernel-install add --help
 Usage:
   kernel-install [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE...]
                                     # 内核版本      内核文件
   kernel-install [OPTIONS...] remove KERNEL-VERSION
   kernel-install [OPTIONS...] inspect
 Options:
   -h, --help     Print this help and exit
       --version  Print version string and exit
   -v, --verbose  Increase verbosity
 [root@Server ~]# uname -r       # 查看内核版本
 5.14.0-427.13.1.el9_4.x86_64
 [root@Server ~]# kernel-install add `uname -r` /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
 [root@Server ~]# ls /boot/loader/entries/
 3890aef9b6a64543b93a31bfc8c60d0d-0-rescue.conf
 3890aef9b6a64543b93a31bfc8c60d0d-5.14.0-427.13.1.el9_4.x86_64.conf

内核文件丢失

启动内核过程系统都完成了以下工作:

模拟命令
 [root@Server ~]# rm -rf /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
 [root@Server ~]# ls /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
 ls: cannot access '/boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64': No such file or directory
 [root@Server ~]# reboot
问题现象

哎,炸一看没什么问题

等它倒计时完了就有问题啦

解决问题

关机,确保光盘选项中的“启动时连接”是勾选上的,再在开机的一瞬间狂按esc,进入BIOS

手速菜的看下面操作

把光盘启动(CD-ROM Drive)加到第一即可,用“+/-”号移动,保存更改并退出F10(具体系统根据具体情况来操作)

接下来就是进入救援模式,选择部分和“磁盘引导”“进入系统救援模式”步骤一样;得到shell后执行下面命令

安装文件系统时是通过镜像安装的,所以资源在镜像中要挂载它才可以使用,把它挂载到软件仓库指向的那个目录,再通过rqm -qf /boot/来查看内核文件是从哪里来的

 chroot /mnt/sysroot
 mount /dev/cdrom /media/
 cd /media/BaseOS/Packages
 ls |grep kernel
 kernel-5.14.0-427.13.1.el9_4.x86_64.rpm     # 要用的是这个内核文件
 kernel-abi-stablelists-5.14.0-427.13.1.el9_4.noarch.rpm
 kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-modules-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-modules-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-modules-extra-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-uki-virt-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-modules-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-modules-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-modules-extra-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-tools-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-tools-libs-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-uki-virt-5.14.0-427.13.1.el9_4.x86_64.rpm
 cp kernel-5.14.0-427.13.1.el9_4.x86_64.rpm /mnt/
 # 这b软件在 /media(挂载点)/BaseOS/Packages下,把它复制到/mnt下目录下,文件少,好操作
 cd /mnt/
 rmp2cpio kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm | cpio -id    # 用这个命令把它拆开
 ls
 hgfs  kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm  lib  usr
 cd lib/modules/5.14.0-427.13.1.el9_4.x86_64/
 ls
 config  modules.builtin  modules.builtin.modinfo  symvers.gz  System.map  vmlinuz
 cp vmlinuz /boot/vmlinuz-`uname -r`
 ls /boot        # 不放心可以ls /boot看一下有没有成功
 config-5.14.0-427.13.1.el9_4.x86_64
 efi
 grub2
 initramfs-0-rescue-3890aef9b6a64543b93a31bfc8c60d0d.img
 initramfs-5.14.0-427.13.1.el9_4.x86_64.img
 initramfs-5.14.0-427.13.1.el9_4.x86_64kdump.img
 loader
 symvers-5.14.0-427.13.1.el9_4.x86_64.gz
 System.map-5.14.0-427.13.1.el9_4.x86_64
 vmlinuz-0-rescue-3890aef9b6a64543b93a31bfc8c60d0d
 vmlinuz-5.14.0-427.13.1.el9_4.x86_64
 exit
 exit

退出后启动还是光盘启动,因为BIOS中,光盘启动优先级是最高的,把硬盘启动优先级调高就好了

系统初始化文件丢失

系统初始化作用

使用初始化环境开启系统所有开机启动服务

看初始化环境步骤如下

内核启动结束后开始读取“系统初始化镜像文件”(initramfs-5.14.0-427.13.1.el9_4.x86_64.img),用file命令查看是gzip文件,改后缀名为gz后用gunzip可以解开,里面的文件是初始化二进制程序,再用cpid -id 解开后会发现它和根下面的目录很相似。

 # 不知道是系统问题还是怎么样,我的不是gzip文件,是个可执行程序,看其他人现象把
 [root@Server ~]# file /boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img
 /boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
 [root@Client ~]# cd /mnt/
 [root@Client mnt]# ls
 hgfs  initramfs-5.14.0-427.13.1.el9_4.x86_64.img
 [root@Client mnt]# mv initramfs-5.14.0-427.13.1.el9_4.x86_64.img initramfs-5.14.0-427.13.1.el9_4.x86_64
 [root@Client mnt]# cpio -id < initramfs-5.14.0-427.13.1.el9_4.x86_64
 79 blocks
 [root@Client mnt]# ls
 early_cpio  hgfs  initramfs-5.14.0-427.13.1.el9_4.x86_64  kernel
 [root@Client mnt]# tree /mnt/
 /mnt/
 ├── early_cpio
 ├── hgfs
 ├── initramfs-5.14.0-427.13.1.el9_4.x86_64
 └── kernel
     └── x86
         └── microcode
             └── AuthenticAMD.bin
 ​
 4 directories, 3 files

模拟命令
 rm -rf /boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img
问题现象
解决问题

问题现象和解决问题和“内核文件丢失”一样,先关机,开机进入BIOS,把光盘启动优先级调到最上面

得到shell后:

 chroot /mnt/sysroot
 mount /dev/cdrom /media/
 cd /media/BaseOS/Packages/
 ls |grep kernel
 kernel-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-abi-stablelists-5.14.0-427.13.1.el9_4.noarch.rpm
 kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm    # 是这个b文件
 kernel-debug-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-modules-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-modules-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-modules-extra-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-debug-uki-virt-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-modules-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-modules-core-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-modules-extra-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-tools-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-tools-libs-5.14.0-427.13.1.el9_4.x86_64.rpm
 kernel-uki-virt-5.14.0-427.13.1.el9_4.x86_64.rpm
 rpm -ivh kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm --force   # 强制安装
 ls /boot
 config-5.14.0-427.13.1.el9_4.x86_64
 efi
 grub2
 initramfs-0-rescue-3890aef9b6a64543b93a31bfc8c60d0d.img
 initramfs-5.14.0-427.13.1.el9_4.x86_64.img      # 可以看到这个文件回来了
 initramfs-5.14.0-427.13.1.el9_4.x86_64kdump.img
 loader
 symvers-5.14.0-427.13.1.el9_4.x86_64.gz
 System.map-5.14.0-427.13.1.el9_4.x86_64
 vmlinuz-0-rescue-3890aef9b6a64543b93a31bfc8c60d0d
 vmlinuz-5.14.0-427.13.1.el9_4.x86_64
 exit
 exit

最后把硬盘启动优先级设置到最顶就好(高过光盘启动)

/boot丢失

模拟命令
 [root@Server ~]# rm -rf /boot/*
 [root@Server ~]# reboot
问题现象

解决问题

使用“内核文件丢失”方法得到shell

 chroot /mnt/sysroot
 grub2-install /dev/sda
 mount /dev/cdrom /media/
 cd /media/BaseOS/Packages/
 rpm -ivh kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm --force
 # 如果现象看到grub rescue> 则优先执行grub2-install /dev/sda,不然它报错打不开/boot/gurb2下的grubenv.new文件,但是也成功执行一部分了,最后也开得机可以正常使用,不知道有没有影响
 grub2-mkconfig > /boot/grub2/grub.cfg
 exit
 exit

最后把硬盘启动优先级设置到最顶就好(高过光盘启动)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文