双硬盘安装linux系统,去掉一个硬盘后grub报错的处理!

2023-11-11 08:48

本文主要是介绍双硬盘安装linux系统,去掉一个硬盘后grub报错的处理!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于GRUB所在的MBR主引导扇区已被破坏,系统无法正常启动
使用安装光盘引导进入rescue模式。
步骤:

  1. 安装光盘或者U盘安装的方式安装界面选择Troubleshooting模式
  2. 选择Rescue a CentOS Linux system进入。
  3. 提示硬盘上的系统已经被找到并挂载在/mnt/sysimage 下,选择1,continue用读写模式加载
  4. 提示输入chroot /mnt/sysimage改变到磁盘根目录,Please press ENTER to get a shell:
  5. 按回车进入sh-4.4# 注:此时还没有chroot /mnt/sysimage
  6. #chroot /mnt/sysimage
  7. bash4.4##fdisk -l /dev/sda {使用fdisk检查分区}
  8. bash4.4#grub2-install /dev/sda {安装grub引导程序到磁盘/dev/sda的MBR扇区}
  9. bash4.4#exit
    reboot…重启即可

或者
在一个你能进入的linux系统中,在加入的硬盘中安装grub

sh-4.4#grub
grub>root (hdx,y)
grub>setup (hd0)
grub>quit
这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。

grub安装的 三种安装方式

  1. 引言 grub是什么?最常态的理解,grub是一个bootloader或者是一个bootmanager,通过grub可以引导种类丰富的系统,如linux、freebsd、windows等。但一旦进入linux操作系统(如无特殊声明,以下提及操作系统或系统皆为linux操作系统),可以敲一个grub命令,就进入”grub>”提示状态,然后可以进入操作若干命令。这时候的grub是什么?是shell,是一个和bash类似的一个shell。并且提供了两种工作模式,交互(interactive)模式和非交互(batch)两种模式,grub-install命令正是利用了grub的非交互模式,在系统下直接完成了grub的安装。

  2. 三种安装方式 安装grub其实有3种方式,最常用的是grub-install,其实还有两种grub>install和grub>setup,其中grub>install是最底层的方式,grub>setup是更高一层的方式,而grub-install是最高级最简单的方式。接下来我们从grub>install开始讲,来对3个不同的方式作一下区分:

2.1. grub>install 进入grub>提示符之后,输入help install命令,会有如下提示:
install: install [–stage2=STAGE2_FILE] [–force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]其中,STAGE1 DEVICE STAGE2是必不可少的,以下为示例:
install (hd0,0)/grub/stage1 (hd0) (hd0,0)/grub/stage2
或者可以如下:
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2
通过这样一种方式可以成功安装grub,但系统reboot之后,不能进入系统,却直接进入grub>.why?
因为这种安装方式没有告知grub去哪里找grub.conf,stage2找不到grub.conf就会进入grub>.
用以下形式安装就ok了。
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf

2.2. grub>setup 进入grub>提示符之后,输入help setup命令,会有如下提示:
setup: setup [–prefix=DIR] [–stage2=STAGE2_FILE] [–force-lba] INSTALL_DEVICE [IMAGE_DEVICE]
Set up the installation of GRUB automatically. This command uses
the more flexible command “install” in the backend and installs
GRUB into the device INSTALL_DEVICE. 从以上内容我们可以看出,setup是一个自动化(automatically)的grub安装,它在后台(backend)运行了更灵活多变的install命令。看示例:
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
Checking if “/boot/grub/stage1” exists… no
Checking if “/grub/stage1” exists… yes
Checking if “/grub/stage2” exists… yes
Checking if “/grub/e2fs_stage1_5” exists… yes
Running “embed /grub/e2fs_stage1_5 (hd0)”… 16 sectors are embedded.
succeeded
Running “install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf”… succeeded Done.
从以上可以看出,setup命令将install命令封装了,使用setup命令比使用install命令简单很多。但实际的过程比install却要复杂一些,其中尤其重要的一点是:使用setup会植入e2fs_stage1_5到硬盘的第一柱面第16扇区之后(这个没有准确验证过),这会带来和通过install安装一个很大的区别。

2.3. grub-install 安装grub最常用的方式是在进入系统之后,通过grub-install脚本进行安装,通过这个脚本安装和前两种方式有何不同呢?
脚本其实是通过grub的非交互模式,调用了setup命令安装grub的。[]脚本的安装源是/usr/share/grub/i386-redhat/下的stage1、2和各种stage1.5,而前两种方式使用的源是/boot/grub/下的相同内容。所以通过grub-instal安装grub,原先在/boot/grub下的stage文件都删除也没关系,该脚本每次执行都会删除这些文件的。反之,通过前两种方式安装的话,相应的stage文件是不可或缺的,否则会报错,安装失败。[]通过grub-install安装grub之后,如果我们删除了/boot/grub/下的stage2文件,系统会无法启动,报如下错: GRUB loading stage 1.5
GRUB loading, please wait…
Error 15
但是,如果是通过grub>install方式安装的grub,删除/boot/grub/stage2就没有问题,why?因为通过grub>install安装grub,stage1是直接通过stage2所在的blocklist找stage2,我们删除或者改名stage2文件,文件的存放位置是不变的,因此能找到。而通过grub-install脚本,或者grub>setup,会智能的找到相应的stage1.5,例如:/grub/e2fs_stage1_5,然后通过stage1.5认识文件系统,是通过文件名去找stage2的,所以通过这两种方式安装的grub,不可删除或者改名/boot/grub/stage2。
stage1.5是放在0磁道第3扇区和第64扇区的扇区集里,且当你安装grub时会根据你/boot分区所属的文件系统,来选者stage1.5。
(如果你的/boot分区是ext3的。那么安装时就只将ext3的stage1.5安装,其他的是以文件的形式放在/boot/grub里)
stage2是放在/boot/grub里

这篇关于双硬盘安装linux系统,去掉一个硬盘后grub报错的处理!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388901

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核