featured-image

Centos虚拟机迁移或更换硬件设备后无法启动重载驱动

使用Hyper-V的虚拟机,转换导入VMware,或者VMware导入Hyper-V后,因网卡、硬盘驱动等不同,Centos会出现无法启动的情况,这时候需要修复重建initranfs,进入recovery执行下列命令修复:

dracut –regenerate-all –force

如果是要修复Grub2,命令如下:grub2-mkconfig -o /boot/grub2/grub.cfg

怎么判断需要重建initranfs还是重建Grub呢?

一般硬件驱动问题,无法启动,光标会出现在报错后进入dracut视图,因为dracut就是用来修复和建立initranfs的,如果是Grub有问题,广播会一直闪,或者进入Grub视图。

那么initranfs是干什么的呢?问了下GPT

dracut --regenerate-all --force 命令的作用是重新生成(或重建)系统的 initramfs 文件,并且通过 --force 参数强制进行操作。让我们逐步解析这个命令的含义,以及与 initramfs 相关的概念。

1. dracut 是什么?

dracut 是一个用于创建和更新 initramfs(initial RAM filesystem)的工具。在 Linux 系统启动时,initramfs 被加载到内存中,包含了基本的文件系统和启动时需要的驱动程序,用于初始化操作系统并挂载根文件系统。

2. 什么是 initramfs

initramfsinitial RAM filesystem(初始内存文件系统)的缩写。它是一个用于 Linux 系统引导过程中的临时文件系统,包含了一些基本的工具、驱动程序和脚本,在操作系统的根文件系统挂载之前就会加载。其主要目的是:

  • 启动时的系统初始化:它在内核加载后,根文件系统挂载之前被加载。系统会从 initramfs 中加载必要的驱动程序(如硬盘驱动、网络驱动等)来访问磁盘和其他硬件。
  • 提供引导程序initramfs 中包含启动系统所需的脚本,这些脚本会引导 Linux 内核找到并挂载真正的根文件系统。

具体来说,initramfs 包括以下内容:

  • 内核模块:在系统启动时需要加载的驱动程序,例如磁盘驱动、文件系统驱动等。
  • 系统脚本:包括系统启动过程的脚本,负责挂载根文件系统、初始化网络、装载驱动程序等。
  • 基础文件系统:一些基础工具和配置文件,用于确保系统能够启动并执行必要的操作。

3. dracut --regenerate-all --force 的作用

这个命令的主要作用是重新生成当前系统的 initramfs。它会从当前的内核环境生成新的 initramfs 文件,并且通过 --force 参数强制执行。具体步骤如下:

  • --regenerate-all:这表示 dracut 会重新生成所有内核的 initramfs 文件。通常,在系统中有多个内核版本时,这个命令会更新当前所有的内核版本的 initramfs 文件。
  • --force:这个参数会强制执行命令,即使存在某些配置文件、依赖文件等没有修改,dracut 仍然会强制重新生成 initramfs。它忽略一些安全检查,强制覆盖当前的 initramfs

4. 为什么需要修复/重载 initramfs

修复或重载 initramfs 通常在以下情况下需要进行:

  • 内核更新或修改:当你升级、安装或更改内核时,需要更新 initramfs。如果没有更新 initramfs,新内核可能无法加载所需的驱动或正确启动。
  • 硬件变更:例如,当你更换了硬件,或新增了新的硬件设备(如磁盘、网络适配器等),需要重新生成 initramfs 以确保系统能够加载适当的驱动程序。
  • 系统故障:有时,initramfs 中的文件可能损坏或丢失,导致系统无法启动。重新生成 initramfs 可以解决此类问题。
  • 根文件系统挂载问题:如果 initramfs 中的配置文件没有正确设置,导致系统无法正确挂载根文件系统,那么通过重新生成 initramfs 可以解决这类启动问题。

5. initramfs 相关的修复操作

  • 修复 initramfs:在系统启动时,如果出现 initramfs 错误(如无法挂载根文件系统或缺少必要驱动),你可以使用 dracut --regenerate-all --force 来重新生成 initramfs,从而解决系统无法启动的问题。
  • 重载 initramfs:当你修改了 initramfs 配置或添加了新的内核模块时,重载 initramfs 会确保系统能够加载新的配置文件或驱动。

6. 如何检查和生成 initramfs?

如果你想手动检查和生成 initramfs,可以执行以下命令:

  • 检查现有的 initramfs 文件:bash复制ls /boot/initramfs-$(uname -r).img 这个命令会列出当前内核版本的 initramfs 文件。
  • 使用 dracut 生成新的 initramfs 文件:bash复制dracut --force /boot/initramfs-$(uname -r).img $(uname -r) 这会为当前内核生成新的 initramfs 文件。

总结

  • dracut 是用来生成和更新 initramfs 的工具。
  • initramfs 是一个临时的根文件系统,包含了启动 Linux 系统所需的基本文件和驱动程序。
  • 重新生成 initramfs 可以帮助修复系统启动问题,尤其是在内核更新或硬件更改后。
  • dracut --regenerate-all --force 命令会强制重新生成所有内核版本的 initramfs 文件,确保系统可以正确启动并加载必要的驱动和文件。
Copyright © 2014 - 2021 CloudITIDC Global All Rights Reserved