Linux Grub引导修复指南

一、启动问题

1、如果你的计算机在开机后直接进入grub rescue模式,可能需要查看grub的环境变量和挂载点等信息,并且重新安装grub。

set命令可以查看当前grub环境的变量值:
set
# 正常grub menu界面将显示类似下面的信息
prefix=(hd0,gpt2)/boot/grub
root=hd0,gpt2
...

2、如果grub menu界面可以出现,但是无法正常启动Linux操作系统,可能是因为grub配置文件(如/boot/grub/grub.cfg)被删除或损坏。解决办法是进入grub命令行模式,查看当前grub菜单中的各项设置。

# 进入grub命令行模式
grub>
# 查看grub菜单
cat (hd0,gpt2)/boot/grub/grub.cfg
# 输出grub内容,并检查各项设置是否正确。

3、如果进入grub的menu之后,找不到正确的选项来启动Linux系统,可能需要手动添加一些启动菜单。这时可以使用grub-mkconfig或手动编辑grub配置文件。

# 使用grub-mkconfig自动生成grub menu
grub-mkconfig -o /boot/grub/grub.cfg
# 手动编辑grub.cfg,添加启动菜单(下面是示例)
menuentry "My Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz root=/dev/sda2
    initrd /initrd.img
}

二、分区问题

1、如果Linux的根分区发生磁盘损坏或者删除,可能需要重新建立分区并且安装Linux系统。

# 使用fdisk命令来查看当前分区情况
sudo fdisk -l /dev/sda
# 新建一个主分区
sudo fdisk /dev/sda
n # 创建新的分区
p # 创建一个主分区
# 选择分区起始和结束的扇区(按回车键表示使用默认值)
w # 保存并退出
# 格式化刚才新建的分区
sudo mkfs.ext4 /dev/sda3
# 挂载分区到/mnt下
sudo mount /dev/sda3 /mnt
# 将当前系统的文件拷贝到新分区
sudo cp -ax / /mnt
# 更新新分区的fstab文件
sudo nano /mnt/etc/fstab
# 在fstab中加入下面这行
UUID=3fdda0dd-6bef-4bab-9bef-4d8edaaa5aac / ext4 errors=remount-ro 0 1

2、如果Linux系统的根分区尚未损坏或删除,但是grub引导信息不正确,可能需要修改grub引导信息之后重新安装grub。

# 找到当前系统的根分区,假设为/dev/sda2
# 挂载该分区到/mnt下
sudo mount /dev/sda2 /mnt
# 挂载/boot分区(如果有的话)
sudo mount /dev/sda1 /mnt/boot
# 挂载虚拟文件系统到/mnt下
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
# 进入/mnt下的Linux系统,注意切换root用户
sudo chroot /mnt
# 重新安装grub引导信息
grub-install /dev/sda
# 更新grub配置
update-grub
# 退出chroot环境并卸载/mnt下的各个目录
exit
for i in /dev/pts /dev /proc /sys /run /boot; do sudo umount /mnt$i; done
sudo umount /mnt

三、故障诊断

1、如果grub引导信息显示错误信息,可能需要开启grub菜单的调试模式,或者查看grub日志文件(如/var/log/grub.log)来显示更多详细信息。

# 开启grub调试模式
grub> set debug=all
# 新建启动菜单,选择调试模式
menuentry "Debugging my Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz root=/dev/sda2 debug
    initrd /initrd.img
}
# 重启计算机,选择该菜单后,即可显示grub调试信息

2、如果Linux系统启动后,发现各种问题,可能需要进入单用户模式(也称紧急模式)进行故障诊断。

# 进入grub菜单,选择要进入的Linux启动菜单,按e键进入编辑模式
# 找到以“linux”开头的一行,末尾加入“single”或“emergency”,如下所示
linux /vmlinuz root=/dev/sda2 single
# 按Ctrl+X或F10进入单用户模式
# 进入之后,可以检查文件系统、日志文件、网络配置等

四、安全机制

1、为了防止grub和Linux系统被未经授权的用户或程序篡改,可以通过以下办法加强系统的安全性:

# 给grub.cfg加密并且保护
# 安装grub-mkstandalone
sudo apt install grub-efi-amd64-bin
# 生成一个grub密码,比如mypassword
echo -e "mypassword\nmypassword" | sudo grub-mkpasswd-pbkdf2 | grep 'PBKDF2' | awk -F " " '{print "set superusers=“root\npassword_pbkdf2 root " $NF}' | sudo tee -a /etc/grub.d/40_custom
# 生成加密后的grub.cfg文件
sudo grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --fonts="unicode" --themes="default" -o grub.efi /boot/grub/grub.cfg
# 移动已有的grub.efi文件
sudo mv /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/ubuntu/grubx64.efi.bak
# 移动新生成的grub.efi文件
sudo mv grub.efi /boot/efi/EFI/ubuntu/grubx64.efi

2、另外,还可以设置Linux系统的boot loader锁,使得只能使用密钥来启动Linux系统,防止系统被非法篡改。

# 安装mokutil工具
sudo apt-get install mokutil
# 创建一个私钥
sudo openssl req -new -x509 -newkey rsa:2048 -keyout ₹(id -un)-$(hostname -s).key  -outform DER -out ₹(id -un)-$(hostname -s).der -days 36500 -nodes -subj "/CN=$(hostname)"
# 上传该密钥到Linux MOK中,并且输入密码
sudo mokutil --import ₹(id -un)-$(hostname -s).der
# 重启计算机,进入UEFI界面,选择“MOK management”,导入秘钥
# 重启,之后再次安装grub-efi-amd64-signed,这样只有使用秘钥才能启动Linux系统
sudo apt-get install grub-efi-amd64-signed

五、总结

本文介绍了如何修复Linux系统的grub引导问题,包括启动问题、分区问题、故障诊断和安全机制等方面。通过本文的指引和代码示例,希望读者能够更好地理解Linux系统的grub引导工作原理,并且掌握一些实用的技巧,使得我们在Linux系统的日常运维工作中能够快速而准确地解决grub引导问题。

原创文章,作者:KTSKM,如若转载,请注明出处:https://www.506064.com/n/333514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KTSKMKTSKM
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • 运维Python和GO应用实践指南

    本文将从多个角度详细阐述运维Python和GO的实际应用,包括监控、管理、自动化、部署、持续集成等方面。 一、监控 运维中的监控是保证系统稳定性的重要手段。Python和GO都有强…

    编程 2025-04-29
  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • Python wordcloud入门指南

    如何在Python中使用wordcloud库生成文字云? 一、安装和导入wordcloud库 在使用wordcloud前,需要保证库已经安装并导入: !pip install wo…

    编程 2025-04-29
  • Python小波分解入门指南

    本文将介绍Python小波分解的概念、基本原理和实现方法,帮助初学者掌握相关技能。 一、小波变换概述 小波分解是一种广泛应用于数字信号处理和图像处理的方法,可以将信号分解成多个具有…

    编程 2025-04-29
  • Python字符转列表指南

    Python是一个极为流行的脚本语言,在数据处理、数据分析、人工智能等领域广泛应用。在很多场景下需要将字符串转换为列表,以便于操作和处理,本篇文章将从多个方面对Python字符转列…

    编程 2025-04-29
  • Python初学者指南:第一个Python程序安装步骤

    在本篇指南中,我们将通过以下方式来详细讲解第一个Python程序安装步骤: Python的安装和环境配置 在命令行中编写和运行第一个Python程序 使用IDE编写和运行第一个Py…

    编程 2025-04-29
  • Python起笔落笔全能开发指南

    Python起笔落笔是指在编写Python代码时的编写习惯。一个好的起笔落笔习惯可以提高代码的可读性、可维护性和可扩展性,本文将从多个方面进行详细阐述。 一、变量命名 变量命名是起…

    编程 2025-04-29
  • FusionMaps应用指南

    FusionMaps是一款基于JavaScript和Flash的交互式地图可视化工具。它提供了一种简单易用的方式,将复杂的数据可视化为地图。本文将从基础的配置开始讲解,到如何定制和…

    编程 2025-04-29
  • Python中文版下载官网的完整指南

    Python是一种广泛使用的编程语言,具有简洁、易读易写等特点。Python中文版下载官网是Python学习和使用过程中的重要资源,本文将从多个方面对Python中文版下载官网进行…

    编程 2025-04-29

发表回复

登录后才能评论