Linux服务器启动和修复方式
一、通电
启动
启动所有硬件并进入系统做准备
修复
检查所有电源设备,确定供电设备正常,所有线缆是否插紧,检查线缆是否有损坏
二、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内核文件丢失
启动内核过程系统都完成了以下工作:
- 加载内核文件/boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
- 只读挂载根设备
- 读取/etc/fstab文件,确定挂载策略
- 读取/etc/sysconfig/selinux文件,确定selinux状态
- 加载系统时钟
模拟命令
[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

最后把硬盘启动优先级设置到最顶就好(高过光盘启动)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤
这篇文章主要介绍了CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-11-11
Apache中Virtual Host虚拟主机配置及rewrite参数说明
这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下2016-03-03
Xshell5连接虚拟机中的Linux的方法以及失败原因解决
这篇文章主要介绍了Xshell5连接虚拟机中的Linux的方法以及失败原因解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07


最新评论