AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 679870
Accepted
Nikita Kipriyanov
Nikita Kipriyanov
Asked: 2021-12-03 00:52:08 +0800 CST2021-12-03 00:52:08 +0800 CST 2021-12-03 00:52:08 +0800 CST

grub2-install 抛出各种错误而不是安装,如何继续?

  • 772

系统是CentOS 7。它安装在两块MD RAID的硬盘上,一个驱动器死了。我们决定改用两个尺寸稍大的 SSD。当它们连接并启动系统时,sda看起来像是一个有两个分区的旧硬盘,sda1参与md126其中的 500M 是/boot,sda2参与md127其中的是 LVM PV,其中包含其他所有内容。sdb并且sdc是新的 SSD。

我开始将阵列从硬盘移动到 SSD。我像旧设备一样对新设备进行分区,并将它们添加到数组中,然后将数组扩展为包含 3 个设备:

mdadm --add /dev/md126 /dev/sd[bc]1
mdadm --add /dev/md127 /dev/sd[bc]2
mdadm --grow -n 3 /dev/md126
mdadm --grow -n 3 /dev/md127

一段时间后,我确认所有 RAID 已完全同步,然后我从阵列中移除硬盘并将它们重新设置为每个包含 2 个设备:

mdadm -f /dev/md126 /dev/sda1
mdadm -r /dev/md126 /dev/sda1
mdadm -f /dev/md127 /dev/sda2
mdadm -r /dev/md127 /dev/sda2
mdadm --grow -n 2 /dev/md126
mdadm --grow -n 2 /dev/md127

两个阵列都是干净的。我将引导加载程序安装到新安装的设备中:

[root@master ~]# grub2-install /dev/sdc
Installing for i386-pc platform.
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.

看到这些警告我不是很高兴,我仍然不确定它是否安装到正确的设备上。我检查了/boot/grub2/device.map,它指的是旧驱动器,所以我修复了它,现在它是:

# this device map was generated by anaconda
(hd0)      /dev/sdb
(hd1)      /dev/sdc
(hd2)      /dev/sda

剩余的驱动器最终将被移除并希望重新使用,所以我要从任何数据中清除它(不要泄漏它):

dd if=/dev/zero of=/dev/sda bs=8k

它完成了,然后我再次尝试将 grub 重新安装到 SSD 上,以确保:

[root@master ~]# grub2-install /dev/sdb
Installing for i386-pc platform.
grub2-install: error: disk `mduuid/85faee0a366da795c6ac33a7c4a48ae8' not found.

第一行立即出现,错误信息延迟了 10 秒。第二个 SSD 也是如此。

如果我/dev/sda1再次将其添加到阵列中,将其正确增长到 3 个设备,则会显示:

[root@master /]# grub2-install /dev/sdb
Installing for i386-pc platform.
grub2-install: error: unknown filesystem.

我确信它包含一个有效的引导文件系统。我将它与 RAID 分开并检查,它在那里:

[root@master /]# blkid -p /dev/sda1
/dev/sda1: UUID="85faee0a-366d-a795-c6ac-33a7c4a48ae8" UUID_SUB="bc7af7ca-09f2-f533-3a79-53d98f5dd09a" LABEL="master.service.intrid.ru:boot" VERSION="1.0" TYPE="linux_raid_member" USAGE="raid" PART_ENTRY_SCHEME="dos" PART_ENTRY_TYPE="0xfd" PART_ENTRY_FLAGS="0x80" PART_ENTRY_NUMBER="1" PART_ENTRY_OFFSET="2048" PART_ENTRY_SIZE="1046528" PART_ENTRY_DISK="8:0" 
[root@master /]# tune2fs -l /dev/md126 | grep feat
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
[root@master /]# mdadm -f /dev/md126 /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md126
[root@master /]# mdadm -r /dev/md126 /dev/sda1
mdadm: hot removed /dev/sda1 from /dev/md126
[root@master /]# tune2fs -l /dev/sda1 | grep feat
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize

很奇怪。

现在我被困住了。该系统工作正常,所有文件系统都很好,它为客户服务。例如,/boot已安装并且可用,我卸载并检查了它,然后重新安装回来。

互联网上充满了从救援现场媒体重新启动系统的建议,甚至在 grub 在重新启动时被放入救援 shell 后如何解决这个问题。我检查的一些资源:

  • https://ahelpme.com/linux/grub2-grub-install-error-disk-mduuid-not-found-even-after-the-partition-has-bios_grub-on/
  • grub2-install 错误 - 找不到磁盘(顺便说一句,没有回答)
  • https://linoxide.com/fix-grub-filesystem-type-unknown-error-on-centosredhat/
  • https://www.linuxquestions.org/questions/linux-newbie-8/centos-7-error-unknown-filesystem-grub-rescue-4175687414/

但是,我还没有重新启动它,我也不想重新启动,直到我确定它会启动,因为它是远程的,周围的人将无法修复引导加载程序。我以前多次更换过这样的设备,我不记得有这样的问题,但是这总是用 Gentoo 或 Debian 完成的,它们通常拥有比 CentOS 更新的软件。

那么,是否可以在不启动应急媒体的情况下从系统远程修复引导加载程序?可能是通过告诉 grub 不要检查任何东西而只是将所需的东西写到媒体上的适当位置?

如果我转储/boot文件系统,从头开始重新创建包含它的数组并将图像写回,它会有所帮助吗?之后如何重新创建 initramfs?

centos grub2
  • 1 1 个回答
  • 386 Views

1 个回答

  • Voted
  1. Best Answer
    Nikita Kipriyanov
    2021-12-05T03:49:18+08:002021-12-05T03:49:18+08:00

    经过一段时间的尝试和思考,我回到了我在问题中提到的第一篇文章:https ://ahelpme.com/linux/grub2-grub-install-error-disk-mduuid-not-found-even-after-the -partition-has-bios_grub-on/

    作者认为内核中有一些关于数组的结构,这些结构在重新启动后会被重建。究竟是什么时候?可能在发现和组装期间。确实,引导阵列的重新组装有所帮助。这就是我解决这个问题的方法。

    首先,我们卸载并拆卸阵列:

    [root@master ~]# umount /boot
    [root@master ~]# mdadm --stop /dev/md126
    mdadm: stopped /dev/md126
    [root@master ~]# cat /proc/mdstat
    Personalities : [raid1] 
    md127 : active raid1 sdc2[4] sdb2[3]
          487731200 blocks super 1.2 [2/2] [UU]
          bitmap: 2/4 pages [8KB], 65536KB chunk
    
    unused devices: <none>
    

    mdstat显示没有引导阵列,我也确实dmesg在这一点上阅读以确保一切正常:

    [243050.619210] md126: detected capacity change from 535756800 to 0
    [243050.619260] md: md126 stopped.
    [243050.619271] md: unbind<sdb1>
    [243050.629871] md: export_rdev(sdb1)
    [243050.630093] md: unbind<sdc1>
    [243050.635890] md: export_rdev(sdc1)
    

    然后重新组装回来:

    [root@master ~]# mdadm --assemble --run /dev/md126 /dev/sdb1 /dev/sdc1
    mdadm: /dev/md126 has been started with 2 drives.
    

    请注意,它会自动安装,dmesg是:

    [243124.197117] md: bind<sdc1>
    [243124.197468] md: bind<sdb1>
    [243124.200993] md/raid1:md126: active with 2 out of 2 mirrors
    [243124.201010] md126: detected capacity change from 0 to 535756800
    [243124.201461]  md126: unknown partition table
    [243124.238232]  md126: unknown partition table
    [243124.246330] EXT4-fs (md126): mounted filesystem with ordered data mode. Opts: (null)
    

    现在它安装得很好:

    [root@master ~]# LANG=C grub2-install /dev/sdb
    Installing for i386-pc platform.
    Installation finished. No error reported.
    [root@master ~]# LANG=C grub2-install /dev/sdc
    Installing for i386-pc platform.
    Installation finished. No error reported.
    

    无需重启!

    • 1

相关问题

  • systemctl 命令在 RHEL 6 中不起作用

  • 为什么我的交换机没有从指定的池中获取地址

  • 在 CentOS7 GNOME 的 Applications-menu 选项卡中创建自定义菜单

  • 奇怪的路由器与centos 6一起工作[关闭]

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve