如何在Linux中修复损坏的Initrd镜像

时间:2020-03-05 15:26:49  来源:igfitidea点击:

今天,我们将向我们展示如何修复损坏或者意外删除的Initrd镜像。
Ubuntu安装机器中的Linux Kernel Image和GRUB Loader。
它也应该适用于Ubuntu衍生产品以及其他发行版。

Initrd是一种在Linux内核的引导过程中将临时根文件系统加载到内存中的方案。
它是初始文件系统的cpio存档,在Linux启动过程中被加载到内存中。
内核将其挂载为根文件系统,并从中启动初始化过程。

如果我们安装的内核已损坏,或者由于对系统内核或者启动过程进行了一些修改而导致系统崩溃,则Initrd镜像可能会损坏或者损坏:

我们知道,“有志者事竟成”。
是的,我们可以修复或者重建initrd镜像。
就我而言,将介绍我的Ubuntu 13.10操作系统。

以下是带有屏幕截图的简单明智的分步操作,它们我们重建损坏的内核镜像(Initrd)

1.使用实时媒体启动计算机

我们可以使用Ubuntu CD/DVD或者U盘实时启动计算机。
如果我们没有,则有很多创建可启动媒体的方法。
我们可以从他们的官方(即)下载最新的Ubuntu发行版。

http://ubuntu.com/并将镜像刻录到空白DVD或者使用unetbootin创建可启动的U盘。

2.打开终端控制台并获取分区路径

我们可以通过在Ubuntu中按Ctrl + Alt + T轻松运行终端控制台,也可以通过按Ctrl + Alt + f1切换到tty1.
我们需要做的是,我们需要从硬盘上挂载文件系统。
为此,我们需要知道设备路径。
要获取设备路径,我们需要运行:

$sudo fdisk -l

在上面的结果中,就我而言,sda1是我需要挂载的那个。

3.挂载文件系统

我们需要挂载硬盘分区(例如/(根),/boot,/var)的文件系统,并且应该在目录/mnt下挂载绑定/sys,/proc和/dev。
因此,可以通过以下步骤完成:

$sudo mount /dev/sdaX /mnt

注意:在我的情况下,在/dev/sdaX中,X指的是分区号1,这是我们从步骤2获得的。

$sudo mount --bind /dev /mnt/dev
$sudo mount --bind /proc /mnt/proc
$sudo mount --bind /sys /mnt/sys

4. Chroot/mnt并创建initrd镜像的备份

现在,我们需要chroot/mnt,以便我们可以为硬盘分区设置chrooted环境。

$sudo chroot /mnt

Chroot完成后,我们将备份initrd的镜像文件,我们可以在/boot下看到该镜像文件。

# ls /boot/*initrd*
or
# ls /lib/modules/

我们可以从上述命令获取系统中当前存在的内核版本。

考虑将3.11.0.12-generic版本替换为我们从上述命令中获得的版本。

# mv /boot/initrd.img-3.11.0.12-generic /boot/old-initrd.img-3.11.0.12-generic-old

注意:initrd镜像的文件格式可能从Ubuntu到基于Fedora的系统都不同。

如果initrd镜像已被删除,则我们将无法运行上述命令,因此无法创建其备份。

5.建立Initrd镜像

现在,真正的东西就在这里。
我们将使用以下命令在此处构建initrd内核镜像:

# mkinitrd /boot/initrd.img-3.11.0.12-generic 3.11.0.12-generic-old

上面的命令适用于其他发行版,例如CentOS,Fedora,Hat等,不适用于Ubuntu

对于基于Ubuntu的发行版:

# update-initramfs -c -k 3.11.0.12-generic

6.完成Grub Loader的安装并卸载

我们将通过以下方式卸载挂载的路径:

如果系统安装了Fedora,RHEL,CentOS,请尝试以下操作:

# grub2-mkconfig -o /boot/grub2/grub.cfg

如果系统安装了Ubuntu及其衍生版本:

# update-grub
# exit

现在,我们已经成功离开了Chroot环境。

$sudo umount /dev
$sudo umount /proc
$sudo umount /sys
$sudo umount /mnt

现在,重新启动计算机并弹出可启动媒体。

我们已经成功完成了该工作,将系统引导回正常状态。